articleList

15-Consumer消费者重新分配策略和offset维护机制

2025/03/13 posted in  Kafka
Tags: 

  • 什么是Rebalance操作

    • kafka 怎么均匀地分配某个 topic 下的所有 partition 到各个消费者,从而使得消息的消费速度达到最快,这就是平衡(balance),前面讲了 Range 范围分区 和 RoundRobin 轮询分区,也支持自定义分区策略
    • 而 rebalance(重平衡)其实就是重新进行 partition 的分配,从而使得 partition 的分配重新达到平衡状态
  • 面试

    • 例如70个分区,10个消费者,但是先启动一个消费者,后续再启动一个消费者,这个会怎么分配?
      • Kafka 会进行一次分区分配操作,即 Kafka 消费者端的 Rebalance 操作 ,下面都会发生rebalance操作
        • 当消费者组内的消费者数量发生变化(增加或者减少),就会产生重新分配patition
        • 分区数量发生变化时(即 topic 的分区数量发生变化时)
  • 面试:当消费者在消费过程突然宕机了,重新恢复后是从哪里消费,会有什么问题?

    • 消费者会记录offset,故障恢复后从这里继续消费,这个offset记录在哪里?
    • 记录在zk里面和本地,新版默认将offset保证在kafka的内置topic中,名称是 __consumer_offsets
      • 该Topic默认有50个Partition,每个Partition有3个副本,分区数量由参数offset.topic.num.partition配置
      • 通过groupId的哈希值和该参数取模的方式来确定某个消费者组已消费的offset保存到__consumer_offsets主题的哪个分区中
      • 由 消费者组名+主题+分区,确定唯一的offset的key,从而获取对应的值
      • 三元组:group.id+topic+分区号,而 value 就是 offset 的值