在向Kafka
大批量发送消息后,程序不断重复消费一组数据。
笔者的kafka采用的是手动提交。
因为某些消费者没有在规定的5分钟内消费500条数据,kafka发生了重平衡,导致不断消费同一组数据。(默认情况就是要5分钟消费500条数据)。
检查日志和搜索后发现,增大max.poll.interval.ms和减少max.poll.records是个方法,我采用的是减少max.poll.records。
max.poll.interval.ms就是多长时间消费完一批数据,可以让时间长一点。
max.poll.records是每次拉取的数据量,可以减少它。
有些猜想,不过目前暂时未验证
kafka消费者批量拉取的消息,每次拉取500条,如果配置的提交缓存策略是,缓存一段时间再提交,会导致消费者即使处理完了200条,也不会马上告诉kafka代理broker,还是会继续缓存等这批数据处理完。
默认提交commit的缓存策略如下
然后kafka代理broker发现5分钟还没回复,会把该消费者剔除,把这500个数据让其他消费者消费,然后其他消费者也没有在规定时间消费完,就会不断循环。