Kafka在CentOS上的性能优化需围绕硬件资源、操作系统、Broker配置、生产者/消费者调优、网络及监控六大维度展开,以下是具体措施:
ulimit -n 65535
临时生效,或修改/etc/security/limits.conf
永久生效(添加* soft nofile 65535; * hard nofile 65535
)。vm.swappiness
:设置为1(默认60),避免系统频繁将内存数据交换到磁盘,减少I/O开销。vm.dirty_background_ratio
:设置为10以下(默认10),控制后台脏页刷新的阈值,平衡内存与磁盘I/O。vm.dirty_ratio
:设置为60-80(默认20),限制脏页占用的最大内存比例,避免内存耗尽导致系统卡顿。num.partitions
:根据消费者线程数设置分区数(建议分区数≥消费者线程数),提高并行处理能力;分区过多会增加ZooKeeper负担,需权衡。log.segment.bytes
:设置日志段大小为1GB(默认1GB),避免频繁切换日志段导致的I/O开销。log.retention.hours
/log.retention.bytes
:合理设置日志保留时间(如7天)或大小(如1TB),及时清理旧数据,释放磁盘空间。num.network.threads
:处理网络请求的线程数,设置为CPU核数+1(如8核设置为9)。num.io.threads
:处理磁盘I/O的线程数,设置为CPU核数的2倍(如8核设置为16)。compression.type
:启用LZ4压缩(比Snappy更高的吞吐量、更低的CPU开销),减少网络传输和存储成本。acks
:根据可靠性需求选择应答机制——acks=1
(默认,平衡性能与可靠性)、acks=0
(最高性能,不保证数据不丢失)、acks=all
(最高可靠性,需所有ISR副本确认)。buffer.memory
:生产者缓冲区大小,设置为64MB以上(默认32MB),提高批量发送效率。log.flush.interval.messages
/log.flush.interval.ms
:调整日志刷盘间隔(如log.flush.interval.messages=10000
、log.flush.interval.ms=1000
),减少刷盘次数,提高吞吐量(但会增加数据丢失风险,需根据业务需求权衡)。batch.size
设置为1MB(默认16KB),将多个小消息合并为一个大消息批量发送,减少网络请求次数;linger.ms
设置为100ms以上(默认0),允许生产者在发送前等待更多消息积累,进一步提高批量效率。compression.type
与Broker保持一致(推荐LZ4);acks
根据业务需求选择(如允许少量丢失选acks=1
,追求可靠性选acks=all
)。fetch.min.bytes
设置为1MB(默认1字节),减少消费者向Broker发送拉取请求的频率;fetch.max.wait.ms
设置为1000ms(默认500ms),平衡延迟与吞吐量(等待时间越长,单次拉取的数据量越大)。max.poll.records
设置为500-1000(默认500),增加每次poll
操作返回的最大记录数,提高消费者的单次处理效率;max.poll.interval.ms
设置为30分钟以上(默认5分钟),避免因处理慢导致消费者被踢出消费者组(需根据业务处理时间调整)。compression.type=LZ4
,减少网络传输的数据量(LZ4压缩率约2-3倍,对CPU开销影响小)。net.core.rmem_max=16777216
、net.core.wmem_max=16777216
),提高网络吞吐量;启用TCP_NODELAY(禁用Nagle算法),减少小数据包的发送延迟。kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec
)或第三方工具(如Prometheus+Grafana、Kafka Manager),实时监控集群的关键指标(吞吐量、延迟、ISR数量、未同步副本数等)。kafka-producer-perf-test
(生产者压测)、kafka-consumer-perf-test
(消费者压测)工具模拟实际负载,验证优化效果(如调整batch.size
后,观察吞吐量是否提升)。kafka-log-dirs
工具),监控磁盘空间使用情况(建议剩余空间≥20%);根据业务增长动态调整分区数(如分区数不足导致吞吐量下降时,可通过kafka-topics --alter
命令增加分区)。以上策略需根据实际业务场景(如吞吐量需求、延迟要求、可靠性需求)和硬件环境(如CPU核数、内存大小、磁盘类型)进行调整,建议在测试环境中验证后再应用到生产环境。