只是拉取数据,不做任何事情,为什么还会报“Maximum application poll interval (max.poll.interval.ms) exceeded”错误,是Confluent.Kafka.dll的原因吗?
参考 https://github.com/confluentinc/confluent-kafka-dotnet/issues/785 的回复:
The point of max.poll.interval.ms is to provide a heartbeat between the application and the consumer: if the application has not called poll/consume (heartbeated) in this long the application is deemed dead/stalled/stuck/malfunctional and the consumer will leave the group so the assigned partitions can be assigned to a live application instance.
max.poll.interval.ms should thus be set to the maximum (plus some) theoretical processing time.
问题解决了
1.之前公司原来的代码拿到消息后,做了业务后没有去做位移提交,而Confluent.Kafka有问题,会偶发Maximum application poll异常(我保证上次拉取消息和本次拉取消息的时间间隔绝对没有超过默认配置5分钟)
2.我最后把公司代码改成位移提交,因为是为了解决拉取消息偶发遇到Maximum application poll异常(不遇此异常的话,不做位移提交也可以),因为不做位移提交的话一旦遇到Maximum application poll异常,忽略此异常的话,再次拉取消息,就从头拉取消息了(其实我只是想从拉取失败报Maximum application poll错误的那条消息重新拉取),故此做了位移
我这边消费的是坐标定位数据,所以推送很频繁。之前使用手动提交偏移量,但是会出现消费力不足的问题。后来改成了自动提交,但是也出现 Maximum application poll interval (max.poll.interval.ms) exceeded。自动提交也会出现这个问题吗?
是的,这个问题跟是手动提交偏移量还是自动提交偏移量没有关系。
先说下这个报错是什么意思:这个报错是指你上一次拉取消息和本次拉取消息之间的时间间隔超过了kafka允许的最大的拉取消息的时间间隔(kafka里默认配置是5分钟),也就是说kafka认为你拉取消息做了大于5分钟的业务,拉到消息是要去做业务的(每家公司做的业务不同),什么业务能做5分钟呢?(做完业务才再去拉取下一条消息),所以kafka的组协调器(GroupCoordinator)就认为你这个消费者(每一个消费者都归属于一个消费者组)不给力,觉的你干活太慢了,做业务太慢了,把你这个消费者从消费者组移除出去,就报错了。
这个问题产生的原因:是咱们引入的第三方的dll(.NET里引用的是Confluent.Kafka.dll)在长时间消费过程中,判断上一次拉取消息和本次拉取消息之间的时间间隔有误(怀疑),明明没有超过5分钟,但是确判断是超过了5分钟。
请关注我的博客,我会在这两天写个博文发出来。
请查看博文https://www.cnblogs.com/menglin2010/p/17273281.html