kafka-consumer深度剖析
Producer通过主动Push的方式将消息发布到Broker ,Consumer通过Pull从Broker消费数据,Pull的好处:
- Consumer按实际处理能力获取相应量的数据;不会被压垮
- Broker实现简单
- 如果处理不好,实时性相对不足
Kafka读写机制
每个partition有一个leader 和若干个Follower(replica),Kafka数据的读写都是找leader来完成的,那leader 的负载怎么解决呢?leader和follower是partition级别的,一个topic可以创建多个partition,是这样解决负载问题的。
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可消费同一条消息
Consumer Balance
- 将Topic下的所有Partirtion排序
- 对Consumer Group下所有Consumer排序
- N=size(P)/size(C),向上取整
- 将N个Partition分配给C