岀现“活锁”的情况,是它持续的发送心跳,但是没有处理。为了预防消费者在这种 情况下一直持有分区,我们使用max.poll.interval.ms活跃检测机制。在此基础 上,如果你调用的poll的频率大于最大间隔,则客户端将主动地离开组,以便其 他消费者接管该分区。发生这种情况时,你会看到offset提交失败。这是一种安 全机制,保障只有活动成员能够提交offsets所以要留在组中,你必须持续调用 polL
消费者提供两个配置设置来控制poll循环: max.poll.interval.ms:増大poll的间隔,可以为消费者提供更多的时间去处理返回 的消息(调用pollQong)返回的消息,通常返回的消息都是一批)。缺点是此值越 大将会延迟组重新平衡。
max.poll.records:此设置限制每次调用poll返回的消息数,这样可以更容易的预 测 W poll间隔要处理的最大值。通过调整此值,可以减少poll间隔,减少重新 平衡分组的
对于消息处理时间不可预测地的情况,这些选项是不够的。处理这种情况的推荐 方法是将消息处理移到另一个进程中,让消费者继续调用poll。但是必须注意确 保已提交的offset不超过实际位置。另外,你必须禁用自动提交,并只有在进程完 成处理后才为记录手动提交偏移量(取决于你)。还要注意,你需要pause暂停 分区,不会从poll接收到新消息,让进程处理完之前返回的消息(如果你的处理 能力比拉取消息的慢,那创建新进程将导致你机器内存溢岀)。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。