Ubuntu上应对Kafka高并发的实用方案
一 架构与硬件基线
二 Ubuntu 系统层优化
ulimit -n 100000。vm.max_map_count=262144。net.core.somaxconn=32768、net.ipv4.tcp_max_syn_backlog=16384。net.ipv4.tcp_tw_reuse=1;必要时调大收发缓冲:net.core.rmem_max=16777216、net.core.wmem_max=16777216。vm.swappiness=1;可按需调整脏页阈值(vm.dirty_background_ratio、vm.dirty_ratio)。三 Broker 关键配置
listeners=PLAINTEXT://:9092,advertised.listeners=PLAINTEXT://<公网或内网IP>:9092。num.network.threads=8(≈CPU 核数 1–2 倍)、num.io.threads=16(≈CPU 核数 2–4 倍);socket.send.buffer.bytes=1048576、socket.receive.buffer.bytes=1048576;socket.request.max.bytes=104857600(100MB)。log.segment.bytes=1073741824(1GB)、log.retention.hours=168(7 天,按业务调整)。num.partitions=3(或按消费者并行度设定,且为 Broker 数整数倍);default.replication.factor=3(生产环境建议 3 副本)。process.roles=broker,controller、controller.quorum.voters=0@host1:9093,1@host2:9093,2@host3:9093、listeners=CONTROLLER://:9093,PLAINTEXT://:9092、inter.broker.listener.name=PLAINTEXT、controller.listener.names=CONTROLLER。zookeeper.connect=host1:2181,host2:2181,host3:2181。四 生产者与消费者调优
batch.size=1048576(1MB)、linger.ms=100(适度等待合并批次)、compression.type=lz4/snappy(CPU 换吞吐)、acks=all(强一致,可按需降级为 1 或 0)、buffer.memory=33554432(32MB)。fetch.min.bytes=1048576(1MB)、fetch.max.wait.ms=1000(平衡时延与吞吐)、max.poll.records=500–1000(避免单次拉取过大)、group.initial.rebalance.delay.ms=3000(降低再均衡风暴)。五 监控 维护与安全
kafka-topics.sh、kafka-consumer-groups.sh 巡检。log.retention.hours 与段大小,避免磁盘被历史日志占满。Restart=always 保障高可用。listeners=SSL://:9093 并配置 ssl.keystore/truststore;security.inter.broker.protocol=SASL_PLAINTEXT、sasl.enabled.mechanisms=PLAIN 等。