Kafka在CentOS上的性能优化技巧
优化Kafka在CentOS上的性能需从硬件配置、操作系统调优、Kafka参数配置、网络优化、监控维护五大维度综合调整,以下是具体技巧:
vm.swappiness=1
(默认60),降低系统使用Swap的概率,避免磁盘I/O性能骤降;vm.dirty_background_ratio=10
(后台刷新脏页的阈值)、vm.dirty_ratio=60
(触发强制刷新的阈值),平衡I/O性能与数据安全性;fs.aio-max-nr=1048576
(异步I/O最大请求数),提升磁盘I/O并发能力;ulimit -n 65535
(每个进程可打开的文件数),避免Kafka因文件描述符不足而拒绝连接。noatime
选项(禁用访问时间更新),减少不必要的磁盘操作。num.partitions
(建议与消费者线程数相等或略多),增加分区数能提升并行处理能力,但过多分区会增加副本同步延迟。num.network.threads=num_cores+1
(处理网络请求的线程数)、num.io.threads=num_cores*2
(处理磁盘I/O的线程数),避免线程成为瓶颈。log.segment.bytes=1G
(单个日志段大小,过大导致切换延迟,过小增加管理开销)、log.retention.ms=7d
(日志保留时间,根据业务需求调整)、log.cleanup.policy=delete
(日志清理策略,可选择compact
用于Key-based去重)。compression.type=lz4
(推荐,兼顾吞吐量与CPU开销),减少网络传输和磁盘存储开销。-Xms4G -Xmx4G
(初始堆与最大堆大小相等,避免频繁扩容),根据Broker负载调整(建议不超过物理内存的1/2);-XX:+UseG1GC
),减少GC停顿时间,提升Broker稳定性。net.core.netdev_max_backlog=5000
),提升网络吞吐量。/etc/sysctl.conf
中的参数,提升网络性能:
net.core.rmem_default=262144
(接收缓冲区默认大小)、net.core.rmem_max=16777216
(接收缓冲区最大大小);net.core.wmem_default=262144
(发送缓冲区默认大小)、net.core.wmem_max=16777216
(发送缓冲区最大大小);net.ipv4.tcp_wmem=4096 16384 4194304
(TCP发送缓冲区动态调整范围)、net.ipv4.tcp_rmem=4096 87380 4194304
(TCP接收缓冲区动态调整范围);net.core.somaxconn=32768
(监听端口的最大连接队列长度),避免连接被拒绝。log.retention.ms
和log.retention.bytes
设置,避免日志文件占用过多磁盘空间;可通过kafka-log-dirs
工具手动清理过期日志。