在 Ubuntu 上部署的 Kafka,限流通常分为 Broker 级限流、Topic 级限流、Producer/Consumer 级限流 以及 网络/系统级限流。下面按常见场景给你一套实用方案。
Kafka 支持通过 Quota(配额) 限制客户端流量。
kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --add-config 'producer_byte_rate=1048576' \
--entity-type clients --entity-name producer-app
限制为 1MB/s(1048576 字节)
kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --add-config 'consumer_byte_rate=2097152' \
--entity-type clients --entity-name consumer-app
kafka-configs.sh --bootstrap-server localhost:9092 \
--describe --entity-type clients
✅ 优点:不影响业务代码
❌ 缺点:基于 client.id / user
kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --add-config 'leader.replication.throttled.rate=1048576' \
--entity-type topics --entity-name my-topic
用于:
kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --add-config 'follower.replication.throttled.rate=1048576' \
--entity-type brokers --entity-default
常用于:
编辑 server.properties:
# 单个 client 默认限流
quota.producer.default=1048576
quota.consumer.default=1048576
重启 Kafka:
systemctl restart kafka
props.put("linger.ms", 100);
props.put("batch.size", 16384);
props.put("max.in.flight.requests.per.connection", 1);
props.put("max.poll.records", 100);
props.put("fetch.max.bytes", 1048576);
适合:
限制 Kafka 端口(9092)带宽:
sudo tc qdisc add dev eth0 root tbf \
rate 10mbit burst 32kbit latency 400ms
✅ 简单粗暴
❌ 不区分 topic / client
iptables -A INPUT -p tcp --dport 9092 \
-m hashlimit --hashlimit-above 1mb/s \
--hashlimit-mode srcip --hashlimit-name kafka \
-j DROP
| 场景 | 推荐方案 |
|---|---|
| 防止某个消费者打满带宽 | Kafka Quota |
| 集群迁移 | Replication Throttle |
| 多租户隔离 | user + quota |
| 容器 / 云环境 | tc / 网络策略 |
| 精确控制 | 应用层限流 |
如果你能告诉我:
我可以给你 更精准的配置示例。