一 环境与系统准备
- 安装 Java 8 或 11(两者均被支持),建议固定版本并配置 JAVA_HOME,例如:sudo apt update && sudo apt install -y openjdk-11-jdk。
- 创建专用系统用户(如 kafka)与数据目录(如 /var/lib/kafka、/var/lib/zookeeper),并赋予权限,避免使用 /tmp。
- 规划磁盘与目录:为 log.dirs 配置多个目录并挂载到不同物理磁盘可显著提升吞吐与容错。
- 网络与防火墙:开放 2181(Zookeeper) 与 9092(Kafka) 端口;云环境同步配置安全组。
- 建议通过 systemd 托管服务并设置开机自启,便于生产运维。
二 关键配置清单 server.properties 与 zoo.cfg
- 基础标识与网络
- broker.id:每个 Broker 唯一(如 0/1/2)。
- listeners 与 advertised.listeners:区分内外访问地址,避免内外网解析不一致,例如:
- listeners=PLAINTEXT://0.0.0.0:9092
- advertised.listeners=PLAINTEXT://<本机可路由IP或域名>:9092
- 存储与恢复
- log.dirs:多磁盘目录用逗号分隔(如 /data/kafka1,/data/kafka2)。
- num.recovery.threads.per.data.dir:每个数据目录恢复线程数(如 8)。
- 主题与副本(生产建议)
- auto.create.topics.enable:false(避免误建 Topic)。
- num.partitions:新建 Topic 默认分区数(如 3)。
- default.replication.factor:3;offsets.topic.replication.factor:3;transaction.state.log.replication.factor:3;transaction.state.log.min.isr:2。
- 日志保留与段
- log.retention.hours:168(7 天);log.retention.bytes:按容量控制(如 107374182400 即 100GB)。
- log.segment.bytes:1073741824(1GB);log.retention.check.interval.ms:300000。
- Zookeeper
- zookeeper.connect:zk1:2181,zk2:2181,zk3:2181;zookeeper.connection.timeout.ms:18000。
- 网络与 I/O 线程
- num.network.threads:8–16;num.io.threads:16–32(按 CPU/磁盘调整)。
- socket.send.buffer.bytes:1048576;socket.receive.buffer.bytes:1048576;socket.request.max.bytes:104857600(100MB)。
- 消费者组稳定性
- group.initial.rebalance.delay.ms:3000(减少首次再均衡风暴)。
三 性能与稳定性优化
- 生产者端(提升吞吐与可靠性)
- acks:all;retries:Integer.MAX_VALUE;enable.idempotence:true。
- compression.type:snappy 或 lz4;batch.size:16384–65536;linger.ms:5–20。
- Broker 端(I/O 与恢复)
- 多磁盘 log.dirs 分摊写放大;num.recovery.threads.per.data.dir 适度增大以加速启动/恢复。
- 合理设置 log.retention.hours/bytes 与 log.segment.bytes,避免频繁段滚动与过度占用磁盘。
- 消费者端(稳定拉取与处理)
- fetch.min.bytes:1048576(1MB);fetch.max.wait.ms:500;max.partition.fetch.bytes:5242880(5MB)。
- max.poll.records:10000;max.poll.interval.ms:300000;session.timeout.ms:30000;heartbeat.interval.ms:10000。
- 线程与网络栈
- num.network.threads / num.io.threads 结合 CPU 核数与磁盘并发度调优;socket 缓冲适度放大以适配大消息与高带宽。
四 安全与访问控制
- 传输加密与认证
- 启用 SSL/TLS:配置 security.protocol=SSL,设置 ssl.truststore.location / ssl.truststore.password 等。
- 启用 SASL:如 security.protocol=SASL_PLAINTEXT 或 SASL_SSL,sasl.mechanism=PLAIN(生产建议与 TLS 组合)。
- 授权与访问控制
- 使用 ACL 精细化控制 Topic/Group/Cluster 权限,遵循最小权限原则。
- 网络安全
- 仅开放必要端口(2181/9092),并限制来源网段;云上同步配置安全组与 VPC 策略。
五 运维监控与自动化
- 服务托管
- 使用 systemd 管理 Zookeeper 与 Kafka,设置 Restart=on-failure,并配置合适的 JVM 参数(如 -Xmx/-Xms 与 -XX:+UseG1GC)。
- 监控与告警
- 暴露 JMX 指标,结合 Prometheus + Grafana 构建监控大盘与阈值告警(如请求耗时、请求错误率、UnderReplicatedPartitions、ISR 收缩等)。
- 日志与审计
- 配置 logrotate 对 server.log 与 GC 日志进行轮转与保留,避免磁盘被占满。
- 验证与演练
- 部署后用命令行工具创建 Topic、生产/消费消息进行连通性与性能验证;定期演练 Broker 扩容、磁盘更换、Zookeeper 切换 等运维场景。