kafka协调者

协调者角色

协调者本身是kafka集群的一个broker,负责一个或多个消费者组的消费位移offset提交以及Rebalance工作。如何确定协调者?

  1. 协调者所在分区:消费者组groupID的哈希值 % _consumer_offsets队列分区数量
  2. 步骤1确定的分区的leader副本所在broker即为协调者。

消费位移提交

消费者本地会维护一个消费位移offset,每次从kafka队列中拉取消息时都会使用该offset,消费成功之后更新offset。但是消费者组中不同消费者实例在执行过程中可能因为Rebalance重平衡过程导致消费的分区发生变化。新的消费者实例再连接到分区时,需要知道上一任消费者的消费进度,以便在此基础上继续消费。为此kafka需要保存整个消费者组在不同topic的不同partition上的消费位移。

在旧版本中,消费者组的消费位移被保存在zk上,但是zk是强一致模型,每次更新都需要保证超过半数的zk实例完成更新只有才能返回,因此更新操作性能较差。而消费者位移又是一个需要频繁更新的操作,因此直接保存在zk上性能很差。

因此在新版本中,kafka在集群中默认新建了一个_consumer_offsets队列,用这个队列来保存消费位移。这个队列中的消息以kv的形式存储,key是由消费者groupId、topic、partition id组成,能够唯一标识每一个消费者组在指定topic的指定partition上的消费位移。

提交方式

消费位移的提交方式有两种,自动提交和手动提交。

自动提交位移会由后台线程定期提交位移。这种方式缺点很明显

  1. 可能会造成消息的重复消费。比如定期提交位移的时间是5s,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值