是的,Zookeeper 和 Kafka 经常一起使用,Zookeeper 在 Kafka 中扮演了关键角色。以下是 Zookeeper 和 Kafka 在实际项目中的结合使用及其作用的详细说明。
项目背景
假设我们有一个分布式数据处理系统,该系统需要高吞吐量的实时消息处理能力。Kafka 被选作消息队列系统,用于接收、存储和传输大量实时数据。Zookeeper 被用作集群管理工具,以确保 Kafka 集群的高可用性和一致性。
Kafka 与 Zookeeper 的结合
1. Kafka Broker 管理
Kafka 使用 Zookeeper 来管理 Kafka brokers(代理)。Zookeeper 维护了所有 broker 的元数据和状态信息,确保每个 broker 都可以发现和通信其他 brokers。
- Broker 注册:当一个 Kafka broker 启动时,它会向 Zookeeper 注册自己,这样其他 brokers 可以知道集群中的所有成员。
- Leader 选举:Kafka 分区的 leader 选举是通过 Zookeeper 来完成的。每个分区有一个 leader 和多个 follower,leader 负责所有读写操作,而 followers 复制 leader 的数据。
2. Topic 和 Partition 管理
Zookeeper 维护 Kafka 集群中所有 topic 和分区的元数据,包括分区的位置、replicas 和 leader 信息。
- Topic 配置:创建一个 topic 时,Kafka 会将其配置信息(如分区数、副本数)存储在 Zookeeper 中。
- 分区信息:每个分区的 leader 和 followers 信息也存储在 Zookeeper 中,确保集群的元数据一致性。
3. 消费者组协调
Zookeeper 协调 Kafka 消费者组,确保每个消费者实例在集群中唯一且不重复地消费消息。
- 消费者注册:消费者启动时会向 Zookeeper 注册自己,并通过 Zookeeper 获取分配给它的分区。
- 分区再均衡:当消费者实例加入或离开时,Zookeeper 负责触发分区再均衡,确保分区分配在消费者组中保持均衡。
实际项目示例
项目描述
假设我们有一个实时日志处理系统,该系统收集来自多个应用程序的日志数据,进行实时处理和分析。
使用 Kafka 和 Zookeeper
-
数据收集和传输:
- 应用程序将日志数据发送到 Kafka topic。每个应用程序对应一个或多个 Kafka topics。
-
消息队列管理:
- Kafka 集群由多个 brokers 组成,Zookeeper 管理这些 brokers 的元数据和状态,确保集群的高可用性。
- Zookeeper 协助 Kafka 进行分区 leader 选举,确保每个分区都有一个 leader 负责处理读写请求。
-
实时处理:
- 一个 Kafka 消费者组(如 Spark Streaming、Flink 或自定义的消费者应用)从 Kafka topics 中消费日志数据进行实时处理。
- Zookeeper 协调消费者组中的消费者,确保每个分区的数据都被唯一的消费者处理。
-
故障恢复:
- 如果一个 Kafka broker 崩溃,Zookeeper 协助进行 leader 选举,将分区的 leader 转移到其他可用的 brokers。
- 消费者实例崩溃时,Zookeeper 触发分区再均衡,将分区重新分配给其他消费者实例,确保系统继续稳定运行。
结论
Zookeeper 在 Kafka 集群中起到了关键的协调和管理作用,确保了 Kafka 的高可用性和一致性。在实际项目中,Kafka 和 Zookeeper 的结合使用能够处理大量实时数据,提供可靠的消息传输和处理能力。这种架构在大数据、日志处理、实时分析等领域广泛应用,能够满足高吞吐量和低延迟的需求。
zookeeper headless
在yaml文件中 clusterIP: None 代表它是headless svc
10.96.0.10 是k8s 集群内的 dns 解析
应用验证
可以获得键值说明zookeeper正常,这是在集群内访问
下面是安装客户端,从外面通过port 访问zookeeper
zookeeper的存储可以接nfs