数据推送限流操作

// 1. 引入 Guava
import com.google.common.util.concurrent.RateLimiter;

// 2. 在类中加上
private static final RateLimiter rateLimiter = RateLimiter.create(20000.0 / 3600.0); // 每秒约5.55条

// 3. 在每次发送前加
rateLimiter.acquire();
KafkaHelper.javaKafkaProducer("topic", message.getValue());

 

这样做的效果

  • 每秒最多发送约5.55条消息,累计下来每小时不会超过2万条。
  • rateLimiter.acquire() 会自动阻塞,保证速率不会超标。
  • 这种方式简单、线程安全,适合绝大多数单实例 Producer 场景。

注意事项

  • 如果你的 Producer 是多实例/多进程,每个实例都要加同样的限流,否则总量会超出2万条/小时。
  • 如果你有分布式限流需求,需要用 Redis 等外部限流器。

你的场景是多线程推送 Kafka,这种情况下用 Guava 的 RateLimiter 依然适用,但有几点需要注意:


1. Guava RateLimiter 是线程安全的

  • 你只需要定义一个静态的 RateLimiter 实例,所有线程共享它即可。
  • 每个线程在发送前都调用 rateLimiter.acquire(),RateLimiter 会自动保证全局速率不超过设定值。

  • 多线程推送时,只要所有线程共享同一个 RateLimiter 实例即可。
  • 这样无论多少线程并发,整体速率都不会超过你设定的阈值(每小时2万条)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XF鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值