kafka:复制品和ISR不匹配

时间:2015-09-23 11:50:40

标签: replication apache-kafka

我将数百个主题从一个经纪人转移到另一个经纪人。这个过程是

  1. 使用kafka-topics.sh生成现有分区列表
  2. 使用kafka-reassign-partitions.sh生成当前的分区/代理列表/ etc
  3. 编辑此列表,以便经纪人7(待更换)的每个实例现在都是经纪人7,4 (4是新经纪人)
  4. 运行kafka-reassign-partitions.sh (broker list) --execute以添加新经纪人
  5. 等等..看..(使用--verify)..直到完成......
  6. 编辑经纪人列表为经纪人4,7
  7. 再做(4)..再做(5)..
  8. 运行首选领导者选举(如果7是领导任何事情)
  9. 编辑代理列表以删除代理7
  10. 的所有实例
  11. 再做(4)和(5)
  12. 快乐
  13. 这对于成百上千个主题非常有用..除了一个粘性问题。这种坚持拒绝与新经纪人(ISR列表中缺失)同步,即使它包含在副本列表中

    kafka-topics.sh的输出(试图用经纪人4替换经纪人7):

      

    主题:shard_3分区:7领导者:3个副本:3,4,7 Isr:7,3

    我已经多次运行(4)以期完成此任务,但似乎并不想这样做。我已经等了一夜,以防它真的很慢。

    关于如何解开这个问题的建议?

1 个答案:

答案 0 :(得分:1)

事实证明,主要经纪人对某些事情感到不满,而且分区列表并未保持最新状态。

解决方案:

  1. bin/zkCli.sh -server <kafka broker in cluster>
  2. get /controller
  3. 重新启动该控制器上的kafka服务 - 这会将控制传递给另一个框
  4. 重试分区命令