首页 > 解决方案 > 卡夫卡经纪人倒闭

问题描述

我们有 5 个节点 kafka-cluster,使用 OpenJDK11 运行 2.3.0 Kafka 版本 [ kafka_2.12-2.3.0 ]。

从上周开始,我们突然发现集群中的一个代理出现故障。

我们注意到此节点的 controller.log 中存在以下错误,不完全确定这指向什么,请有人对此有所了解,在此先感谢

2021-01-27 11:26:59,471 INFO kafka.controller.ZkPartitionStateMachine: [PartitionStateMachine controllerId=5] Stopped partition state machine
2021-01-27 11:26:59,472 INFO kafka.controller.ZkReplicaStateMachine: [ReplicaStateMachine controllerId=5] Stopped replica state machine
2021-01-27 11:26:59,472 INFO kafka.controller.KafkaController: [Controller id=5] Resigned
2021-01-27 11:27:55,955 ERROR kafka.controller.KafkaController: [Controller id=5] Error processing event RegisterBrokerAndReelect
org.apache.zookeeper.KeeperException$SessionExpiredException: KeeperErrorCode = Session expired
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:130)
    at kafka.zk.KafkaZkClient$CheckedEphemeral.create(KafkaZkClient.scala:1725)
    at kafka.zk.KafkaZkClient.checkedEphemeralCreate(KafkaZkClient.scala:1689)
    at kafka.zk.KafkaZkClient.registerBroker(KafkaZkClient.scala:97)
    at kafka.controller.KafkaController.processRegisterBrokerAndReelect(KafkaController.scala:1547)
    at kafka.controller.KafkaController.process(KafkaController.scala:1586)
    at kafka.controller.QueuedEvent.process(ControllerEventManager.scala:53)
    at kafka.controller.ControllerEventManager$ControllerEventThread.$anonfun$doWork$1(ControllerEventManager.scala:137)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:31)
    at kafka.controller.ControllerEventManager$ControllerEventThread.doWork(ControllerEventManager.scala:137)
    at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:89)
2021-01-27 11:27:55,977 INFO kafka.controller.ZkPartitionStateMachine: [PartitionStateMachine controllerId=5] Stopped partition state machine
2021-01-27 11:27:55,977 INFO kafka.controller.ZkReplicaStateMachine: [ReplicaStateMachine controllerId=5] Stopped replica state machine
2021-01-27 11:27:55,977 INFO kafka.controller.KafkaController: [Controller id=5] Resigned

标签: apache-kafka

解决方案


从您共享的错误看来,控制器/代理与 Zookeeper 节点的连接达到了会话超时。

通常当代理无法在配置的超时时间内到达 Zookeeper 节点时会发生超时。

另请注意,在新版本中超时 (zookeeper.session.timeout.ms) 设置为 18 秒,但在旧版本中设置为仅 6 秒,在某些情况下可能太低,我们建议增加至 18 秒。也就是说,如果连接当时仍在工作,代理应该尝试在超时错误后自动重新建立连接我怀疑可能发生的情况是另一个代理被重新选为新的控制器。

并且您的代理/旧控制器尝试将 zookeeper 作为控制器连接以避免脑裂问题不接受旧控制器请求

为避免这种情况,请检查您的网络并调整 zookeeper.session.timeout.ms 设置


推荐阅读