在 Kubernetes 中部署 Kafka 高可用集群
一、引言
Apache Kafka 是一个开源的分布式流处理平台,由 LinkedIn 开发并于 2011 年开源。它的设计初衷是为了处理实时数据流,具备高吞吐量、低延迟、高容错性和可扩展性的特点。
Kafka 的核心概念
- Producer(生产者): 向 Kafka 主题发送消息的应用程序。
- Consumer(消费者): 从 Kafka 主题读取消息的应用程序,支持消费者组并行读取。
- Topic(主题): 逻辑分类,用于将消息分组,可细分为多个分区。
- Partition(分区): 主题的子单元,消息有序存储,支持水平扩展。
- Broker(代理): 集群中的服务器节点,负责接收、存储和发送消息。
- Zookeeper: 用于分布式协调和管理集群状态,维护配置、Leader 选举及 Offset 管理。
为什么在 Kubernetes 中部署 Kafka
- 弹性和可伸缩性: K8s 的自动伸缩功能可根据负载调整节点数量。
- 易于管理: 统一的管理接口简化了部署、扩展和监控。
- 高可用性: 自动故障检测和恢复机制确保数据持久性。
- 资源隔离: 命名空间和资源限制避免与其他应用竞争资源。
二、Kubernetes 基础
Kubernetes (K8s) 是开源的容器编排平台,旨在简化容器化应用的部署和管理。
- Pods(容器组): 最小的可部署单元,包含紧密相关的容器。
- Services(服务): 定义一组 Pod 的逻辑集合,提供负载均衡和服务发现。
- Deployments(部署): 管理 Pod 副本数量和版本更新的对象。
三、Kafka 集群架构
1. 工作原理
Kafka 基于发布/订阅模式。生产者将消息发布到主题,消费者订阅并拉取消息。
- 消息存储: 消息按顺序存储在分区中,通过偏移量标识。
- 消息复制: 每个分区有主副本(Leader)和多个从副本(Follower),实现高可用。
- 消息传输: 生产者发送到 Leader,消费者从 Leader 拉取。
- 保留策略: 支持基于时间或大小的过期删除策略。
2. 高可用性设计
- 多副本复制: 数据冗余确保单点故障不影响服务。
- 自动故障检测与恢复: 内置机制触发重新选举和数据恢复。
- 副本分布: 分布在不同的 Broker 上,提高容错能力。
- 水平扩展: 动态增加 Broker 提升吞吐量和容量。
四、准备部署环境
1. 准备 K8s 集群
建议使用 K8s 1.23 及以上版本。如果尚未搭建,请参考相关文档。
2. 准备 StorageClass
为了持久化 Kafka 数据,避免 Pod 漂移导致数据丢失,需要创建存储类。
3. 准备镜像
在 K8s Node 节点上执行以下命令拉取所需镜像:


