4.2 安装与配置


文档摘要

Apache Kafka 安装与配置指南:从单机部署到高可用集群 本指南提供完整、可落地的 Apache Kafka 安装与配置实践方案,涵盖 Java 环境准备、ZooKeeper 依赖配置、Kafka 单节点部署、多节点集群搭建、核心参数详解及高可用保障策略,适用于生产环境部署与开发测试场景。 环境准备 Apache Kafka 基于 JVM 运行,依赖 ZooKeeper(Kafka 3.3.0 及之前版本)进行元数据协调与集群管理。部署前需确保基础运行环境就绪。 1.1 安装 Java 运行环境 Kafka 要求 Java 8 或更高版本(推荐 OpenJDK 11/17,兼容性更优)。

Apache Kafka 安装与配置指南:从单机部署到高可用集群

本指南提供完整、可落地的 Apache Kafka 安装与配置实践方案,涵盖 Java 环境准备、ZooKeeper 依赖配置、Kafka 单节点部署、多节点集群搭建、核心参数详解及高可用保障策略,适用于生产环境部署与开发测试场景。

1. 环境准备

Apache Kafka 基于 JVM 运行,依赖 ZooKeeper(Kafka 3.3.0 及之前版本)进行元数据协调与集群管理。部署前需确保基础运行环境就绪。

1.1 安装 Java 运行环境

Kafka 要求 Java 8 或更高版本(推荐 OpenJDK 11/17,兼容性更优)。执行以下命令验证当前 Java 环境:

java -version

若未安装,按系统类型执行对应安装命令:

Ubuntu/Debian 系统:

sudo apt update sudo apt install openjdk-11-jdk -y

CentOS/RHEL 8+ 系统:

sudo dnf install java-11-openjdk-devel -y

CentOS/RHEL 7 系统:

sudo yum install java-11-openjdk-devel -y

设置 JAVA_HOME 环境变量(以 OpenJDK 11 为例):

echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> ~/.bashrc echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> ~/.bashrc source ~/.bashrc

验证配置:

echo $JAVA_HOME java -version

1.2 部署 ZooKeeper(Kafka 3.3.0 及以下版本必需)

⚠️ 注意:自 Kafka 3.3.0 起,Kafka 已支持 KRaft 模式(Kafka Raft Metadata mode),可完全替代 ZooKeeper。本节面向仍使用 ZooKeeper 模式的主流生产环境(如 Kafka 2.8.x–3.2.x)。如需 KRaft 配置,请参阅官方 KRaft 迁移指南。

1.2.1 下载与解压

Apache ZooKeeper 官网 获取稳定版本(推荐 3.7.1 或 3.8.3),或使用命令行下载:

wget https://downloads.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz tar -xzf apache-zookeeper-3.7.1-bin.tar.gz mv apache-zookeeper-3.7.1-bin /opt/zookeeper

1.2.2 配置 ZooKeeper 单节点

创建数据目录并授权:

sudo mkdir -p /var/lib/zookeeper sudo chown -R $USER:$USER /var/lib/zookeeper

复制并编辑配置文件:

cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg vi /opt/zookeeper/conf/zoo.cfg

关键配置项(保持默认值或按需调整):

tickTime=2000 initLimit=10 syncLimit=5 dataDir=/var/lib/zookeeper clientPort=2181 admin.enableServer=true

1.2.3 启动与验证

/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/bin/zkServer.sh status

预期输出包含 Mode: standalone,表示单节点模式运行正常。

2. 安装与配置 Apache Kafka

2.1 下载与解压

访问 Apache Kafka 官网下载页,选择与 ZooKeeper 兼容的稳定版本(如 kafka_2.13-3.2.3.tgz),或执行:

wget https://downloads.apache.org/kafka/3.2.3/kafka_2.13-3.2.3.tgz tar -xzf kafka_2.13-3.2.3.tgz mv kafka_2.13-3.2.3 /opt/kafka

2.2 核心配置:server.properties

编辑主配置文件:

vi /opt/kafka/config/server.properties

按生产环境要求修改以下关键参数:

配置项 推荐值 说明
broker.id 0(单节点)或唯一整数(集群) Kafka 节点唯一标识,集群中不可重复
listeners PLAINTEXT://localhost:9092 外部客户端连接地址,生产环境需替换为服务器真实 IP
advertised.listeners PLAINTEXT://localhost:9092 向客户端广播的访问地址,必须可被生产者/消费者解析
log.dirs /var/lib/kafka-logs 日志存储路径,建议使用独立磁盘分区
zookeeper.connect localhost:2181 ZooKeeper 连接字符串,多节点格式:zk1:2181,zk2:2181,zk3:2181
num.partitions 12 新建主题默认分区数,建议 ≥ broker 数 × 2
default.replication.factor 3 新建主题默认副本数(生产环境最低要求)
min.insync.replicas 2 ISR(In-Sync Replicas)最小数量,保障写入一致性
auto.create.topics.enable false 生产环境强烈建议禁用,主题需显式创建

创建日志目录并授权:

sudo mkdir -p /var/lib/kafka-logs sudo chown -R $USER:$USER /var/lib/kafka-logs

2.3 启动 Kafka 服务

/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties

验证进程:

jps -l | grep kafka # 应输出类似:/opt/kafka/bin/../libs/kafka_2.13-3.2.3.jar

✅ 提示:使用 -daemon 参数后台启动;如需前台调试,移除此参数。

3. Kafka 集群部署

3.1 多 Broker 配置要点

在每台 Kafka 服务器上执行以下操作:

  1. 分配唯一 broker.id(如 0, 1, 2
  2. 设置独立 log.dirs(避免磁盘争用)
  3. 配置 listenersadvertised.listeners 为本机 IP
    listeners=PLAINTEXT://192.168.1.10:9092 advertised.listeners=PLAINTEXT://192.168.1.10:9092
  4. 统一 zookeeper.connect 指向 ZooKeeper 集群地址

3.2 ZooKeeper 集群配置(三节点示例)

在每台 ZooKeeper 服务器的 /opt/zookeeper/conf/zoo.cfg 中添加:

server.1=192.168.1.10:2888:3888 server.2=192.168.1.11:2888:3888 server.3=192.168.1.12:2888:3888

并在每台服务器的 $ZOOKEEPER_HOME/data/myid 文件中写入对应 ID(1 / 2 / 3)。

启动全部 ZooKeeper 实例后,执行:

/opt/zookeeper/bin/zkServer.sh status # 每台应返回 Mode: follower 或 Mode: leader

4. 功能验证与基础操作

4.1 创建主题

/opt/kafka/bin/kafka-topics.sh \ --create \ --topic quickstart-topic \ --bootstrap-server localhost:9092 \ --partitions 3 \ --replication-factor 3

🔍 验证主题:/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092

4.2 生产与消费消息

启动控制台生产者:

/opt/kafka/bin/kafka-console-producer.sh \ --topic quickstart-topic \ --bootstrap-server localhost:9092

输入任意文本(如 Hello Kafka!),按 Ctrl+D 结束。

启动控制台消费者(从头读取):

/opt/kafka/bin/kafka-console-consumer.sh \ --topic quickstart-topic \ --bootstrap-server localhost:9092 \ --from-beginning

应立即看到已发送的消息。

5. 关键配置项深度解析

5.1 server.properties 核心参数

参数 生产环境建议值 作用说明
unclean.leader.election.enable false 禁用非 ISR 副本选举为 Leader,防止数据丢失
delete.topic.enable true 允许通过 API 删除主题(需配合权限控制)
log.retention.hours 168(7天) 日志保留时长,按业务合规性调整
log.segment.bytes 1073741824(1GB) 单个日志段大小,影响刷盘频率与恢复速度
message.max.bytes 1048588(1MB) 单条消息最大字节数,需与客户端 max.request.size 一致

5.2 JVM 与系统级调优(kafka-server-start.sh

/opt/kafka/bin/kafka-server-start.sh 开头添加:

export KAFKA_HEAP_OPTS="-Xms4g -Xmx4g -XX:MetaspaceSize=96m -XX:+UseG1GC" export KAFKA_JVM_PERFORMANCE_OPTS="-XX:MaxGCPauseMillis=20 -XX:InitiatingOccupancyFraction=35"

💡 建议:Kafka 堆内存不超过 6GB,避免 GC 停顿过长;优先使用 G1 垃圾收集器。

6. 高可用与容灾保障

6.1 多副本机制

  • 所有主题必须设置 replication-factor ≥ 3
  • min.insync.replicas = 2 确保至少 2 个副本同步成功才返回 ACK
  • 结合 acks=all(生产者配置)实现强一致性写入

6.2 故障转移验证

  1. 停止一个 Kafka broker 进程
  2. 检查主题 Leader 是否自动迁移:
    /opt/kafka/bin/kafka-topics.sh --describe --topic quickstart-topic --bootstrap-server localhost:9092
  3. 消费者与生产者应持续工作,无中断

6.3 监控基础指标(通过 JMX)

关键 MBean 路径:

  • kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec
  • kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions(值 > 0 需告警)
  • kafka.network:type=RequestMetrics,name=RequestsPerSec,request=Produce

建议集成 Prometheus + JMX Exporter 实现可视化监控。

7. 常见问题排查

现象 可能原因 解决方案
Connection refused(连接 ZooKeeper 失败) ZooKeeper 未启动 / 防火墙拦截 检查 zkServer.sh status;开放 2181 端口
LEADER_NOT_AVAILABLE 主题未创建 / Leader 选举未完成 运行 kafka-topics.sh --describe 查看状态
消费者无法拉取消息 auto.offset.reset=latest 且无新消息 改为 earliest 或确认生产者已发送
NotLeaderOrFollower 错误 客户端 bootstrap.servers 指向非 Leader 节点 使用 --bootstrap-server(自动发现)而非直连 Leader

总结

Apache Kafka 的稳定运行依赖于严谨的环境准备、精准的参数配置与科学的集群规划。本文系统覆盖了从单机快速启动到生产级高可用集群的完整路径,强调以下核心实践原则:

  • 环境先行:Java 版本与 ZooKeeper 版本需严格匹配 Kafka 官方兼容矩阵;
  • 配置驱动broker.idadvertised.listenersmin.insync.replicas 等参数必须按拓扑精确设定;
  • 安全基线:禁用 auto.create.topics.enable,启用 unclean.leader.election.enable=false
  • 可观测性:通过 JMX 指标建立监控体系,将 UnderReplicatedPartitions 纳入核心告警;
  • 演进前瞻:规划向 Kafka KRaft 模式迁移,逐步摆脱 ZooKeeper 依赖,提升架构简洁性与运维效率。

遵循本指南配置的 Kafka 集群,可支撑每秒百万级消息吞吐,满足金融、电商、IoT 等高要求业务场景的实时数据管道需求。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U