【问题标题】:kafka consumer sessions timing outkafka 消费者会话超时
【发布时间】:2015-02-18 23:32:30
【问题描述】:

我们有一个应用程序,消费者读取消息,线程执行许多操作,包括在向另一个主题生成消息之前访问数据库。在线程上消费和产生消息之间的时间可能需要几分钟。一旦为新主题生成消息,就会完成提交以指示我们已完成对消费者队列消息的工作。由于这个原因,自动提交被禁用。

我正在使用高级消费者,我注意到 zookeeper 和 kafka 会话超时,因为我们在消费者队列上执行任何操作需要很长时间,所以每次线程返回读取时,kafka 最终都会重新平衡更多来自消费者队列,一段时间后消费者开始阅读新消息需要很长时间。

我可以将 zookeeper 会话超时设置得非常高,以免造成问题,但随后我必须相应地调整重新平衡参数,并且 kafka 在一段时间内不会接收新的消费者以及其他副作用。

我有什么办法来解决这个问题?有没有办法让 kafka 和 zookeeper 心跳,让双方都开心?如果我使用一个简单的消费者,我还会遇到同样的问题吗?

【问题讨论】:

  • 如果您只是解释您的问题,您更有可能获得帮助。说你“想得到一些反馈”可能会让你的问题结束。 Stack Overflow 不是论坛;我们重视简明扼要。

标签: apache-kafka kafka-consumer-api


【解决方案1】:

听起来您的问题归结为依靠高级消费者来管理上次读取的偏移量。使用简单的消费者可以解决这个问题,因为您控制了该偏移的持久性。请注意,所有高级消费者提交所做的只是将上次读取的偏移量存储在 zookeeper 中。没有采取任何其他操作,您刚刚阅读的消息仍在分区中,并且可供其他消费者阅读。

使用 kafka 简单消费者,您可以更好地控制偏移存储的发生时间和方式。您甚至可以在 Zookeeper 以外的其他地方(例如数据库)保留该偏移量。

坏消息是,虽然简单消费者本身比高级消费者更简单,但您还需要在代码方面做很多工作才能使其正常工作。您还必须编写代码来访问多个分区 - 高级消费者非常适合您。

【讨论】:

  • 嗨,我也面临同样的问题,但在新的 kafka 版本中,简单的消费者被贬低了。现在怎么办?
【解决方案2】:

我认为问题是消费者的轮询方法触发消费者的心跳请求。当你增加 session.timeout 时。消费者的心跳不会到达协调者。由于这个心跳跳过,协调器标记消费者死亡。而且消费者重新加入的速度非常慢,尤其是在单一消费者的情况下。

我遇到了类似的问题,为了解决我必须在消费者配置属性中更改以下参数

session.timeout.ms= request.timeout.ms=超过会话超时时间

您还必须在 kafka 代理节点的 server.properties 中添加以下属性。 group.max.session.timeout.ms =

您可以查看以下链接了解更多详情。 http://grokbase.com/t/kafka/users/16324waa50/session-timeout-ms-limit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 2022-10-15
    • 2019-07-12
    • 2019-07-01
    • 2023-03-03
    相关资源
    最近更新 更多