Kafka性能调优在CentOS上有哪些方法
小樊
36
2026-01-02 05:51:28
CentOS上Kafka性能调优清单
一 操作系统与JVM
- 虚拟内存与脏页:将vm.swappiness=1以减少换页;将vm.dirty_background_ratio=5、vm.dirty_ratio=70,在保证响应同时降低长时刷盘停顿风险。监控脏页:cat /proc/vmstat | egrep “dirty|writeback”。
- 网络栈:提升套接字缓冲与队列,建议 net.core.rmem_default/wmem_default=4MB,net.core.rmem_max/wmem_max=4MB;net.ipv4.tcp_rmem/tcp_wmem=4096 65536 4194304;开启net.ipv4.tcp_window_scaling=1,提高net.core.netdev_max_backlog=100000、net.ipv4.tcp_max_syn_backlog=5120。
- 文件句柄与进程数:在**/etc/security/limits.conf设置 soft/hard nofile=65535、nproc=65535,并在/etc/pam.d/login**加入 session required pam_limits.so;验证 ulimit -n。
- 磁盘与文件系统:日志目录置于SSD;使用XFS优于EXT4;挂载加noatime。
- JVM与GC:Broker堆建议4–8GB(视总内存与负载),使用G1 GC,如:-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35。
二 Broker关键配置
- 并发与网络:提高num.network.threads(如8–16)与num.io.threads(如8–16,按磁盘并发能力);适度增大socket.send.buffer.bytes/socket.receive.buffer.bytes(如128KB–1MB),并设socket.request.max.bytes(如100MB)避免大消息被拒。
- 日志与刷盘:多目录log.dirs分摊I/O;num.partitions(按吞吐目标与并行度设计,常见起步3–8/主题/实例);num.recovery.threads.per.data.dir(按磁盘数设置,常见1–4);log.retention.hours=168;log.segment.bytes=1073741824(1GB);log.retention.check.interval.ms=300000。
- 可靠性与可用性:设置min.insync.replicas=2(配合acks=all提升持久性);replica.lag.time.max.ms=60000容忍短暂抖动;unclean.leader.election.enable=false避免数据丢失;auto.create.topics.enable=false防止误建主题。
- 大消息场景:若 topic 的max.message.bytes较大(如50MB),同步副本需相应增大replica.fetch.max.bytes,否则易出现副本掉出ISR。
三 生产者与消费者
- 生产者:增大batch.size(如16KB–128KB)与linger.ms(如5–20ms)提升吞吐;根据可靠性选择acks=all并配合min.insync.replicas;合理设置compression.type=snappy/lz4/zstd。
- 消费者:fetch.min.bytes(如1MB)与fetch.max.wait.ms(如500ms)平衡吞吐与延迟;max.partition.fetch.bytes与max.poll.records按处理能力逐步调大,避免OOM与处理超时;会话与心跳:session.timeout.ms=10000、heartbeat.interval.ms=3000;启用group.instance.id做静态成员,减少重平衡;变更消费者实例采用滚动重启,避免“集体跳水”。
四 主题与副本管理
- 分区与并行度:按目标吞吐与消费者数量规划分区数,分区是并行度上限;新增分区会重均衡,提前评估对消费组的影响。
- 副本与健康:用 kafka-topics.sh --describe 查看Leader/ISR,持续监控UnderReplicatedPartitions;必要时调整replica.lag.time.max.ms容忍网络抖动。
- 在线重分配:对普通主题用 kafka-topics.sh --alter 调整分区数;用 kafka-reassign-partitions.sh 调整副本分布与数量;内置主题**__consumer_offsets默认50**分区不可改,只能调整副本;执行 --execute 后用 --verify 确认进度与结果。
五 监控与验证
- 关键指标与命令:
- 消费延迟:kafka-consumer-groups.sh --describe --group <group_id>
- 主题与ISR:kafka-topics.sh --describe --topic <topic_name>
- 复制健康:JMX 指标 kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions
- 调优闭环:每次变更仅调整1–2个参数,在相同负载下对比P95/P99延迟、吞吐、错误率与ISR波动,确认收益后再推进下一轮优化。