【问题标题】:kafka consumer polling timeoutkafka消费者轮询超时
【发布时间】:2016-12-08 10:55:51
【问题描述】:

我正在使用 Kafka 并尝试从中获取数据。从下面一行,我可以轮询来自 Kafka 的数据。

  while (true) {
    ConsumerRecords<byte[], <byte[]> records = consumer.poll(Long.MAX_VALUE);
    for (ConsumerRecord<byte[], <byte[]> record : records) {
        // retrieve data
    }
  }

我的问题是,与提供200 作为超时相比,提供Long.MAX_VALUE 作为超时有什么好处。将运行生产的系统的最佳实践是什么。

谁能解释一下高超时和低超时的区别,哪些应该在生产系统中使用?

【问题讨论】:

    标签: java apache-kafka


    【解决方案1】:

    设置 MAX_VALUE 是一种同步消息消耗,永远等待直到我们从轮询中返回一些东西,而设置为较低的值让您有机会决定做其他事情而不是等待。应该使用哪个取决于您的实际情况。

    【讨论】:

    • 感谢您的解释。如果我们设置一个较低的值而不是等待,我们可以做什么?我想不出任何情况。如果我们设置一个较低的超时值,你能帮我理解在生产系统中我们可以做什么或应该做什么吗?你有什么推荐的?
    • 如果您想使用标志从循环中中断,或者只是在循环外执行一些周期性任务。 KafkaConsumer 提供了唤醒方法来中断消费者线程,因此实际上即使使用长轮询超时,您仍然可以实现这一点。
    • 是的,但我的问题是人们会做什么而不是等待长时间的超时?有没有人做事的情况?
    • 如果您在消息消费期间没有任何周期性任务要执行,那么设置任何不那么重要的值。
    • 我明白了,如果我将超时设置为 Long.MAX_VALUE 那么我应该关注的卡夫卡或消费者代码没有问题,而不是它会永远等待获取数据?对吗?
    猜你喜欢
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多