当前位置: 首页 > 知识库问答 >
问题:

Spring-Kafka:消费者群体再平衡对状态重试的影响

广晔
2023-03-14

如果将SeekToCurrentErrorHandler与有状态重试一起使用,以便每次重试都从代理轮询消息,则存在消费者组重新平衡的长重试周期可能导致分区被重新分配给另一个消费者的风险。因此,有状态重试周期/尝试将被重置,因为新消费者不知道重试的状态。

举个例子,如果重试最长期限是24小时,但消费者组重新平衡平均每12小时发生一次,则重试永远无法完成,一旦超过保留期限,消息(及其背后的消息)最终将从主题中过期。(假设在此时间内未解决可重试异常的原因)。消息不会像预期的那样在24小时后到达DLT,因为重试不会因重置而用尽。

我假设,即使消费者通过重新轮询消息来重试,也不能保证在重新平衡之后,该消费者将保留对该分区的分配。或者,我们是否可以确信,只要这个消费者实例还活着,它通常会保留对它正在轮询的分区的分配?

是否有使用有状态重试的最佳实践/指南来满足这一要求?

无状态重试意味着任何超过轮询超时的总重试时间都将导致重新平衡和重复消息传递。为了避免这种情况,重试周期必须非常有限。或者允许这样做的指导方针是确保消费者消重消息,以便可以接受重复消息并配置长时间运行的无状态重试?

使用重试主题是否是启用几个小时的重试期(例如,为了满足在此期间不可用的服务)的唯一安全稳定的选项?

谢谢,罗布。

共有1个答案

季城
2023-03-14

有状态重试的全部目的是避免重新平衡;如果没有它,消费者将被延迟到所有重试尝试延迟的总和。

但是,侦听器适配器中的重试(包括有状态重试)现在已被否决,因为错误处理程序现在可以做< code>RetryTemplate可以做的一切事情(后退、异常分类等)。

对于有状态重试(或错误处理程序中的回退),最长的回退必须小于max.poll.interval.ms

坦率地说,24小时的退让是荒谬的——最好停止集装箱,一天后重新启动。

 类似资料:
  • 当一个组中只有一个消费者,并且认为消费者无法在session.time.out内进行轮询时,将触发重新平衡,但是在这种情况下,组中只有一个消费者,现在假设session.time.out是30秒和消费者民意调查后50秒组协调员将识别消费者后50秒,并允许它提交偏移或协调员将断开消费者和没有偏移得到提交,并将重新平衡消费者与新的消费者标识?如果上次提交的偏移量是345678,在下一次轮询中,它处理了

  • 有人能告诉我Kafka消费者的再平衡算法是什么吗?我想了解分区计数和消费者线程是如何影响这一点的。 非常感谢。

  • kafka机器作为hortonworks包的一部分安装,版本为0.1X 我们运行应用程序,使用主题中的数据 在最后几天,我们看到我们的应用程序--失败了,我们开始寻找根本原因 在集群中,我们看到以下行为 从侧集群是健康的,所有的主题都是平衡的,所有的kafka经纪人都正确地向zooManager签名 一段时间后(几个小时),我们再次运行以下内容,但没有错误- 我们得到以下正确的结果 所以我们想了解

  • 我有一个Kafka流应用程序,它从几个主题中获取数据,并将数据加入另一个主题。 Kafka配置: 注意:我在运行Kafka Brokers的机器上运行Kafka Streams应用程序。 每小时消耗/产生数百万条记录。每当我让Kafka经纪人倒下时,都会进入再平衡阶段,再平衡大约需要30分钟,有时甚至更长时间。 有人知道如何解决Kafka消费者的再平衡问题吗?而且,很多时候,它在重新平衡时抛出异常

  • 我们正在运行一个3 broker Kafka 0.10.0.1集群。我们有一个java应用程序,它产生了许多消费线程,从不同的主题消费。对于每一个主题,我们都指定了不同的消费者群体。 很多时候,我看到每当这个应用程序重新启动时,一个或多个CG需要超过5分钟来接收分区分配。在此之前,这个话题的消费者不会消费任何东西。如果我去Kafka broker并运行Consumer-Groups.sh并描述特定

  • 在消费者重新平衡期间如何确保消息排序。假设最初我们有四个分区:p1、p2、p3、p4和两个消费者c1和c2(在同一组中)。因此每个消费者得到两个分区,例如c1 : p1,p2和c2 : p3,p4。 现在添加了新的消费者,比如c3和c4,重新平衡发生,这样每个消费者都有一个分区,比如c1: p1、c2: p2、c3: p3、c4: p4。 在此期间,消费者c1可能正在处理来自分区p2的消息(在重新