CentOS 上调整 Kafka 参数的实用步骤
一 操作前准备
- 备份配置并选择合适版本:修改前先备份配置文件,例如 cp server.properties server.properties.bak;Kafka 2.8 之前依赖 Zookeeper,2.8+ 可使用 KRaft 模式摆脱 Zookeeper。
- 安装 Java:建议 OpenJDK 8/11,执行 java -version 验证。
- 目录与权限:为日志与数据目录(如 /var/lib/kafka)创建专用用户与权限,便于 systemd 管理与安全隔离。
- 防火墙:开放端口(如 9092、Zookeeper 2181),或在内网安全组放行对应端口。
二 修改 server.properties 的关键参数
- 基础网络与身份
- broker.id:集群内唯一整数(每台 Broker 不同)。
- listeners:Broker 监听地址,如 PLAINTEXT://0.0.0.0:9092 或 SASL_PLAINTEXT://内网IP:9092。
- advertised.listeners:客户端实际连接的地址(NAT/云环境需填可被客户端访问的 IP/域名)。
- 元数据与存储
- zookeeper.connect:Zookeeper 地址(如 zk1:2181,zk2:2181,zk3:2181;KRaft 模式则配置 process.roles、controller.quorum.voters 等)。
- log.dirs:日志目录(多盘用逗号分隔提升 IO 并行度)。
- Topic 默认策略
- num.partitions:新 Topic 默认分区数(按并发与并行度设定)。
- default.replication.factor:默认副本因子(生产建议 ≥3)。
- min.insync.replicas:写入需确认的最小副本数(需 ≤ 副本因子,建议 2)。
- 日志保留与段
- log.retention.hours:保留时长(如 168 小时=7 天)。
- log.segment.bytes:段大小(如 1GB)。
- log.retention.check.interval.ms:检查间隔(如 300000ms)。
三 线程网络与磁盘 I O 调优
- 线程与网络
- num.network.threads:网络请求处理线程(常见 3–8,可按 CPU 核数微调)。
- num.io.threads:磁盘 IO 线程(常见 8–16,磁盘多/快可上调)。
- socket.send.buffer.bytes / socket.receive.buffer.bytes:网络缓冲(如 100KB 起,可按带宽与延迟调优)。
- socket.request.max.bytes:单请求最大字节数(如 100MB)。
- 磁盘与刷盘
- 多磁盘:log.dirs 指定多个目录(如 /data1/kafka,/data2/kafka)提升吞吐。
- 刷盘策略:log.flush.interval.messages / log.flush.interval.ms(权衡性能与持久性,批量场景可适当放宽)。
四 安全与 JVM 参数
- SASL/PLAIN 认证示例
- server.properties:
- security.inter.broker.protocol=SASL_PLAINTEXT
- sasl.enabled.mechanisms=PLAIN
- sasl.mechanism.inter.broker.protocol=PLAIN
- JAAS 文件(/opt/kafka/config/kafka_server_jaas.conf):
- KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required
username=“admin” password=“admin-secret”
user_admin=“admin-secret” user_producer=“producer-secret” user_consumer=“consumer-secret”; };
- 启动前导出:export KAFKA_OPTS=“-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf”
- JVM 堆与 GC
- 建议堆大小不超过物理内存的 70%,如:export KAFKA_HEAP_OPTS=“-Xmx4G -Xms4G”(按内存与负载调整)。
五 应用变更与验证
- 重启方式
- 手动:bin/kafka-server-stop.sh && bin/kafka-server-start.sh config/server.properties
- systemd:systemctl daemon-reload && systemctl restart kafka(建议配置为服务单元管理)
- 验证
- 端口监听:ss -lntp | grep 9092 或 netstat -tuln | grep 9092
- 功能自检:创建测试 Topic、生产/消费消息,确认连通与权限
- kafka-topics.sh --create --topic test_topic --bootstrap-server :9092 --partitions 3 --replication-factor 3
- kafka-console-producer.sh --topic test_topic --bootstrap-server :9092
- kafka-console-consumer.sh --topic test_topic --from-beginning --bootstrap-server :9092
- 监控与系统优化
- JMX:在启动脚本中导出 JMX_PORT=9999,配合 JConsole/Prometheus+Grafana 监控吞吐、延迟、请求耗时等
- OS 优化:适当调大文件句柄与网络缓冲(如 fs.file-max、net.core.rmem_default/wmem_default、net.ipv4.tcp_rmem/wmem)、使用 XFS/noatime 挂载日志盘、必要时降低 vm.swappiness。