Kafka offset维护机制

Kafka offset的维护

上一篇介绍过Kafka的生产者相关的机制,这一篇来介绍一下kafka消息的offset。

由于 Consumer 在消费过程中可能会出现断电宕机等故障,Consumer 恢复后,需要从故障前的位置继续消费。所以 Consumer 需要实时记录自己消费到了哪个 Offset,以便故障恢复后继续消费。

Kafka 0.9 版本之前,Consumer 默认将 Offset 保存在 Zookeeper 中,从 0.9 版本开始,Consumer 默认将 Offset 保存在 Kafka 一个内置的 Topic 中,该 Topic 为 __consumer_offsets。

zookeeper维护

kafka 0.9 以前的版本是将offset 存储在zookeeper上的,kafka在传输数据时,数据消费成功就会修改偏移量,这样就可以保证数据不会丢失而导致传输出错;但是这也存在一个问题:那就是每次消费数据时都要将数据的offset写入一次,效率比较低,而且zookeeper与kafka的offset变化确认也需要走网络IO,这样就会给offset的维护带来不稳定性和低效

验证:

  1. 起一个生产者:bin/kafka-console-producer.sh --topic test --broker-list 10.155.110.21:21007 --producer.config config/producer.properties
    在这里插入图片描述
  2. 起一个消费者:bin/kafka-console-consumer.sh --zookeeper 10.155.110.222:2181/kafka --topic test --consumer.config config/consumer.properties
  3. 使用生产者发送一条消息
  4. 连接zookeeper查看offset信息:offset增加了1
    在这里插入图片描述
    在这里插入图片描述

kafka自己维护offset

kafka 0.9 以后,offset的使用了内部的roker来管理,这样仅仅只需要broker,而不要zookeeper来维护,都是将topic提交给__consumer_offsets函数来执行

验证:

  1. 起一个生产者:bin/kafka-console-producer.sh --topic test --broker-list 10.155.110.21:21007 --producer.config config/producer.properties
  2. 起一个消费者:bin/kafka-console-consumer.sh --bootstrap-server 10.155.110.21:21007 --topic test --new-consumer --consumer.config config/consumer.properties
  3. 确认 consume_group 在哪个__consumer_offsets-?Math.abs(groupID.hashCode()) % numPartitions
  4. 查找__consumer_offsets 分区数中的消费组偏移量offset:
    先通过 consume_group 确定分区数; 例如 “szz1-group”.hashCode()%50=32; 那我们就知道 szz-group消费组的偏移量信息存放在 __consumer_offsets_32中;
    bin/kafka-simple-consumer-shell.sh --topic __consumer_offsets --partition 43 --broker-list 10.155.110.21:9092 --formatter “kafka.coordinator.group.GroupMetadataManager$OffsetsMessageFormatter”
    在这里插入图片描述
  5. 使用生产者发送一条消息
  6. 观察步骤4中offset变化:offset增加了1
    在这里插入图片描述
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值