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

Jim*_*mes 5 runtime-error apache-kafka

我正在查看我们最近在 Kafka 上遇到的问题的日志,我们最终得到了完全偏移倒带。从日志看来,我们有 3 个副本中的两个同时退出,或者至少节点日志中的一个是这样说的。大约在那个时候,我看到以下日志消息以不同的分区名称重复多次:

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 ...
Run Code Online (Sandbox Code Playgroud)

奇怪的是这部分说

从 OnlinePartition 到 OnlinePartition

当我在谷歌上搜索这个时,我没有发现任何真正有用的东西。另一件事是,所有出现的东西似乎都很旧,并且指的是 Kafka 1.0 之前的版本。我们应该运行 1.1.0。

关于为什么会尝试将分区更改为它似乎已经处于的状态的任何想法?我想我可以看到如何将其视为失败,因为什么都不会改变,但总体而言似乎是荒谬的。

maz*_*cha 2

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

有效的状态转换是:

。。。

在线分区、离线分区 -> 在线分区

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

    ...

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

    ...

  2. 向每个接收副本发送 LeaderAndIsr 请求,并向每个实时代理发送 UpdateMetadata 请求


编辑

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