Debian Kafka集群搭建步骤
小樊
41
2025-12-31 20:07:53
在 Debian 上搭建高可用 Kafka 集群
一 环境准备与规划
- 节点与网络:至少准备3 台服务器(建议同内网),规划好主机名/IP与防火墙放行端口。Kafka 客户端端口为9092;如使用 KRaft 模式,还需开放9093(控制器通信)。
- Java:安装 OpenJDK 8/11(Kafka 3.x 推荐 11)。
- 存储:为日志目录(如 /var/lib/kafka/logs 或 /data/kafka/logs)挂载高性能磁盘。
- 版本建议:选择稳定版 Kafka(如 3.5.x/3.6.x),下载地址可用官方或镜像源。
- 高可用:Topic 的 replication.factor ≥ 3,分区数与业务并发匹配。
二 安装与初始化
- 安装 Java
- 更新索引并安装:sudo apt update && sudo apt install -y openjdk-11-jdk
- 验证:java -version
- 下载并解压 Kafka(示例为 3.5.2)
- wget https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz
- tar -xzf kafka_2.12-3.5.2.tgz && sudo mv kafka_2.12-3.5.2 /opt/kafka
- 可选:配置环境变量(/etc/profile 或 ~/.bashrc)
- export KAFKA_HOME=/opt/kafka
- export PATH=$PATH:$KAFKA_HOME/bin
- 创建数据与日志目录
- sudo mkdir -p /var/lib/kafka/logs
- sudo chown -R $USER:$USER /var/lib/kafka
- 主机名与解析
- 在 /etc/hosts 写入各节点主机名与 IP,确保相互解析。
三 部署方案选择
- 方案 A:Zookeeper 模式(传统,兼容性好)
- 部署 Zookeeper 集群(至少 3 节点),配置 server.X=host:2888:3888,clientPort=2181
- 每台 Kafka Broker 配置 server.properties:
- broker.id=唯一ID(每台不同)
- listeners=PLAINTEXT://:9092
- advertised.listeners=PLAINTEXT://本机IP:9092
- zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
- 启动:bin/kafka-server-start.sh config/server.properties
- 方案 B:KRaft 模式(去 Zookeeper,Kafka 3.0+)
- 每台 Broker 配置 server.properties:
- process.roles=broker,controller
- listeners=PLAINTEXT://:9092,CONTROLLER://:9093
- inter.broker.listener.name=PLAINTEXT
- controller.listener.names=CONTROLLER
- controller.quorum.voters=1@10.0.0.1:9093,2@10.0.0.2:9093,3@10.0.0.3:9093
- node.id=唯一节点ID(每台不同)
- log.dirs=/var/lib/kafka/logs
- 首次初始化(仅一次):
- bin/kafka-storage.sh format -t $(bin/kafka-storage.sh random-uuid) -c config/server.properties
- 启动:bin/kafka-server-start.sh -daemon config/server.properties
- 说明:Zookeeper 模式使用 zookeeper.connect;KRaft 模式使用 controller.quorum.voters 与 node.id。
四 关键配置与建议
- 通用建议
- 唯一性:broker.id/node.id 每台唯一;listeners 与 advertised.listeners 正确暴露本机 IP。
- 副本与分区:生产环境建议 replication.factor=3,num.partitions 结合并发与吞吐规划。
- 默认策略:auto.create.topics.enable=true 时,配合合理的 num.partitions 与 default.replication.factor。
- 生产者性能要点
- acks=all 提升可靠性;batch.size 与 linger.ms 提升吞吐;compression.type=snappy/gzip。
- Broker 性能要点
- num.network.threads / num.io.threads 匹配 CPU;合理设置 log.flush 策略;min.insync.replicas 与 replica.lag.time.max.ms 平衡一致性与可用性。
- 监控与诊断
- 使用 kafka-topics.sh、kafka-consumer-groups.sh 巡检;结合 Prometheus + Grafana 做可视化监控。
五 启动与验证
- 启动顺序
- Zookeeper 模式:先启动 Zookeeper 集群,再逐台启动 Kafka Broker。
- KRaft 模式:完成 format 后,逐台启动 Kafka Broker。
- 基础验证
- 查看进程:jps -l | grep Kafka(或 ps -ef | grep kafka)
- 创建 Topic:
- Zookeeper 模式:bin/kafka-topics.sh --zookeeper zk1:2181 --create --topic test --partitions 3 --replication-factor 3
- KRaft 模式:bin/kafka-topics.sh --bootstrap-server 10.0.0.1:9092,10.0.0.2:9092,10.0.0.3:9092 --create --topic test --partitions 3 --replication-factor 3
- 生产/消费测试:
- 生产:bin/kafka-console-producer.sh --bootstrap-server 10.0.0.1:9092 --topic test
- 消费:bin/kafka-console-consumer.sh --bootstrap-server 10.0.0.1:9092 --topic test --from-beginning
- 查看详情:bin/kafka-topics.sh --bootstrap-server 10.0.0.1:9092 --describe --topic test
- 常见问题
- 无法连接:检查 防火墙/安全组 是否放行 9092/9093 与 2181(Zookeeper)。
- 主机名解析:确保 /etc/hosts 或 DNS 正确。
- 副本不足:创建 Topic 时 replication.factor 不得超过 可用 Broker 数。