kafka消费者会出现的一些问题和解决办法

1.消费者位移提交失败导致数据一直重复消费

 

kafka消费者会出现的一些问题和解决办法

原因:kafka的consumer消费数据时首先会从broker里读取一批消息数据进行处理,处理完成后再提交offset。而我们项目中的consumer消费能力比较低,导致取出的一批数据在session.timeout.ms时间内没有处理完成,自动提交offset失败,然后kafka会重新分配partition给消费者,消费者又重新消费之前的一批数据,又出现了消费超时,所以会造成死循环,一直消费相同的数据

方法1:将自动提交位移关闭,在项目中手动提交位移

方法2:按报错提示上说的那样,增加max_poll_interval_ms时间,减少max_poll_records数量

max_poll_interval_ms:(默认为300000,即5min)poll()使用使用者组管理时的调用之间的最大延迟 。这为消费者在获取更多记录之前可以闲置的时间量设置了上限。如果 poll()在此超时到期之前未调用,则认为使用者失败,并且该组将重新平衡以便将分区重新分配给另一个成员。

max_poll_records:(默认值:500)单次调用中返回的最大记录数poll()。

2.消费者离开消费者组:kafka消费者会出现的一些问题和解决办法

  a:一是因为消费者本身程序错误导致程序挂掉,这里不讨论

  b:还是因为消费者消费能力低下,消费者花了大量时间在处理逻辑任务上,不能及时发送心跳信号给coordinator,coordinator任务消费者能力不行或者死掉了,把它踢出了消费者组。解决方法:优化消费者的消费能力,减少消费者的任务处理时间,增加心跳时间间隔,增加session_timout_ms时间。