Kafka在Debian上的资源占用控制
一 系统层限制 CPU 内存与 I O
sudo systemctl enable --now cgroup2
sudo mkdir -p /sys/fs/cgroup/kafka.slice
echo "100000 100000" | sudo tee /sys/fs/cgroup/kafka.slice/cpu.max # 2 核
echo "8589934592" | sudo tee /sys/fs/cgroup/kafka.slice/memory.max # 8GB
echo "max" | sudo tee /sys/fs/cgroup/kafka.slice/memory.swap.max
sudo systemctl set-property kafka.service CPUQuota=200% MemoryMax=8G
sudo systemctl daemon-reload && sudo systemctl restart kafka
sudo ionice -c 2 -n 7 -p $(pidof java)
docker run -d --name kafka --cpus=2 --memory=8g confluentinc/cp-kafka:latest
以上做法分别通过 cgroups 的 cpu.max/cpu.cfs_quota_us 与 memory.max 实现配额,通过 ionice 调整 I/O 调度优先级,容器则使用 –cpus/–memory 进行硬限制。
二 JVM 堆与 GC 设置
export KAFKA_HEAP_OPTS="-Xms8G -Xmx8G"
export KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:InitiatingHeapOccupancyPercent=45"
export KAFKA_GC_LOG_OPTS="-Xlog:gc*,gc+age=trace,safepoint:file=/var/log/kafka/gc.log:time,tags:filecount=10,filesize=100M"
三 Broker 关键参数控制吞吐与占用
四 消费者组与重平衡控制
五 监控与容量规划