在 Ubuntu 上高效运行 Kafka 的实操清单
一 基础环境部署与快速验证
- 安装 OpenJDK 11:sudo apt update && sudo apt install -y openjdk-11-jdk;验证:java -version。
- 部署元数据服务:可选择独立 Zookeeper(推荐 3 节点集群)或 KRaft 模式(Kafka 3.x 起内置,生产更简洁)。
- 下载并解压 Kafka(示例版本 3.7.x)至 /opt/kafka;创建数据目录:sudo mkdir -p /var/lib/kafka/logs。
- 配置 server.properties:
- broker.id(集群内唯一,如 0)
- listeners=PLAINTEXT://服务器IP:9092
- advertised.listeners=PLAINTEXT://服务器IP:9092(对外可达地址)
- log.dirs=/var/lib/kafka/logs
- 若用 Zookeeper:zookeeper.connect=host1:2181,host2:2181,host3:2181
- 快速验证:
- 创建测试 Topic:/opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
- 生产消息:/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
- 消费消息:/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
二 Broker 关键配置与并行度设计
- 线程与网络:
- num.network.threads:建议 CPU 逻辑核数×1~2(如 8 核→8~16)
- num.io.threads:建议 磁盘数×8 或 CPU 核数×2(顺序 I/O 密集)
- 批处理与压缩(Broker/主题级生效):
- compression.type=lz4/snappy(低延迟/高吞吐)
- 可靠性与可用性:
- default.replication.factor=3(跨可用区更稳)
- min.insync.replicas=2(写入需至少 2 个副本确认)
- 磁盘与段管理:
- log.dirs 指向 SSD/NVMe;log.segment.bytes=1073741824(1GB,减少索引开销)
- 保留策略按业务设置:log.retention.hours=168(7 天)或更长;必要时配合 log.retention.bytes
- 网络与请求:
- socket.send.buffer.bytes / socket.receive.buffer.bytes=1048576(1MB)
- socket.request.max.bytes=104857600(100MB,避免大消息阻塞)
- 分区与并行度:
- num.partitions(或主题级 partitions)≈ 消费者线程数×1.5~2,且为 Broker 数的整数倍,以均衡负载与扩展
三 生产者与消费者高效配置
- 生产者(吞吐优先):
- batch.size=1048576(1MB)
- linger.ms=100(合并小消息)
- compression.type=lz4
- acks=all(强可靠);若追求极致吞吐可设为 1(需权衡丢消息风险)
- buffer.memory=33554432(32MB)
- 消费者(稳定与效率):
- fetch.min.bytes=1048576(1MB)
- fetch.max.wait.ms=1000(平衡延迟与吞吐)
- max.poll.records=200~500(避免单次处理过慢触发 rebalance)
- group.initial.rebalance.delay.ms=3000(减少启动/再均衡抖动)
四 Ubuntu 系统层面优化
- 资源与内核:
- 文件描述符:在 /etc/security/limits.conf 增加
-
- soft nofile 100000;* hard nofile 100000;执行 ulimit -n 100000 即时生效
- 虚拟内存与网络:
- vm.swappiness=1;vm.max_map_count=262144
- net.core.rmem_max / wmem_max=16777216;net.core.somaxconn=8192;net.ipv4.tcp_tw_reuse=1
- 存储与挂载:
- 日志目录使用 SSD/NVMe,挂载选项建议 noatime 减少元数据写入
- JVM 建议(Kafka 启动脚本内设置):
- KAFKA_HEAP_OPTS=“-Xms4G -Xmx4G”;-XX:+UseG1GC;-XX:MaxGCPauseMillis=20(按内存与负载调整)
五 服务化与监控维护
- systemd 服务(示例):
- Kafka:/etc/systemd/system/kafka.service(ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties;User=kafka;Restart=always)
- 若用独立 Zookeeper:/etc/systemd/system/zookeeper.service(Type=forking;ExecStart=/opt/zookeeper/bin/zkServer.sh start)
- 启用:sudo systemctl daemon-reload && sudo systemctl enable --now zookeeper kafka
- 监控与告警:
- 关键指标:UnderReplicatedPartitions、RequestQueueTimeMs、BytesIn/OutPerSec、生产/消费延迟与堆积
- 方案:JMX 采集 + Prometheus + Grafana 看板,或 Kafka Exporter
- 运维要点:
- 合理设置保留策略与磁盘阈值告警,避免 磁盘打满
- 定期巡检 未同步分区、请求耗时、网络/磁盘利用率
- 版本升级遵循滚动升级策略,先在测试环境验证