在 Ubuntu 上部署的 Kafka,常见“限流”主要有 三种场景,下面分别说明配置方式(以 Kafka 2.x / 3.x 通用为例,配置文件一般在 /opt/kafka/config/ 或 /etc/kafka/)。
在 producer 配置 中限制发送速率:
# 每秒最多发送字节数(如 1MB/s)
max.request.size=1048576
# 限制发送吞吐(配合 linger.ms)
linger.ms=50
batch.size=16384
更准确的限流可在应用代码里控制(如令牌桶)。
Consumer 本身不提供“速率限制”参数,一般做法:
max.poll.recordsmax.poll.records=500
Kafka 原生支持 配额(Quota),可限制:
编辑 server.properties:
quota.producer.default=1048576 # 1MB/s
quota.consumer.default=2097152 # 2MB/s
重启 Kafka:
sudo systemctl restart kafka
# 限制用户 appuser 生产 1MB/s
kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --add-config 'producer_byte_rate=1048576' \
--entity-type users --entity-name appuser
# 限制某 clientId 消费 2MB/s
kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --add-config 'consumer_byte_rate=2097152' \
--entity-type clients --entity-name my-consumer
查看:
kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type users
kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --add-config 'producer_byte_rate=1048576' \
--entity-type topics --entity-name my-topic
限制 9092 端口带宽(示例 5Mbps):
sudo tc qdisc add dev eth0 root tbf rate 5mbit burst 32kbit latency 400ms
⚠️ 影响所有流量,需谨慎。
iptables -A INPUT -p tcp --dport 9092 -m hashlimit \
--hashlimit-above 1mb/s -j DROP
| 场景 | 推荐方式 |
|---|---|
| 防止某用户打爆 Kafka | Broker Quota |
| 控制消费速度 | Consumer 代码限流 |
| 整体保护 | producer/consumer default quota |
| 物理隔离 | tc / 网络限速 |
如果你能说明:
我可以给你 精确配置示例。