Ubuntu Kafka如何高效部署
小樊
34
2025-12-30 23:42:26
Ubuntu 上高效部署 Kafka 的实操指南
一 环境准备与安装
- 安装 Java 11(推荐):sudo apt update && sudo apt install -y openjdk-11-jdk;验证:java -version。
- 创建专用用户与目录:sudo adduser --system --no-create-home --disabled-password --disabled-login kafka;sudo mkdir -p /data/kafka /data/kafka-logs;sudo chown -R kafka:nogroup /data/kafka*。
- 下载并解压 Kafka(示例为稳定版本):
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz -C /opt/ && sudo mv /opt/kafka_2.13-3.7.0 /opt/kafka
sudo chown -R kafka:nogroup /opt/kafka。
- 开放防火墙端口(Ubuntu):sudo ufw allow 9092/tcp;如启用外部访问,也放行 2181/tcp(Zookeeper)。
二 快速单机部署与验证
- 启动 Zookeeper(前台调试):/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties;后台:/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties。
- 配置 server.properties(单机示例):
broker.id=0
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://localhost:9092(仅本机测试;远程请改为服务器可达 IP)
log.dirs=/data/kafka-logs
zookeeper.connect=localhost:2181
- 启动 Kafka Broker(前台调试):/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties;后台:/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties。
- 基本验证:
创建 Topic:/opt/kafka/bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
生产消息:/opt/kafka/bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092
消费消息:/opt/kafka/bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server localhost:9092
三 集群部署与高可用
- 规划与目录:准备 3 台Ubuntu 主机(示例 IP:192.168.1.11/12/13),每台创建目录 /data/kafka /data/kafka-logs 并赋权给 kafka。
- 配置 server.properties(各节点唯一):
broker.id=0/1/2(每台不同)
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://<本机IP>:9092
log.dirs=/data/kafka-logs
zookeeper.connect=192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181
- 启动顺序:先启动所有 Zookeeper 节点,再在各节点启动 Kafka。
- 验证集群:
创建 Topic(副本因子不超过 Broker 数):/opt/kafka/bin/kafka-topics.sh --create --topic test --bootstrap-server 192.168.1.11:9092 --partitions 3 --replication-factor 3
生产/消费:
/opt/kafka/bin/kafka-console-producer.sh --topic test --bootstrap-server 192.168.1.11:9092,192.168.1.12:9092,192.168.1.13:9092
/opt/kafka/bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server 192.168.1.11:9092,192.168.1.12:9092,192.168.1.13:9092
- 防火墙:各节点放行 9092/tcp(Kafka)与 2181/tcp(Zookeeper)。
四 性能与稳定性优化
- 系统层:优先使用 SSD;为 Kafka 数据盘设置 noop/ deadline I/O 调度;内核参数优化(如 vm.swappiness、文件句柄与网络参数)。
- JVM 与内存:在 kafka-server-start.sh 中设置合适的堆大小,例如:export KAFKA_HEAP_OPTS=“-Xmx4G -Xms4G”(依据内存与负载调整)。
- Broker 关键参数(server.properties):
num.network.threads(网络 I/O 线程)与 num.io.threads(磁盘 I/O 线程)按 CPU 核数合理上调;
log.flush.interval.messages / log.flush.interval.ms(权衡持久化与吞吐);
批处理与拉取:batch.size、buffer.memory、linger.ms、fetch.min.bytes、fetch.max.wait.ms;
日志保留:log.retention.hours / log.retention.bytes、log.segment.bytes;
副本与容错:default.replication.factor、min.insync.replicas(建议 ≥ 2)、unclean.leader.election.enable=false。
- 监控与告警:开启 JMX(如 export JMX_PORT=12345),结合 Prometheus + Grafana 监控吞吐、请求耗时、请求错误率、UnderReplicatedPartitions、Consumer Lag 等核心指标。
五 运维与自动化
- systemd 服务示例(/etc/systemd/system/kafka.service):
[Unit]
Description=Apache Kafka server
After=network.target zookeeper.service
[Service]
Type=simple
User=kafka
Group=nogroup
Environment=“KAFKA_HOME=/opt/kafka”
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用:sudo systemctl daemon-reload && sudo systemctl enable --now kafka。
- 日志与磁盘:配置 logrotate 或清理策略,避免日志无限增长;监控磁盘使用率并设置告警。
- 安全加固(按需):启用 SSL/TLS 加密与 SASL 认证;限制外网访问,仅开放必要端口;为管理界面与 API 设置访问控制。
- 升级与变更:遵循滚动升级策略,先扩容不裁撤,变更前备份配置与元数据,灰度验证后再全量发布。