2. Kafka集群搭建

2.1 部署模式概述

Kafka 支持两种部署模式:单机模式用于开发测试,集群模式用于生产环境。两种模式的核心差异在于 Broker 数量、副本机制与 ZooKeeper 配置。

对比维度 单机模式 集群模式
Broker 数量 1 个 ≥ 3 个(推荐奇数)
副本因子 1(无副本) ≥ 2(推荐 3)
高可用 无 支持 Leader 选举与故障转移
ZooKeeper 单节点或内嵌 ZooKeeper 集群(≥ 3 节点)
适用场景 本地开发、功能验证 生产环境、微服务集成

2.2 ZooKeeper 依赖说明

Kafka 从 0.9 版本开始依赖 ZooKeeper 管理集群元数据,包括 Broker 注册、Topic 配置、分区 Leader 选举、消费者组偏移量等。ZooKeeper 是 Kafka 集群的“协调大脑”。

关键依赖关系:
  • 每个 Kafka Broker 启动时向 ZooKeeper 注册临时节点,Broker 宕机后节点自动删除。
  • Controller Broker 由 ZooKeeper 选举产生,负责分区 Leader 的分配与重新平衡。
  • 消费者组协调(Group Coordinator)依赖 ZooKeeper 存储组元数据(新版 Kafka 已逐步迁移至内部 Topic)。
Kafka 集群与 ZooKeeper 依赖关系 ZooKeeper 集群 Leader 选举 / 元数据存储 Kafka Broker 1 注册 / 心跳 / 配置 Kafka Broker 2 注册 / 心跳 / 配置 Kafka Broker 3 注册 / 心跳 / 配置 说明: • ZooKeeper 集群通常部署 3 或 5 节点,保证选举法定人数。 • 每个 Kafka Broker 启动时向 ZooKeeper 注册临时节点,Broker 宕机后 ZooKeeper 自动移除。 • Controller Broker 由 ZooKeeper 选举产生,负责分区 Leader 分配与重新平衡。

2.3 单机模式部署步骤

  1. 下载与解压:从 Apache 官网下载 Kafka 二进制包,解压至目标目录。
  2. 启动 ZooKeeper:Kafka 内置了 ZooKeeper 脚本,可直接启动单节点 ZooKeeper。
  3. 修改配置文件:编辑 config/server.properties,设置 broker.id=0、listeners=PLAINTEXT://localhost:9092、log.dirs=/tmp/kafka-logs。
  4. 启动 Kafka:运行 bin/kafka-server-start.sh config/server.properties。
  5. 验证:创建 Topic、生产消息、消费消息,确认功能正常。
提示:单机模式适合快速验证 API 与配置参数,但无法测试副本机制与故障转移。建议在开发环境至少使用 3 节点集群。

2.4 集群模式部署步骤

集群模式需要准备多台服务器(或同一台机器的多个端口),每台 Broker 拥有独立的 server.properties 配置文件。

2.5 配置文件详解

核心配置文件为 config/server.properties,以下列出集群部署必须关注的关键参数:

参数名 默认值 说明 集群建议
broker.id 0 Broker 唯一标识,集群内不可重复 从 0 开始递增
listeners PLAINTEXT://:9092 Broker 监听地址与端口 使用内网 IP 或主机名
log.dirs /tmp/kafka-logs 消息日志存储目录 使用独立磁盘,避免 /tmp
zookeeper.connect localhost:2181 ZooKeeper 连接地址 host1:2181,host2:2181,host3:2181
num.partitions 1 Topic 默认分区数 根据吞吐量调整,建议 3~6
default.replication.factor 1 Topic 默认副本因子 ≥ 2,推荐 3
offsets.topic.replication.factor 1 消费者偏移量 Topic 副本因子 ≥ 2,推荐 3
log.retention.hours 168 消息保留时间(小时) 根据业务需求调整
注意:broker.id 在集群中必须唯一,否则会导致注册冲突。建议使用脚本自动生成或基于主机名映射。

2.6 集群启动与验证

启动顺序:先启动所有 ZooKeeper 节点,再依次启动每个 Kafka Broker。

2.6.1 启动 ZooKeeper 集群

# 在每台 ZooKeeper 节点上执行
bin/zookeeper-server-start.sh config/zookeeper.properties

2.6.2 启动 Kafka Broker

# 在每台 Broker 节点上执行,使用对应的 server.properties
bin/kafka-server-start.sh config/server.properties

2.6.3 验证集群状态

  1. 查看 Broker 列表:使用 ZooKeeper 客户端检查 /brokers/ids 节点。
  2. 创建 Topic 并指定副本:
bin/kafka-topics.sh --create \
  --bootstrap-server broker1:9092,broker2:9092,broker3:9092 \
  --replication-factor 3 \
  --partitions 3 \
  --topic test-cluster
  1. 查看 Topic 详情:
bin/kafka-topics.sh --describe \
  --bootstrap-server broker1:9092 \
  --topic test-cluster
  1. 生产与消费验证:
# 生产者
bin/kafka-console-producer.sh --broker-list broker1:9092,broker2:9092,broker3:9092 --topic test-cluster

# 消费者
bin/kafka-console-consumer.sh --bootstrap-server broker1:9092,broker2:9092,broker3:9092 --topic test-cluster --from-beginning
Kafka 集群启动与验证流程 启动 ZooKeeper 启动 Kafka Broker 创建 Topic 生产 / 消费验证 验证输出示例: Topic: test-cluster PartitionCount: 3 ReplicationFactor: 3 Configs: Topic: test-cluster Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Topic: test-cluster Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Topic: test-cluster Partition: 2 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2

2.7 常见问题与避坑指南

问题现象 可能原因 解决方案
Broker 启动后立即退出 ZooKeeper 未启动或连接地址错误 检查 zookeeper.connect 配置,确保 ZooKeeper 已启动
Topic 创建失败:REPLICATION_FACTOR 大于 Broker 数量 副本因子超过可用 Broker 数 降低 replication-factor 或增加 Broker 节点
消费者无法消费消息 消费者组偏移量 Topic 副本因子不足 设置 offsets.topic.replication.factor ≥ 2
磁盘空间不足 日志保留时间过长或分区过多 调整 log.retention.hours 或增加磁盘
生产环境最佳实践:
  • ZooKeeper 与 Kafka Broker 部署在不同服务器,避免资源争抢。
  • 使用独立磁盘存储日志文件,避免与系统盘共用。
  • 设置 auto.create.topics.enable=false,防止误创建 Topic。
  • 监控 ZooKeeper 连接数,避免超过默认限制(60 个连接)。