Kafka深入----消费者
消费方式
拉取模式
- 从broker中读取数据(pull模式)
- pull模式中的不足,如果kafka中没有数据时,消费者就会陷入循环中,一直返回空数据
- 故Kafka的消费者在消费数据时会传入一个==时长参数(timeout)==如果当前没有数据可以消费,则消费者一段时间后返回,时长即为timeout
分区分配策略
-
RoundRobin(轮询)
保证消费者组内订阅的数据都是同一个Topic主题的数据 -
Range(范围)
- 调用分区策略的选择
- 当启动消费者的时候就会调用分区策略
- 当分区的个数发生变化时,则就会调用分区调用的策略
Offset维护
- (group+topic+partition)
- offset 通过consumer实时记载来定位到发生故障时消费到哪个offset
- Kafka 0.9 版本之前,consumer 默认将 offset 保存在 Zookeeper 中,从 0.9 版本开始,
consumer 默认将 offset 保存在 Kafka 一个内置的 topic 中,该 topic 为__consumer_offsets。 - 需要配置文件
consumer.properties中的
exclude.internal.topics=false
读取offset
0.11版本之前
bin/kafka-console-consumer.sh --topic __consumer_offsets --
zookeeper master:2181 --formatter
"kafka.coordinator.GroupMetadataManager\$OffsetsMessageFormatter"
--consumer.config config/consumer.properties --from-beginning
0.11版本之后
bin/kafka-console-consumer.sh --topic __consumer_offsets --
zookeeper master:2181 --formatter
"kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageForm
atter" --consumer.config config/consumer.properties --frombeginning