我正在查看日志,查找我们最近在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
当我在谷歌上搜索这个时,我没有找到任何真正有用的东西。另一件事是,所有出现的东西似乎都很古老,都是指卡夫卡1.0之前的版本。我们应该运行1.1.0。
有什么想法吗?为什么会有人试图将分区改变为它看起来已经处于的状态?我想我能理解这怎么会被视为失败,因为什么都不会改变,但总的来说,这似乎是荒谬的。
根据Kafka控制器内部页面,当应该选择新的分区领导者时,这是一个有效的状态转换:
有效的状态转换为:
联机分区、脱机分区->联机分区
为此分区和一组副本选择新的leader和isr以接收LeaderAndIsr请求,并将leader和isr写入ZK
cPreferredReplicaPartitionLeaderSelector:new leader=第一个分配的副本(如果在isr中(;new isr=当前isr;接收副本=分配的副本
向每个接收发送LeaderAndIsr请求向每个实时代理发送副本和UpdateMetadata请求
编辑
关于重置偏移,您能否检查KAFKA-6189是否适用于您的情况。如果没有,请分享您的集群、主题和使用者组的配置详细信息。