Kafka节点与Zookeeper如何相互通信?

时间:2019-01-02 21:12:23

标签: apache-kafka apache-zookeeper

我找不到有关Nodes和Zookeeper之间的通信的任何详细信息。假设 Kafka节点中发生了更多垃圾回收,这将是什么结果?

  1. Zookeeper是否会断开与相应节点的通信?
  2. 如果Zookeeper将断开各个节点的连接,将导致什么结果?

1 个答案:

答案 0 :(得分:8)

Apache Kafka使用Zookeeper选择一个控制器,以维护集群成员资格并存储配置,包括集群中主题的列表。

为了保留在Kafka集群中,每个代理必须定期向Zookeeper发送保持活动消息。这是每个Zookeeper客户端默认执行的操作。如果代理没有每zookeeper.session.timeout.ms毫秒(默认为6000)对Zookeeper进行心跳检测,则Zookeeper将假定代理已死。这将导致该代理上具有领导者的所有分区的领导者选举。如果该代理恰好是控制者,则您还将看到一个新的控制者当选。

因此,如果垃圾收集暂停时间超过6000毫秒,您将看到代理与Zookeeper断开连接,从而导致一堆领导人选举。由于垃圾收集压力很少会导致短暂的停顿,您可能会遇到我们所说的“拍击”-经纪人将不断与Zookeeper断开连接并重新连接,许多领导者选举和许多ISR收缩/扩展事件。

反之亦然:如果您看到很多代理“扑朔迷离”,则GC日志是开始查找的好地方。