一、内存资源分配原则
-Xms(初始堆内存)与-Xmx(最大堆内存)设置为相同值(如8-16GB),避免堆内存动态扩展带来的性能开销;新生代(-Xmn)设置为堆内存的50%-60%(如10GB堆内存设置-Xmn10G),以优化Minor GC效率;同时配置元空间(-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M)和直接内存(-XX:MaxDirectMemorySize=1G),满足元数据和网络传输需求。buffer.memory参数控制生产者/消费者与Broker之间的缓冲区大小,建议设置为服务器可用内存的50%-70%(如32GB内存设置16-21GB),避免缓冲区过小导致频繁阻塞或过大占用过多内存。二、磁盘I/O资源分配原则
noatime,nodiratime,data=writeback选项,减少文件元数据操作对I/O的影响。num.partitions)以分散写压力到多个磁盘,分区数建议为CPU核心数的2-3倍;设置合理的日志段大小(log.segment.bytes,如1GB)和保留策略(log.retention.hours,如7天或168小时),避免单个日志文件过大导致刷盘延迟;启用日志压缩(log.cleaner.enable=true,选择Zstd或Lz4压缩算法),减少过期数据的磁盘占用。num.io.threads(磁盘I/O线程数)为CPU核心数的2倍(如8核设置16),提高并发处理能力;优化log.flush.interval.messages(如10000条)和log.flush.interval.ms(如1000ms),平衡数据持久化延迟与吞吐量。三、CPU资源分配原则
num.network.threads(网络处理线程,建议为CPU核心数的2/3)、num.io.threads(磁盘I/O线程,建议为CPU核心数的2倍)、num.replica.fetchers(副本拉取线程,建议为CPU核心数的1/3),充分利用CPU多核性能。cat /sys/block/sdX/queue/scheduler查看当前磁盘调度器,设置为deadline(兼顾延迟与吞吐)或noop(适用于SSD,由操作系统管理I/O调度),减少磁盘调度开销。cpu.cfs_quota_us设置为50000表示50% CPU时间),避免Kafka占用过多CPU影响其他系统服务。四、网络资源分配原则
socket.send.buffer.bytes(发送缓冲区,默认100KB)和socket.receive.buffer.bytes(接收缓冲区,默认100KB)的值(如设置为1MB),提高网络传输效率,减少网络瓶颈。batch.size(如16KB-1MB)和linger.ms(如5-100ms),通过批量发送消息减少网络请求次数,提升吞吐量;消费者端的fetch.min.bytes(如1MB)和fetch.max.wait.ms(如1000ms),平衡网络往返次数与延迟。