log.dirs
参数配置多个物理磁盘路径(如/data/kafka-logs-1,/data/kafka-logs-2
),Kafka会将分区数据均匀分布到不同目录的磁盘中,提升并行IO能力。需确保各目录挂载到独立的物理磁盘,避免单磁盘瓶颈。log.retention.hours
(或log.retention.ms
,优先级更高)设置日志保留时间(如7天=168小时),避免日志无限增长占用磁盘空间。log.retention.bytes
设置每个分区的最大容量(如10GB),当分区大小达到阈值时,自动清理旧数据。log.segment.bytes
:设置单个日志段的大小(建议1GB),过小会导致频繁的段滚动(增加IO开销),过大则会延长日志清理时间。log.roll.hours
:设置日志段滚动的时间间隔(如24小时),配合log.segment.bytes
使用,平衡段文件数量与清理效率。delete
策略(log.cleanup.policy=delete
),根据保留时间或大小自动删除旧数据,适用于大多数场景。compact
策略(log.cleanup.policy=compact
),Kafka会保留每个key的最新值,减少数据量。需开启log.cleaner.enable=true
(默认开启)以支持压缩功能。batch.size
:设置批量发送的消息大小(如16KB-1MB),增大批次可减少网络IO次数(如设置为1MB,每1秒发送一次)。linger.ms
:设置生产者等待批次填满的时间(如100-1000ms),避免小批次频繁发送。fetch.min.bytes
:设置每次拉取的最小数据量(如1MB),减少拉取次数。fetch.max.wait.ms
:设置拉取等待时间(如500ms),平衡延迟与吞吐量。compression.type
参数选择压缩算法(如snappy
、lz4
,优先选lz4
,压缩率与速度更均衡),减少网络传输与磁盘IO开销(压缩率通常可达30%-50%)。num.network.threads
参数控制处理网络请求的线程数(建议设置为CPU核数+1,如4核设置为5),负责接收客户端请求与发送响应。num.io.threads
参数控制处理磁盘IO的线程数(建议设置为CPU核数的2-3倍,如4核设置为8-12),负责日志写入、读取、压缩等操作。需根据CPU核心数调整,避免线程过多导致上下文切换开销。KAFKA_HEAP_OPTS
环境变量设置(如export KAFKA_HEAP_OPTS="-Xmx6G -Xms6G"
)。-XX:+UseG1GC
),相比CMS收集器,G1GC在堆内存较大时表现更稳定,能减少GC停顿时间(建议开启-XX:MaxGCPauseMillis=200
,设置最大GC停顿时间为200ms)。kafka-topics.sh --describe
查看分区状态、kafka-consumer-groups.sh
查看消费延迟)或第三方工具(如Prometheus+Grafana),实时监控以下指标:
kafka-consumer-groups.sh
中的lag
指标)kafka-backup
工具进行增量备份(如每天凌晨备份),并将备份数据存储到异地(如云存储),制定数据恢复计划(如模拟数据丢失场景测试恢复流程)。