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

session.timeout之间的差异。ms和max.poll.interval。Kafka的ms

葛意远
2023-03-14

AFAIK,max.poll.interval.ms是Kafka 0.10.1中引入的。然而,还不清楚我们什么时候可以同时使用session.timeout.ms和max.poll.interval.ms,考虑使用心跳线程没有响应的酪蛋白,但是我的处理线程由于设置了更高的值,它仍然在处理记录。但是当heartbeat线程关闭时,在越过session.timeout.ms之后,会发生什么情况。因为我在POC中观察到,消费者重新平衡直到达到max.poll.interval.ms才会发生< br >所以对我来说session.timeout.ms似乎是多余的。< br >发布了类似的问题,但它没有回答这个问题。

共有1个答案

贡建修
2023-03-14

会话超时。ms</code>用于通过心跳机制检测消费者故障。消费者心跳线程必须在session.timeout之前向代理发送心跳。ms</code>时间到期。否则,被Kafka视为死亡的消费者将被触发再平衡。

heartbeat.interval.ms:使用Kafka的组管理设施时,消费者协调器心跳之间的预期时间。心跳用于确保消费者的会话保持活动状态,并在新消费者加入或离开组时促进重新平衡。

session.timeout.ms:使用 Kafka 的组管理工具时用于检测客户端故障的超时。客户端定期发送检测信号以向代理指示其活动状态。如果代理在此会话超时到期之前未收到任何检测信号,则代理将从组中删除此客户端并启动重新平衡。

轮询是检查消费者健康状况的另一种机制。消费者应该在不过期的情况下调用轮询()方法max.poll.interval.ms。如果这个时间过期(通常长时间运行的进程会导致这个问题),消费者会再次被视为死亡并触发重新平衡。

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

其他重要的一点是(从版本 0.10.1.0 开始):

rebalance.timeout = max.poll.interval.ms

由于我们为客户提供了尽可能多的 max.poll.interval.ms 来处理一批记录,因此这也是在最坏的情况下,消费者可以期望重新加入该组的最长时间。因此,我们建议将 Java 客户机中的重新平衡超时设置为配置了 max.poll.interval.ms 的相同值。当重新平衡开始时,后台线程将继续发送检测信号。在处理完成并且用户调用 poll() 之前,使用者不会重新加入组。从协调器的角度来看,在 1) 其会话超时未收到检测信号的情况下过期,或者 2) 重新平衡超时过期之前,不会将使用者从组中删除。

因此,在你的情况下,如果 session.timeout.ms 过期时没有对使用者进行检测信号,则会在此使用者组中启动重新平衡。重新平衡启动后,使用者组中的所有使用者都被撤销,Kafka 等待仍在发送检测信号的所有使用者进行 poll() (通过轮询此时发送 joinGroupRequest 的使用者),直到重新平衡超时到期,这等于 max.poll.interval.ms

在重新平衡过程中,您仍然可以处理已存在但无法提交的消息,并使用此消息获取CommitFailedException:

无法完成提交,因为该组已经重新平衡并将分区分配给另一个成员。这意味着后续调用轮询()之间的时间比配置的max.poll.interval.ms长,这通常意味着轮询循环在消息处理上花费了太多时间。您可以通过增加会话超时或减少轮询()中返回的批次的最大大小来解决这个问题max.poll.records.

有关更多信息,请查看此。

 类似资料:
  • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

  • 我编写了一个简单的脚本,它接受任意数量的参数来演示< code>$@和< code>$*之间的区别: 在我做的 CLI 上 这就是打印出来的 因为它们是相同的,这是否意味着等于?还是我遗漏了一点?

  • 我不清楚为什么我们同时需要和以及我们何时使用其中之一或两者?这两个设置似乎都指出了协调器在假定消费者已死亡之前等待从消费者获取心跳的时间上限。 另外,它在基于KIP-62的0.10.1.0+版本中的表现如何?

  • 序列化程序的主要链接文档:https://kafka.apache.org/11/javadoc/org/apache/kafka/common/serialization/package-frame.html LongSerializer:https://kafka.apache.org/11/javadoc/org/apache/kafka/common/serialization/longS

  • 本文向大家介绍成本差异和进度差异之间的差异,包括了成本差异和进度差异之间的差异的使用技巧和注意事项,需要的朋友参考一下 对于任何应用程序或专门用于任何项目,最关注的因素之一是在开发前和开发后阶段的预算管理和时间管理。因此,要评估任何项目的这两个主要因素,有很多方法,其中成本差异和进度差异是两个重要且主要的方法。 顾名思义,“成本差异”基于项目开发中花费的成本,而“进度差异”则基于相同开发中花费的时

  • 问题内容: package main 该代码可以很好地工作。但是,如果按如下所示更改方法,则会导致死循环。区别在于将替换为。为什么? 问题答案: 因为程序包检查要打印的值是否具有方法(或换句话说:是否实现接口),如果是,则将调用它以获取值的表示形式。 软件包doc中对此进行了说明: […]如果操作数实现String()字符串方法,则将调用该方法将对象转换为字符串,然后根据动词的要求对其进行格式化(