(3)Kafka消费者工作机制详解
1.消费方式(pull vs push)传统Push模式虽然实时性高,但是容易造成consumer来不及处理消息,导致拒绝服务及网络拥塞。consumer采用pull(拉)模式从broker读取数据,这样可以控制消费速度。pull缺点:如果kafka没有数据,消费者可能会限于获取空数据的循环中。因此可以设置timeout参数,如果没有数据可供消费,consumer会等待一段时间再返回拿。2.消费时
·
Kafka设计原理总结
1.消费方式(pull vs push)
-
传统Push模式虽然实时性高,但是容易造成consumer来不及处理消息,导致拒绝服务及网络拥塞。
-
consumer采用pull(拉)模式从broker读取数据,这样可以控制消费速度。
-
pull缺点:如果kafka没有数据,消费者可能会限于获取空数据的循环中。因此可以设置timeout参数,如果没有数据可供消费,consumer会等待一段时间再返回拿。
2.消费时分区分配策略
由于CG中有多个 consumer,一个 topic 有多个 partition。那么需要策略来决定哪个partition 由哪个 consumer 来消费。
(1)RoundRobin(轮询)
简而言之,有3个消费者,则当前分区号%消费者数量=当前分区所属的消费者数量。
特点:
适合负责无规律的分区数据,或者每个分区数据量不均匀的情况
(2)Range
按照范围划分,7/3=2,以每两个分区为一组分配,最后一个分区6单独分配给consumer-0。
特点:
适合各分区内数据均匀情况
(3)消费者数量变化分区策略
如果在分配时消费者数量突然变更,不管是RoundRobin还是Range都要重新计算再分配。
3.offset维护
(1)offset作用
如果Consumer在消费过程中宕机,等恢复后,
offset可以帮助consumer从故障的位置继续消费。
(2)offset存储
Kafka0.9版本之前,
consumer默认将 offset 保存在 ZK 中,从 0.9 版本开始,consumer
默认将 offset 保存在 Kafka 一个内置的 topic 中,
该 topic 为__consumer_offsets。
通过参数可以修改存储位置:
exclude.internal.topics=false #不存储在内置Topic中
4.GC中不同消费者限制
(1)同一时刻,GC中只有一个Consumer消费。
(2)同一CG中,一个分区只能由一个消费者消费。
更多推荐
已为社区贡献2条内容
所有评论(0)