Kafka无法将分区的状态从OnlinePartition更改为OnlinePartition

时间:2018-12-07 22:12:06

标签: apache-kafka runtime-error

我正在查看日志,以查找我们最近在Kafka上遇到的一个问题,最终导致完全抵消胶卷倒带。从日志中看,好像我们同时丢失了三个副本中的两个副本,或者至少这就是日志中的一个节点在说什么。大约在那个时候,我看到以下日志消息以不同的分区名称重复了很多次:

ERROR [Controller id=0 epoch=71] Controller 0 epoch 71 failed to change state for partition PARTITION.NAME from OnlinePartition to 
OnlinePartition (state.change.logger) kafka.common.StateChangeFailedException: Failed to elect leader for partition PARTITION.NAME under strategy PreferredReplicaPartitionLeaderElectionStrategy
    at kafka.controller.PartitionStateMachine$$anonfun$doElectLeaderForPartitions$3.apply(PartitionStateMachine.scala:328)
    at ...

奇怪的是

  

从OnlinePartition到OnlinePartition

当我在Google上搜索此内容时,没有发现真正有用的信息。另一件事是,所有出现的内容似乎都相当古老,并涉及Kafka的1.0之前版本。我们应该在运行1.1.0。

关于为什么要尝试将分区更改为看起来已经存在的状态的任何想法?我想我可以看到这怎么会被视为失败,因为什么都不会改变,但总体上似乎是荒谬的。

1 个答案:

答案 0 :(得分:2)

根据Kafka Controller Internals页,这是一个有效的状态转换,应选择新的分区领导者:

  

有效状态转换为:

     

。 。

     

OnlinePartition,OfflinePartition-> OnlinePartition

     
      
  1. 为此分区选择新的领导者和isr,并选择一组副本以接收LeaderAndIsr请求,并将领导者和isr写入ZK

         

    ...

         

    c。 PreferredReplicaPartitionLeaderSelector :新的领导者=第一个分配的副本(如果在isr中);新isr =当前isr;接收副本=分配的副本

         

    ...

  2.   
  3. 向每个接收方发送LeaderAndIsr请求   向每个实时代理发送副本和UpdateMetadata请求

  4.   


编辑

关于重置偏移量,您能否检查KAFKA-6189是否适用于您的情况。如果没有,请分享您的群集,主题和使用者组的配置详细信息。