当前位置:   article > 正文

Kafka没有即时消费数据 并且频繁出现自动负载均衡下线上线消费实例的现象_revoking previously assigned partitions

revoking previously assigned partitions

问题分析:

1.由于客户反馈实时监控,会出现延迟10秒左右的样子,经过排查实例日志没有发现任何报错;消费者实例所在机器不存在负载过高的情况,处理逻辑的下游和上游也没有出现性能瓶颈;

2.查看kafkaManager跟踪kafka消费实例的实时lag值;发现会循环的出现消费完全之后挤压四五百条然后又消费完全的情况,同时出现消费者实例频繁切换的情况;

3.由于没找到原因又继续 tail -f 消费者的实例的日志(每当收到数据时打印下日志)同时查看Lag值;发现每当挤压四五百条时,就会出现停止打印接收数据的日志;同时打印了其他的日志如下:

[Thread-1] WARN   - Auto offset commit failed for group kafkaLogAnalyzer: Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. This means that the time between subsequent calls to poll() was longer than the configured session.timeout.ms, which typically implies that the poll loop is spending too much time message processing. You can address this either by increasing the session timeout or by reducing the maximum size of batches returned in poll() with max.poll.records.

INFO   - Revoking previously assigned partitions [groupTest-0] for group kafkaLogAnalyzer

 4.由此日志可以知道是因为某个消费实例在一次会话超时时间内,没有处理完数据,导致自动提交偏移量失败;kafka认为该实例处理能力低则自动负载均衡下线该实例,重新选择一个消费实例,这之间会有几秒的时间是不消费数据的,当消费实例重新上线后,会把上一轮次提交失败偏移量的数据和当前新产生的数据再次拉取处理;日志也有提示设置session.timeout.ms 稍微大一点;

5.

session.timeout.ms由 30秒设置为60秒;

max.poll.records设置为2000;

代码中设置如果缓冲区当前没有数据,下次等待轮询的时间由60s拉取数据一次设置为5s拉取一次;

设置消费实例的堆内存比之前略大。

6.由第五步解决后,没有再出现自动负载均衡的现象,数据没有再出现挤压几百条的现象

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/125493
推荐阅读
相关标签
  

闽ICP备14008679号