领导者 -1 的 Kafka 主题分区

Kafka topic partitions with leader -1

我注意到我的 kafka 主题很少以我无法解释清楚的方式表现。

例如:

./kafka-topics.sh --describe --zookeeper ${ip}:2181 --topic test

Topic:test  PartitionCount:3    ReplicationFactor:1 Configs:retention.ms=1209600000
    Topic: test Partition: 0    Leader: 1   Replicas: 1 Isr: 1
    Topic: test Partition: 1    Leader: -1  Replicas: 2 Isr: 2
    Topic: test Partition: 2    Leader: 3   Replicas: 3 Isr: 3

我特别担心 Partition: 1 显示 Leader '-1'。

我还注意到,大约 1/3 的针对该主题的消息由于 'Timeout' 而失败。我认为这是一个分区没有领导者的结果。

我想知道是否有人了解为什么会出现此问题以及如何在生产场景中从中恢复而不丢失数据?

编辑: 我正在使用基于 librdkafka 的 python 生产者;我看到的错误消息是 Message failed delivery: KafkaError{code=_MSG_TIMED_OUT,val=-192,str="Local: Message timed out"}

这通常表示引导该分区的代理处于离线状态。我会检查离线分区指标来确认这一点,但也会检查代理 2 当前是否正常工作。

您的第二个 kafka 代理很可能已关闭。 为了检查活跃的 Kafka 经纪人,您需要 运行

./zookeeper-shell.sh localhost:2181 <<< "ls /brokers/ids"

并且输出应该类似于下面的输出:

Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /brokers/ids
[0, 1, 2]
[zk: localhost:2181(CONNECTED) 1]

如果第二个代理未在活动代理中列出,那么您需要找出未启动和 运行ning 的原因(如果出现问题,日志应该会告诉您)。我还建议增加复制因子,因为您有一个多代理配置。