我们有 3 个节点的 Kafka 生产集群,当复制因子设置为 3
我们注意到以下问题(PIC 1)当其中一个 Kafka 代理服务关闭时
假设 Kafka broker02 宕机了,所有其他代理服务都启动了
我们还验证了相关分区上的 broker leader,我们批准所有 broker leader 都成功分配给所有主题分区,这意味着 down 的 broker 没有分配,但所有其他人都分配给 5 个分区
有趣的是,我们从 Kafka 消费者端得到以下异常
图一
LEADER_NOT_AVAILABLE
ERROR [driver][][] [org.apache.spark.sql.execution.streaming.MicroBatchExecution] Query APP_SOD [id = ba85bb112-8656de-4857c-b7ea-2856bac0dd3e56, runId = 19c908b0-1149-40d3-8e5b-a4918271a65d] terminated with errororg.apache.kafka.common.errors.TimeoutException: Timeout of 60000ms expired before the position for partition battery-topic-for-cars-3 could be determined
我们有主题 - 分区
battery-topic-for-cars
,这个主题有 5 个分区
但是我上面解释的例外情况来自消费者,当其中一位经纪人倒闭时,
众所周知,当我们有 3 个 Kafka broker 时,那么它的正常行为是一个 broker 可以停机,例如进行维护建议
那么我们需要改进什么来避免这种异常?
terminated with errororg.apache.kafka.common.errors.TimeoutException: Timeout of 60000ms expired before the position for partition battery-topic-for-cars-3 could be determined
这里是来自 Kafka 主题的示例,描述了当一个经纪人(在本例中是经纪人 01)宕机时
Topic: battery-topic-for-cars PartitionCount: 5 ReplicationFactor: 3 Configs: segment.bytes=1073741824,retention.ms=1917196682
Topic: battery-topic-for-cars Partition: 0 Leader: 1002 Replicas: 1001,1002,1003 Isr: 1002,1003
Topic: battery-topic-for-cars Partition: 1 Leader: 1002 Replicas: 1002,1003,1001 Isr: 1002,1003
Topic: battery-topic-for-cars Partition: 2 Leader: 1003 Replicas: 1003,1001,1002 Isr: 1003,1002
Topic: battery-topic-for-cars Partition: 3 Leader: 1003 Replicas: 1001,1003,1002 Isr: 1002,1003
Topic: battery-topic-for-cars Partition: 4 Leader: 1002 Replicas: 1002,1001,1003 Isr: 1002,1003
Topic: battery-topic-for-cars Partition: 5 Leader: 1003 Replicas: 1003,1002,1001 Isr: 1003,1002