KafkaConsumer 分析

image.png

1. Old Low Level Consumer API

1.1 优缺点

1.1.1优点

使用Low Level Consumer (Simple Consumer)的主要原因是,用户希望比Consumer Group更好的控制数据的消费。比如:
1.同一条消息读多次
2.只读取某个Topic的部分Partition
3.管理事务,从而确保每条消息被处理一次,且仅被处理一次
4.可以做到at-least-once或者exactly-once

1.1.2缺点

1.与Consumer Group相比,Low Level Consumer要求用户做大量的额外工作
必须在应用程序中跟踪offset,从而确定下一条应该消费哪条消息
2.应用程序需要通过程序获知每个Partition的Leader是谁,必须处理Leader的变化

1.1.3使用Low Level Consumer的一般流程如下

1.查找到一个“活着”的Broker,并且找出每个Partition的Leader
2.找出每个Partition的Follower
3.定义好请求,该请求应该能描述应用程序需要哪些数据
4.Fetch数据
5.识别Leader的变化,并对之作出必要的响应

1.2 源码解析

image.png

image.png

image.png

image.png

image.png

image.png

2. Old High Level Consumer API

2.1 优缺点

2.1.1优点

很多时候,客户程序只是希望从Kafka读取数据,不太关心消息offset的处理。同时也希望提供一些语义,例如同一条消息只被某一个Consumer消费(单播)或被所有Consumer消费(广播)。因此,Kafka Hight Level Consumer提供了一个从Kafka消费数据的高层抽象,从而屏蔽掉其中的细节并提供丰富的语义。
exactly-once

2.1.2缺点

目前,最新版(0.8.2.1)Kafka的Consumer Rebalance的控制策略是由每一个Consumer通过在Zookeeper上注册Watch完成的。每个Consumer被创建时会触发Consumer Group的Rebalance,具体启动流程如下:

  • High Level Consumer启动时将其ID注册到其Consumer Group下,在Zookeeper上的路径为/consumers/[consumer group]/ids/[consumer id]
  • /consumers/[consumer group]/ids上注册Watch
  • /brokers/ids上注册Watch
  • 如果Consumer通过Topic Filter创建消息流,则它会同时在/brokers/topics上也创建Watch
  • 强制自己在其Consumer Group内启动Rebalance流程

在这种策略下,每一个Consumer或者Broker的增加或者减少都会触发Consumer Rebalance。因为每个Consumer只负责调整自己所消费的Partition,为了保证整个Consumer Group的一致性,当一个Consumer触发了Rebalance时,该Consumer Group内的其它所有其它Consumer也应该同时触发Rebalance。

该方式有如下缺陷:

2.2 源码解析

image.png
image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png
image.png

image.png

3. New Consumer API

1.java语言编写
2.comsumer offset保存于KafkaCluster的__consumer_offsets topic中,0.8.2版本的consumer offset保存于zk中,可以去zk上手动修改offset
3.支持自己commit offset与自动commit offset

4.kafka to sparkstreaming的两种模式解析

image.png

相关文档&博客
http://kafka.apache.org/090/documentation.html#simpleconsumerapi
http://www.jasongj.com/2015/08/09/KafkaColumn4/
https://cloud.tencent.com/developer/article/1004821

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容