apache-kafka - 卡夫卡消费者 session 超时

标签 apache-kafka kafka-consumer-api

我们有一个应用程序,使用者可以读取一条消息,并且线程可以执行许多操作,包括在将消息生成到另一个主题之前进行数据库访问。在线程上消费和产生消息之间的时间可能要花费几分钟。一旦消息产生到新主题,就进行一次提交以指示我们已经完成了对使用者队列消息的处理。因此,自动提交被禁用。

我正在使用高级消费者,但我注意到的是zookeeper和kafka session 超时,因为我们在消费者队列上做任何事情都花了太长时间,因此每次线程返回以从消费者那里读取更多信息时,kafka最终都会重新平衡。排队,并且一段时间之后,消费者开始阅读新消息。

我可以将Zookeeper session 超时设置得很高,以免造成问题,但是随后我必须相应地调整重新平衡参数,并且kafka暂时不会吸引新用户。

我有什么解决这个问题的选择?有没有办法让卡夫卡和动物园管理员保持心跳愉快?如果我要使用简单的消费者,我还会遇到同样的问题吗?

最佳答案

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

使用kafka简单使用者,您可以控制何时以及如何进行偏移存储。您甚至可以将偏移量持久化到Zookeeper以外的其他位置(例如,数据库)。

坏消息是,虽然简单使用者本身比高级使用者更简单,但要使其正常工作,您还需要做很多工作。您还必须编写代码来访问多个分区-高级用户为您做的很好。

关于apache-kafka - 卡夫卡消费者 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27576067/

相关文章:

java - Kafka Utils 类路径错误 : org. apache.kafka.common.utils.Utils

elasticsearch - 使用 Elastic Search 对 Hyperledger Fabric CouchDB 数据进行自由文本搜索

java - 'exactly once' 是否仅适用于流(主题 1 -> 应用程序 -> 主题 2)?

apache-kafka - Kafka 无法访问该文件,因为它正在被另一个进程使用

apache-spark - 具有相同 groupId 的多个 Spark Kafka 消费者

python-3.x - kafka-python使用者开始从偏移量开始读取(自动)

python - 如何在程序中停止 Python Kafka Consumer?

apache-kafka - Kafka Streams - kafka-streams-application-reset.sh 发送错误的 API 版本

apache-kafka - kafka-consumer-groups CLI 未显示 node-kafka 消费者组

java - 卡夫卡消费者没有收到旧消息