Kafka与Zookeeper

36 阅读2分钟

zookeeper 作用

Apache Kafka的一个关键依赖是Apach Zookeeper,它是一个分布式配置和同步服务。Zookeeper 是 Kafka 代理和消费者之间的协调接口。Kafka 服务器通过 Zookeeper 集群共享信息。Kafka 在 Zookeeper 中存储基本元数据,例如关于主题,代理,消费者偏移(队列读取器)等的信息。

由于所有关键信息存储在 Zookeeper 中,并且它通常在其整体上复制此数据,因此Kafka代理/ Zookeeper 的故障不会影响 Kafka 集群的状态。Kafka 将恢复状态,一旦 Zookeeper 重新启动。 这为Kafka带来了零停机时间。Kafka 代理之间的领导者选举也通过使用 Zookeeper 在领导者失败的情况下完成。

image.png

kafka扮演三个角色

Kafka使用Zookeeper来管理和协调Kafka集群中的各个节点,包括Broker、Controller等。Zookeeper作为一个分布式协调服务框架,提供了统一的节点注册与发现、故障检测与恢复、配置管理等功能,可以帮助Kafka实现高可用性、数据的一致性和可靠性。

  1. 统一管理Kafka集群中的各个Broker节点信息:Zookeeper会维护一个动态节点列表,其中记录了Kafka集群中所有的Broker节点信息。当Broker启动或停止时,它们会在这个节点列表中进行注册和注销,从而让集群其他节点都能够感知到它们的状态变化。
  2. 管理Kafka的Topic和Partition信息:Kafka采用了多副本机制来保证数据可靠性和高可用性,因此需要对Topic和Partition进行多次复制和同步。Zookeeper会负责记录每个Topic和Partition的详细信息,包括它们的名称、分区数量、备份策略等,并将这些信息通知给集群中的所有Broker节点。
  3. 选举Controller:Kafka集群中只有一个节点作为Controller,负责协调处理各种集群级别的事件,例如新的Topic创建请求、Broker宕机等。Zookeeper会监控Controller节点的状态,并在当前Controller节点挂掉时,自动选举出一个新的Controller节点来接管工作。

在搭建Kafka集群时,需要先启动Zookeeper集群,并确保Zookeeper集群的每个节点都能够相互通信和协作。然后,才能启动Kafka broker节点,将它们加入到Zookeeper集群中,并实现消息传递和存储任务的分布式协作。

因此,Zookeeper和Kafka密切相关,它们的协同工作为Kafka集群提供了高可用性和稳定性。