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中,一个分区只能由一个消费者消费。
Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐