3. Kafka 安装与部署:单机部署、集群部署、常用配置项、启动与验证
Kafka 的部署方式直接影响消息系统的吞吐量、可用性与运维成本。本章从单机快速验证到多节点集群搭建,覆盖核心配置项与启动验证步骤,为后续 Go 项目压测提供稳定的基础设施。
3.1 环境准备与版本选择
Kafka 依赖 Java 运行环境,推荐使用 JDK 11+(长期支持版本)。Kafka 3.x 系列已内置 ZooKeeper 模式与 KRaft(去 ZooKeeper)模式,本章以 Kafka 3.5.0 为例,采用 ZooKeeper 模式讲解,兼容性更广。
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| JDK | 11 / 17 | Kafka 3.x 最低要求 JDK 11 |
| ZooKeeper | 3.8.x | 用于集群元数据管理与 Leader 选举 |
| Kafka | 3.5.0 | 稳定版,支持生产级特性 |
| 操作系统 | CentOS 7+ / Ubuntu 20.04+ | Linux 环境性能最佳 |
提示:生产环境建议使用 KRaft 模式(Kafka 3.2+),减少 ZooKeeper 运维复杂度。本章为兼容传统架构,仍以 ZooKeeper 模式演示。
3.2 单机部署(快速验证)
单机部署适用于开发测试与功能验证,所有组件运行在同一节点。
3.2.1 下载与解压
# 下载 Kafka 二进制包
wget https://downloads.apache.org/kafka/3.5.0/kafka_2.13-3.5.0.tgz
# 解压到指定目录
tar -xzf kafka_2.13-3.5.0.tgz -C /opt/
ln -s /opt/kafka_2.13-3.5.0 /opt/kafka
3.2.2 启动 ZooKeeper
Kafka 依赖 ZooKeeper 管理集群元数据。单机模式下使用内置脚本快速启动:
# 启动 ZooKeeper(默认端口 2181)
/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
# 验证 ZooKeeper 进程
jps | grep QuorumPeerMain
3.2.3 启动 Kafka Broker
修改 config/server.properties 中的核心参数:
# broker.id 单机唯一
broker.id=0
# 监听地址
listeners=PLAINTEXT://0.0.0.0:9092
# 日志存储目录
log.dirs=/data/kafka/logs
# ZooKeeper 连接地址
zookeeper.connect=localhost:2181
# 启动 Kafka Broker
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
# 验证进程
jps | grep Kafka
关键检查点:启动后查看
/data/kafka/logs/server.log,确认无 ERROR 日志,且出现 started (kafka.server.KafkaServer) 字样。
3.3 集群部署(3 节点示例)
集群部署提供高可用与水平扩展能力。以下以 3 台服务器(node1、node2、node3)为例,每台部署一个 Broker。
3.3.1 节点规划
| 节点 | IP 示例 | Broker ID | ZooKeeper 端口 | Kafka 端口 |
|---|---|---|---|---|
| node1 | 192.168.1.101 | 0 | 2181 | 9092 |
| node2 | 192.168.1.102 | 1 | 2181 | 9092 |
| node3 | 192.168.1.103 | 2 | 2181 | 9092 |
3.3.2 集群配置差异项
每台 Broker 的 server.properties 需修改以下参数:
# 每个节点不同
broker.id=0 # node1 为 0,node2 为 1,node3 为 2
# 监听地址改为本机 IP
listeners=PLAINTEXT://192.168.1.101:9092
# 日志目录建议使用独立磁盘
log.dirs=/data/kafka/logs
# ZooKeeper 集群地址(所有节点相同)
zookeeper.connect=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181
3.3.3 启动顺序
- 在所有节点启动 ZooKeeper(或使用独立 ZooKeeper 集群)。
- 依次启动各节点 Kafka Broker。
- 观察集群成员变化。
# 在 node1 执行
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
# 在 node2 执行
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
# 在 node3 执行
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
注意:集群模式下,所有节点的
listeners 必须使用真实 IP 或可解析主机名,不能使用 0.0.0.0,否则跨节点通信会失败。
3.4 常用配置项详解
以下配置项直接影响性能、可靠性与运维管理,需根据业务场景调整。
| 配置项 | 默认值 | 推荐值(压测场景) | 说明 |
|---|---|---|---|
num.partitions |
1 | 3~6 | Topic 默认分区数,影响并行消费能力 |
default.replication.factor |
1 | 2~3 | 副本因子,集群至少 2 保证高可用 |
log.retention.hours |
168 | 24~72 | 日志保留时间(小时),压测可缩短 |
log.segment.bytes |
1073741824 | 536870912 | 单个日志段大小(字节),512MB 减少文件数 |
socket.send.buffer.bytes |
102400 | 131072 | Socket 发送缓冲区,高吞吐场景适当增大 |
socket.receive.buffer.bytes |
102400 | 131072 | Socket 接收缓冲区 |
num.network.threads |
3 | 4~8 | 网络线程数,处理客户端请求 |
num.io.threads |
8 | 8~16 | I/O 线程数,处理磁盘读写 |
3.5 启动与验证
部署完成后,通过以下步骤验证集群是否正常工作。
3.5.1 创建测试 Topic
# 创建名为 test-topic 的 Topic,3 分区,2 副本
/opt/kafka/bin/kafka-topics.sh --create \
--bootstrap-server 192.168.1.101:9092 \
--replication-factor 2 \
--partitions 3 \
--topic test-topic
3.5.2 查看 Topic 详情
# 查看 Topic 列表
/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server 192.168.1.101:9092
# 查看 Topic 详细信息(分区与副本分布)
/opt/kafka/bin/kafka-topics.sh --describe \
--bootstrap-server 192.168.1.101:9092 \
--topic test-topic
3.5.3 生产与消费验证
# 启动生产者,输入消息
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server 192.168.1.101:9092 \
--topic test-topic
> hello kafka
> cluster test
# 启动消费者,查看消息
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server 192.168.1.101:9092 \
--topic test-topic \
--from-beginning
hello kafka
cluster test
3.5.4 集群健康检查
- 查看 Broker 列表:通过 ZooKeeper 查看
/brokers/ids节点,确认所有 Broker 已注册。 - 模拟故障:停止一个 Broker,观察 Leader 重新选举与 ISR 变化。
- 监控指标:使用
kafka-run-class.sh kafka.tools.JmxTool或集成 Prometheus + JMX Exporter。
# 通过 ZooKeeper 查看 Broker 列表
/opt/kafka/bin/zookeeper-shell.sh localhost:2181 ls /brokers/ids
[0, 1, 2] # 表示 3 个 Broker 均在线
验证要点:集群部署后,务必测试 Broker 宕机恢复 与 数据一致性,确保生产环境可用。
3.6 部署架构图
下图展示 3 节点 Kafka 集群与 ZooKeeper 集群的部署关系,以及客户端(Go 应用)的连接方式。
3.7 常见问题与避坑
- 端口冲突:ZooKeeper 默认 2181,Kafka 默认 9092,确保未被占用。
- 磁盘空间:Kafka 日志默认不自动删除,压测时需设置
log.retention.bytes或定时清理。 - 网络防火墙:集群节点间需开放 9092(Kafka)与 2181(ZooKeeper)端口。
- JVM 堆内存:修改
KAFKA_HEAP_OPTS环境变量,生产环境建议 4G~8G。
# 设置 JVM 堆内存示例
export KAFKA_HEAP_OPTS="-Xms4g -Xmx4g"
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
压测前置检查清单:
- 所有 Broker 已注册到 ZooKeeper(
/brokers/ids包含全部 ID)。 - Topic 分区与副本分布均匀(
kafka-topics --describe检查)。 - 生产者/消费者端网络连通性测试通过。
- 磁盘 I/O 性能满足预期(使用
fio或dd测试)。