一、內存資源分配原則
-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倍;設置合理的日志段大?。?code>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),平衡網絡往返次數與延遲。