适用于 Debian 的稳定、可落地的高可用部署与性能调优要点
一 基础环境与系统准备
- 安装 OpenJDK 11(或更高),并配置环境变量(如 JAVA_HOME、KAFKA_HOME),验证 java -version 输出正确版本。
- 创建专用系统用户 kafka,将安装目录(如 /opt/kafka)与数据目录(如 /data/kafka)属主设为 kafka:kafka,权限 750。
- 使用 systemd 管理服务,示例:/etc/systemd/system/kafka.service(Type=simple,User=kafka,ExecStart 指向 kafka-server-start.sh,Restart=on-failure)。
- 内核与网络优化(/etc/sysctl.conf):如 net.core.somaxconn=32768、vm.swappiness=10;文件描述符(/etc/security/limits.conf):如 soft/hard nofile 100000,并确认 systemd 服务段包含 LimitNOFILE=100000。
- 存储建议:日志目录 log.dirs 使用 SSD 或多盘目录(逗号分隔)以分摊 I/O;文件系统建议 ext4/XFS,并禁用 atime 更新。
二 部署模式选择与目录规划
- 模式选择:
- 传统模式:外置 Zookeeper 3.7+ 集群(建议 3/5 节点奇数部署)。
- KRaft 模式(Kafka 2.8+):去 Zookeeper,配置 node.id 与 controller.quorum.voters。
- 目录规范:
- 安装目录:/opt/kafka(软链便于升级);
- 数据目录:/data/kafka/logs(多盘可 “/data1/kafka,/data2/kafka”);
- 日志目录:/var/log/kafka(便于 logrotate 与审计)。
- 服务依赖:
- 传统模式:Kafka Unit 的 After=zookeeper.service;
- KRaft 模式:After=network.target。
三 Broker 关键配置 server.properties
- 身份与网络:
- broker.id(集群内唯一整数);
- listeners(如 PLAINTEXT://:9092 或 SASL_SSL://:9093);
- advertised.listeners(客户端可达地址,域名或内网/公网 IP)。
- 可靠性与高可用:
- default.replication.factor=3;
- min.insync.replicas=2(与 acks=all 配合保障不丢数据);
- unclean.leader.election.enable=false(避免非同步副本成为 Leader)。
- 分区与并行:
- num.partitions:可按“每 Broker 100–200 分区”的经验值规划,或按消费者线程数对齐;
- 创建 Topic 显式指定分区与副本,如:
kafka-topics.sh --create --topic my_topic --partitions 6 --replication-factor 3 --bootstrap-server kafka1:9092 --config min.insync.replicas=2。
- 存储与段管理:
- log.dirs 多目录;
- log.segment.bytes=2GB(减少段切换);
- log.retention.hours=168(按业务调整)。
- 线程与网络:
- num.network.threads≈CPU 核数的 2/3;
- num.io.threads≈CPU 核数的 50%;
- num.replica.fetchers(副本同步并发,可按 CPU/磁盘数适度上调);
- socket.send.buffer.bytes / socket.receive.buffer.bytes=1MB;
- queued.max.requests(提升峰值承压能力)。
四 生产者与消费者推荐配置
- 生产者(高可靠优先):
- acks=all;
- retries=3(应对瞬时故障);
- batch.size=1MB;linger.ms=50–100ms(合并批次提升吞吐);
- compression.type=lz4(CPU 开销小、压缩率高);
- buffer.memory=64MB。
- 消费者(稳定与吞吐平衡):
- fetch.min.bytes=1MB;fetch.max.wait.ms=1000ms;
- max.poll.records=500–1000(避免单次处理超时);
- 建议关闭自动提交:enable.auto.commit=false,配合业务处理完成手动提交;
- auto.offset.reset=latest/earliest(按业务语义选择)。
五 安全 监控 维护与 JVM 调优
- 安全:
- 传输加密:启用 SSL/TLS(配置 ssl.keystore.location / ssl.truststore.location);
- 认证:启用 SASL(如 SCRAM-SHA-256 或 PLAIN),在 listener 上分别配置 JAAS;
- 授权:使用 kafka-acls.sh 配置 ACL(Topic/Group/Cluster 资源访问控制)。
- 监控与巡检:
- 指标与可视化:Prometheus + Grafana(关注 UnderReplicatedPartitions、ISR 数、请求队列时间、生产/消费滞后 等);
- 命令行巡检:kafka-topics.sh --describe、kafka-consumer-groups.sh --describe;
- 日志:对 /opt/kafka/logs/*.log 配置 logrotate(如 daily、rotate 7、compress)。
- 备份与恢复:
- 定期备份 log.dirs 数据(如脚本或工具离线备份至对象存储/NFS),并演练恢复流程。
- JVM 与 GC:
- 堆大小:如 -Xms4G -Xmx4G(不超过物理内存的 50%–70%,避免过大 GC 停顿);
- 垃圾回收器:-XX:+UseG1GC(可配合 -XX:MaxGCPauseMillis 目标)。