(3)Kafka消费者工作机制详解
Kafka设计原理总结
(1)Kafka设计架构综述
(2)Kafka中生产者工作机制详解
(3)Kafka 消费者工作机制详解
(4)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中,一个分区只能由一个消费者消费。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
