Kafka消息传递效率优化策略
log.dirs=/data1/kafka,/data2/kafka
)提升并行I/O能力。vm.dirty_ratio=20
、vm.dirty_background_ratio=10
调整),用于缓存Kafka日志,减少磁盘I/O。JVM堆内存设置为6-8GB(如-Xmx6G -Xms6G
),并选用G1GC垃圾回收器(-XX:+UseG1GC -XX:MaxGCPauseMillis=20
),降低GC停顿时间。num.network.threads
(网络线程)为CPU核数的1.5-2倍(如12核设16-24),num.io.threads
(I/O线程)为SSD设16-32、HDD设8-12;使用万兆网卡(带宽>1Gbps),并通过net.core.rmem_max=2097152
、net.core.wmem_max=2097152
调整内核缓冲区大小,减少网络延迟。num.network.threads
(网络处理线程)、num.io.threads
(I/O处理线程)匹配硬件资源,socket.send.buffer.bytes
/socket.receive.buffer.bytes
设为1MB(高吞吐场景),提升网络传输效率。log.segment.bytes
(日志段大小)从默认1GB调整为512MB,减少索引文件数量,提升日志滚动与清理效率;num.replica.fetchers
(Follower拉取线程)设为CPU核数的1/3(如12核设4),加速副本同步;replica.fetch.max.bytes
(Follower单次拉取大小)设为4MB,提高复制吞吐量。compression.type=snappy
),在保证CPU开销可控(约10%-20%)的前提下,减少网络传输数据量(约30%-50%);若对带宽敏感且CPU充足,可选择LZ4(压缩率更高,约35%-55%)。batch.size
(如1MB,默认16KB),允许生产者累积更多消息后批量发送,减少网络请求次数;设置linger.ms
(如10-50ms),让生产者在发送前等待更多消息加入批次,进一步提升批量效率;启用compression.type=snappy
,压缩批次消息,降低网络带宽消耗。buffer.memory
(如128MB,默认32MB),防止生产者因缓冲区满而阻塞;根据业务需求选择acks
级别:高吞吐场景设为1(仅Leader确认),可靠性场景设为all(全ISR确认),配合min.insync.replicas=2
(最小同步副本数),平衡性能与数据安全。fetch.min.bytes
(如1MB,默认1KB),增加每次拉取的消息量,减少网络请求次数;设置max.poll.records
(如500,默认500),根据消费者处理能力调整单次拉取的消息数,避免内存溢出。echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
),确保CPU满负荷运行;增大PageCache(sysctl -w vm.dirty_ratio=20
、vm.dirty_background_ratio=10
),提升磁盘写入缓存效率;禁用Swap(swapoff -a
并修改/etc/fstab
),避免内存交换导致的性能骤降。-XX:+UseG1GC
),设置-XX:MaxGCPauseMillis=20
(最大GC停顿时间),减少GC对Kafka服务的影响;固定JVM堆内存大小(-Xmx6G -Xms6G
),避免堆内存动态调整带来的性能波动。