CPU:Kafka是多线程应用,需根据分区数和并发需求选择多核CPU(如Intel至强铂金系列),确保每个Broker有足够的CPU核心处理网络请求和磁盘I/O。
内存:为Kafka Broker分配足够内存(建议至少4G及以上),同时避免过度分配导致频繁swap(需结合JVM堆内存设置)。
磁盘:优先使用SSD(如NVMe SSD)替代传统机械硬盘,提升数据读写速度;若使用HDD,需确保磁盘转速≥7200rpm。
网络:采用10Gbps及以上高性能网卡(如Intel X550),减少网络延迟;确保集群内节点间网络带宽充足(如跨机房部署需考虑跨机房带宽)。
vm.swappiness=1(默认60),严格避免系统将内存swap到磁盘,减少I/O延迟。vm.dirty_background_ratio=5(后台脏页刷新阈值)、vm.dirty_ratio=10(强制脏页刷新阈值),平衡I/O性能与系统响应速度。ulimit -n 65535(或更高)增加系统最大文件描述符数,避免Kafka因打开文件过多而报错。vm.max_map_count=262144(默认65530),提升Kafka对内存映射文件的处理能力(如日志段管理)。noatime选项(如mount -o noatime /dev/sdb1 /kafka/logs),减少文件访问时间更新带来的额外I/O。server.properties中设置log.dirs=/kafka/logs1,/kafka/logs2(多个目录),将日志分散到不同物理磁盘,提高并行I/O性能。num.network.threads(处理网络请求的线程数)设置为CPU核数+1(如8核CPU设置为9),确保网络请求及时处理。num.io.threads(处理磁盘读写的线程数)设置为CPU核数的2倍(如8核CPU设置为16),应对高并发磁盘操作。num.replica.fetchers(副本同步线程数)设置为CPU核数的1/3~1/2(如8核CPU设置为3),提高副本同步效率,避免成为瓶颈。log.segment.bytes=1073741824(1GB,默认1GB),合理的分段大小可减少日志切换频率,提高写入效率。log.flush.interval.messages=100000(每10万条消息刷盘)、log.flush.interval.ms=1000(每1秒刷盘),平衡数据可靠性(避免频繁刷盘影响吞吐量)与性能。compression.type=lz4(或snappy),在保证CPU开销可控的前提下,减少网络传输和磁盘存储开销(lz4压缩率≈2~3倍,延迟更低)。num.partitions(如每秒1万条消息需至少10个分区),增加分区数可提高并行处理能力(但需避免过多分区导致ZooKeeper压力增大)。default.replication.factor=3(默认3),确保数据可靠性;若对可靠性要求不高,可设置为2以减少网络同步开销。UnderReplicatedPartitions(未同步分区数),若持续大于0,需检查副本节点是否正常;调整replica.lag.time.max.ms=60000(1分钟),允许副本短暂滞后,避免不必要的副本失效。batch.size=1048576(1MB,默认16KB),将多条消息合并为一个批次发送,减少网络请求次数;linger.ms=100(默认0),等待100ms以凑满批次,平衡延迟(≤100ms)与吞吐量。compression.type=lz4(与Broker保持一致),进一步减少网络传输量。acks=all(默认1),确保所有ISR副本都确认收到消息,保证数据可靠性(若对可靠性要求低,可设置为0或1以提高吞吐量)。fetch.max.bytes=1048576(1MB,默认50MB,需根据消息大小调整),每次拉取更多数据,减少网络请求次数;fetch.max.wait.ms=1000(默认500ms),等待1秒以凑满批次。max.poll.records=500(默认500),每次poll操作返回更多记录,提高消费者吞吐量;max.poll.interval.ms=300000(5分钟,默认5分钟),避免因处理时间过长触发rebalance。session.timeout.ms=10000(默认10秒)、heartbeat.interval.ms=3000(默认3秒),调整会话超时时间,避免因消费者短暂停顿(如GC)导致不必要的rebalance。kafka-topics --alter --topic your_topic --partitions new_partition_count命令增加Topic分区数(需确保生产者、消费者代码兼容分区变更),将负载分散到更多Broker节点。kafka-reassign-partitions.sh工具调整副本分布(如将副本从慢节点迁移到快节点),优化副本同步性能。kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec)或第三方工具(如Prometheus+Grafana、Confluent Control Center),实时监控集群的吞吐量、延迟、分区ISR数量、副本同步状态等指标。log.retention.hours=168(7天)、log.retention.bytes=10737418240(10GB)),避免磁盘空间耗尽;定期清理旧日志(如使用kafka-log-dirs.sh工具)。