kafka-consumer深度剖析

Producer通过主动Push的方式将消息发布到Broker ,Consumer通过Pull从Broker消费数据,Pull的好处:

  • Consumer按实际处理能力获取相应量的数据;不会被压垮      
  • Broker实现简单                                                         
  • 如果处理不好,实时性相对不足

Kafka读写机制

每个partition有一个leader 和若干个Follower(replica),Kafka数据的读写都是找leader来完成的,那leader 的负载怎么解决呢?leader和follower是partition级别的,一个topic可以创建多个partition,是这样解决负载问题的。

kafka-consumer深度剖析_第1张图片

Consumer Group High Level Consumer

  • 高层抽象,屏蔽掉细节,提供丰富的语义,适合大多数应用场景
  • 客户只需要从Kafka顺序读取数据,而无序关心offset等具体细节
  • 语义级别控制同一条消息只被某一个Consumer消费或被所有Consumer消费Low LevelConsumer

Consumer Group

  • 使用High Level Consumer的客户程序提供给Kafka一个名字,这个名字被称为Consumer Group。
  • Consumer Group是整个Kafka集群全局唯一的,而非针对某个Topic的。
  • 每个High Level Consumer实例都属于一个ConsumerGroup,若不指定则属于默认的Group。
  • High Level Consumer从某个Partition读取的最后一条消息的offset会被存于kafka的一个专用topic中。
  • 消息被消费后,并不会被删除,只是相应的offset加一
  • 对于每条消息,在同一个Consumer Group里只会被一个Consumer消费
  • 不同Consumer Group可消费同一条消息

kafka-consumer深度剖析_第2张图片

Consumer Balance

  • 将Topic下的所有Partirtion排序
  • 对Consumer Group下所有Consumer排序
  • N=size(P)/size(C),向上取整
  • 将N个Partition分配给C

kafka-consumer深度剖析_第3张图片

你可能感兴趣的:(KafKa)