kafka消费堆积问题

START! 发表于: 2023-07-16   最后更新时间: 2023-07-20 23:44:32   575 游览

1、在搭建实时数据平台的时候,用到的是OGG + kafka的模式,目前阶段想先测试6张百万大表来测试效率和延迟情况。数据高峰期一般集中在每天的下午1点到4点,每张表大概会在20分钟内通过OGG同步过来60到80w的数据。因为要考虑每张表的顺序问题,因此在设计的时候,是每张表一个topic并且都是单分区。

之前在测试环境测试的时候,数据高峰期也是1点到4点,数据量大概40w到60w,有出现1张表的消费延迟但是基本没出现过数据堆积的问题,但是最近把代码部署到准生产环境后,前3天正常,未出现消费延迟和堆积的问题,但是到了第四天,发现有张表数据消费不动了堆积了很严重,然后就发现消费速率下降了,其他表也都出现不同程度的堆积,并且每天都越堆积越多,给人感觉是消费不动,求帮助这个怎么解决。

2、测试环境配置,单机,2core8G,准生产,双机(1台机子2个brokers,另一个一个broker),4core,8G

3、在第四天发现数据堆积的时候,堆积了12个小时的时候,程序有报一个 ,poll() expired,please reduce max.poll.records or improve max.poll.interval.ms,所以我就增加了max.poll.interval.ms后重启了程序,结果触发了rebalance,然后消费依旧很慢而且感觉越来越慢。

发表于 2023-07-16
添加评论

你触发rebalance,说明你拉取消息之后,处理的时间超过了max.poll.interval.ms默认30秒。
那么你消费慢的原因是你处理速度跟不上

想测试以上的推论很简单,你拉取到消息之后,什么都不要处理,看看是否稳定。

你消费越来越慢,也是因为你的处理写的有问题,可以想象一下,kafka一次把1000~2000条消息一次性的拉取过来了,这个时候你在处理的时候,超过了30秒,所以触发了rebalance,你加大max.poll.interval.ms只会缓解这个症状(参考:https://www.orchome.com/6742)。

所以,总结下来,就是你处理的速度跟不上,想要根治并且报障安全的话:

  1. 并发处理kafka一次性1000~2000条消息(30秒内,保证不触发rebalance)。
  2. 在处理掉1000~2000之前,不能去pull新的消息,所以必须是阻塞式的。
你的答案

查看kafka相关的其他问题或提一个您自己的问题