4

我注意到我的一些 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

我特别关心分区:1,它显示领导者'-1'。

我还注意到,由于“超时”,该主题产生的大约 1/3 的消息都失败了。我认为这是一个分区没有领导者的结果。

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

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

4

2 回答 2

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]

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

于 2018-08-20T12:38:04.080 回答
1

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

于 2018-08-20T12:16:54.617 回答