在 Debian 上部署的 Kafka(通常跑在 JVM 上,使用 systemd 或脚本启动),Kafka 本身没有像 Nginx 那样的“带宽限流”参数,限流一般通过以下几种方式实现。下面按「常用程度」给你讲清楚。
在 producer.properties 或代码中设置:
# 每秒最多发送 1MB
linger.ms=50
batch.size=16384
max.request.size=1048576
# 限制发送速率(字节/秒)
# Kafka 2.4+ 支持
delivery.timeout.ms=120000
更常见的是在应用层限流(如 Guava RateLimiter)。
# 每次拉取最大数据量
max.poll.records=500
# 拉取大小限制
fetch.max.bytes=52428800
消费端限流主要靠:
max.poll.recordsKafka 支持 用户 / clientId 级别限流
kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter \
--add-config 'producer_byte_rate=1048576' \
--entity-type clients \
--entity-name my-client
限制
my-client每秒最多 1MB
kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter \
--add-config 'consumer_byte_rate=2097152' \
--entity-type clients \
--entity-name my-client
kafka-configs.sh \
--bootstrap-server localhost:9092 \
--describe \
--entity-type clients
✅ 这是 Kafka 官方最标准的限流方式
kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter \
--add-config 'retention.bytes=1073741824' \
--entity-type topics \
--entity-name my-topic
一般是容量限制,不是速率限流。
如果你是想限制 Kafka 占用的带宽,可以用 tc
# 限制 9092 端口为 10Mbps
tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms
⚠️ 影响所有流量,不区分 topic / client
如果是 systemd:
systemctl edit kafka
可以加:
[Service]
LimitNOFILE=100000
但限流不在这里做。
| 场景 | 推荐方式 |
|---|---|
| 控制某客户端速度 | ✅ Kafka Quota |
| 控制消费速度 | ✅ max.poll.records |
| 控制带宽 | ⚠️ tc |
| 防止雪崩 | ✅ 应用层限流 |
如果你愿意,可以告诉我:
我可以直接给你可复制的命令。