在 Ubuntu 上配置 Kafka 限流(流量控制),通常可以从 Broker 级限流、Producer/Consumer 级限流、Topic 级限流、以及操作系统/网络层限流 几个维度来做。下面按常见场景说明。
Kafka 自带 配额(Quota) 机制,用于限制生产/消费速率。
编辑 Kafka 配置文件(通常是 /etc/kafka/server.properties 或 $KAFKA_HOME/config/server.properties):
# 开启配额
quota.producer.default=1048576 # 1MB/s
quota.consumer.default=2097152 # 2MB/s
或修改后重启 Kafka:
sudo systemctl restart kafka
# 限制某个 client.id 的生产速率为 1MB/s
kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --add-config 'producer_byte_rate=1048576' \
--entity-type clients --entity-name my-client-id
# 限制某个 consumer group 的消费速率
kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --add-config 'consumer_byte_rate=2097152' \
--entity-type groups --entity-name my-group
查看:
kafka-configs.sh --bootstrap-server localhost:9092 --describe \
--entity-type clients --entity-name my-client-id
kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --add-config 'producer_byte_rate=1048576' \
--entity-type topics --entity-name my-topic
# server.properties
leader.replication.throttled.rate=1048576
follower.replication.throttled.rate=1048576
或在 reassign 时指定:
kafka-reassign-partitions.sh ... --throttle 1048576
Java 示例(令牌桶思路):
// 简单 sleep 控制
if (sentBytes > 1_000_000) {
Thread.sleep(1000);
}
或使用:
linger.ms + batch.sizeconsumer.poll(Duration.ofMillis(100));
// 控制 poll 频率
sudo tc qdisc add dev eth0 root tbf \
rate 10mbit burst 32kbit latency 400ms
查看:
tc qdisc show dev eth0
删除:
sudo tc qdisc del dev eth0 root
| 场景 | 推荐方式 |
|---|---|
| 防止某个客户端打满 | client quota |
| 防止副本同步影响业务 | replication throttle |
| 多租户隔离 | user / client quota |
| 整体机器带宽保护 | tc |
如果你能说明:
我可以给你更精确的配置示例。