首页 > 解决方案 > Kafka 2.2.0 中现有 ISR 的领导人选举失败

问题描述

我有一个具有以下配置/部署详细信息的 3 节点 kafka-cluster(代理版本 2.2.0):

我正在测试单节点中断行为并关闭broker-id 0(以及相应的托管 ZK 实例)

我观察到的是:在降低之前broker-id 0,以下是通过describe-topic CLIfor topic:检索到的分布__consumer_offsets。我们的应用程序主题的行为也是相同的

在此处输入图像描述

关闭后broker-id 0,相同分区的相同输出如下所示:

*在此处输入图片描述*

现在,主要关心的是Leader: -1"。当某些分区(例如上面的分区)的领导有效ISR broker-id 2且何时是活动的时,为什么分区 -不选择这些分区的领导者?broker-id 22, 5, 8broker-id 20, 3, 6, 9broker-id 2

我试图找出是否存在双重故障 - 即。不止一个经纪人同时倒闭。broker-id 1但是,在和的日志中找不到任何相同的证据2

如上所述,我希望分区 -0, 3, 6, 9在出现故障broker-id 2时作为领导者broker-id 0

请澄清

标签: apache-kafka

解决方案


我怀疑问题是不干净的领导选举(缺乏)和一个小的 ISR(同步副本)集:

代理 0 崩溃后,分区 0 是无领导的。它还将 0 显示为 ISR 集的单个(!)成员 - 这意味着 kafka 元数据状态代理 0 具有唯一的用户数据(已确认给原始生产者),这是在其他任何地方都找不到的。允许除 0 之外的任何代理成为此分区的领导者将导致数据丢失 - 如果/当 0 重新加入时,它将截断其“头部”数据以匹配新领导者所拥有的 - 从而丢弃此唯一数据。您需要启用不干净的领导者选举的设置才能发生这种情况。

例如,分区 1 从代理 0 过渡到代理 1,这意味着在代理 0 关闭后,成功为您的集群选择了一个新的 kafka 控制器。

您可以探索以防止这种情况发生的其他选项是增加代理端的 min isr(以及您的整体复制因子,否则任何代理的丢失都会使分区变为只读)和/或增加生产者端的 acks 设置

有关这些设置的更多详细信息,请参阅https://www.cloudera.com/documentation/kafka/latest/topics/kafka_ha.html


推荐阅读