kafka
-
消息队列
-
解耦、异步、流量削峰(服务器高峰期不直连)
-
把可有可无的消息处理放在消息队列,先异步响应,再调用消息处理
-
解耦
允许独立修改扩展处理过程,遵循接口约束。
-
可恢复性
系统部分组件失效,消息队列降低耦合,允许在挂掉某个处理进程,在系统恢复以后继续进行。
-
缓冲
控制优化数据流经过系统速度,解决生产消息和消费信息处理速度不一致情况。
-
灵活,峰值处理
突发流量处理,访问量剧增,不需要投入资源,关键组件负责顶住并发量,防止超负荷。
-
异步
信息优先级较低,不立刻处理,进入消息队列等待。
-
消息队列模式
-
点对点模式
一对一,消费者主动pull数据,消息收到立即清除
- 发布/订阅模式(kafka)
一对多,消费者消费完不清除消息
消息发布到topic中,同时多个消费者消费(订阅)该消息,发布到topic的消息被所有订阅者消费。
- 分类:
- 消费者主动拉取
- 缺点: 长轮询,多次访问队列,资源浪费。
- 消息队列推送
-
kafka基本架构
发布/订阅模式(消费者主动拉取)
- 生产者生产消息
- producer 提交消息进入集群。
- 通过topic主题分类进入不同的Broker,消息交给leader(kafka进程服务器)。
- kafka集群管理消息
- Broker 有一个leader,很多follower(备份,随时准备上位篡权leader)。
- 分区Partition提高并发,横向扩展,提高负载能力。
- 消费者消费消息
- 同一个分区的数据只能被同一个消费者组的某一个消费者所消费。
- 一个分区的一个数据只能被消费者组的一个用户消费,同组用户不能使用同一分区数据。
- 当消费者个数>集群分部数,就会造成消费者资源浪费,当相等时,资源利用率最高
- zookeeper 注册消息
- 帮助kafka管理集群,存储信息,帮消费者存储位置信息,高版本存放到系统topic中。
- 使用同一套zookeeper集群,kafka就可以保证同一套集群。
- zookeeper缺点:影响效率,消费者拉取要经过zookeeper。
kafka数据存放在磁盘中,而不是内存
- 生产者生产消息