Kafka Consumer 执行 poll 操作时获取空数据的原因分析

1. 场景:

当用户需要获取数据时,后端从指定 topic 下消费1条数据;每次操作的间隔为 0~∞

2. 现象:

每隔一段时间,在kafka消费数据时,会出现获取数据为空的情况

3. 问题排除路径:

  1. 由于 Topic 中的数据很多,不可能出现数据被取光的情况,首先怀疑是网络问题;在协调运维帮忙检查后发现,kafka运行正常,没有发现异常;
  2. 假设网络拥堵,导致 poll() 超时,那么就增大该操作的等待时间,将 consumer.poll.timeout.ms 从“100”设置为“500”,但问题仍未解决;
  3. 观察日志,发现当发生“Reblance”时,手动提交消费偏移量, 此时偏移值远远超过实际消费的数据量,当只消费了几十条数据时,此时的偏移量 offset 的值为几十万,说明中间的这些数据已经被消费过了;
  4. 是不是代码中有个线程没有关闭一直在消费数据?在检查了一遍代码后,没有发现这个异常线程;
  5. 最后,定位到问题,topic数据默认保存时间为 7 天。

4. 总结经验

  1. kafka只是一个消息队列,应该能够判断出公司的kafka对于数据不会进行持久化存储;
  2. 当得到运维给出的无异常回复后,应能够判断出不是“玄学”的网络问题,特别是在仔细检查完代码后;
  3. 对 kafka 掌握不够全面,不了解其清理过期数据的机制,导致在看到offset的“异常值”后,没有迅速判断出是过期策略的问题。

5. 遗留问题

多个topic同时消费数据,经常出现“获取数据失败”的问题。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值