gpt4 book ai didi

java - 优雅地关闭具有静态成员身份的 Kafka Consumer

转载 作者:行者123 更新时间:2023-12-05 04:25:32 27 4
gpt4 key购买 nike

给定一个 具有静态成员资格 的 Kafka 消费者,优雅关闭它的最佳做法是什么?

来自 Kafka - 权威指南:通过调用 .close()

Always close() the consumer before exiting. This will close thenetwork connections and sockets. It will also trigger a rebalanceimmediately rather than wait for the group coordinator to discoverthat the consumer stopped sending heartbeats and is likely dead, whichwill take longer and therefore result in a longer period of time inwhich consumers can’t consume messages from a subset of thepartitions.

所以如果使用静态成员资格,close() 并不是我们真正想要的。如果它关闭网络套接字但不会导致重新平衡,也许是一个调整版本?

另一件需要注意的事情是取消订阅不会导致重新平衡。

我真的很想知道其他人如何想象这种特殊情况下的关闭机制。

最佳答案

不确定您所追求的特殊情况是什么,您可以将其包含在您的笔记中。此外,您希望在运行时关闭消费者多长时间。

如果你使用的是static membership,消费者组不会触发再平衡,除非

  • 新成员加入
  • 领导者重新加入(可能是由于主题分配更改)
  • 现有成员(member)离线时间已超过 session 超时
  • Broker 收到包含 group.instance.ids 列表的离开组请求

当你设置一个消费者为静态成员时,当他们下线时它不会发送离开组请求(在你的情况下为特殊情况关闭),这意味着我们将只依赖session.timeout 触发组重新平衡。因此,也建议将session超时设置得足够大,以免broker端因成员(member)来来去去而过于频繁地触发rebalance。

我相信,close() 在这里会过时。

此外,重要的是我们如何处理运行时异常情况(套接字超时、max.poll.interval 已过、代理领导者不可用等),无论是静态成员还是动态成员,以及消费者何时到达最终 block 状态.

finally
{
consumer.close();
}

关于java - 优雅地关闭具有静态成员身份的 Kafka Consumer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73221858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com