【问题标题】:Kafka consumer hangs on poll when kafka is down当卡夫卡关闭时,卡夫卡消费者挂起投票
【发布时间】:2018-09-12 19:29:40
【问题描述】:

我一直在玩弄 Zookeeper 和 Kafka 的基本设置来学习如何使用它,但我在消费者方面遇到了麻烦。当 Kafka 不可用时,对 poll() 方法的调用会挂起,直到它重新联机。

Kafka 版本:0.10.1.0

我的代码如下所示:

KafkaConsumer<String, byte[]> consumer = new KafkaConsumer<>(props);
consumer.subscribe(topics);

while (!stopped) {
    // If by any reason Kafka is not available this call will hang
    // until Kafka is back online.
    records = consumer.poll(timeout);

    for (ConsumerRecord<String, byte[]> record : records) {
        process(record);
    }

    Thread.sleep(sleepTime);
}

我了解到,当我调用 poll() 时,消费者将无限期地尝试连接到 Kafka,直到它重新联机或直到调用 consumer.wakeup()

我希望当 Kafka 不在线时代码的行为有所不同。 从不存在的 kafka 进行轮询时,是否有任何方法可以限制消费者重试或使其失败?

【问题讨论】:

    标签: java apache-kafka kafka-consumer-api


    【解决方案1】:

    不幸的是,这仍然是一个问题。许多 Consumer 方法可以在各种场景中挂起。

    有一个 Kafka 改进建议正在进行中,KIP-266,为消费者方法添加超时以避免挂起。

    据我所知,从另一个线程调用wakeup() 是最好的解决方法


    编辑:从 Kafka 2.0.0 开始,所有消费者调用都可以接受超时。这样可以在经纪人倒闭时恢复控制权。

    【讨论】:

      猜你喜欢
      • 2016-10-22
      • 2019-07-03
      • 2018-05-05
      • 2021-08-22
      • 1970-01-01
      • 2020-10-28
      • 2015-12-18
      • 2019-03-27
      • 2017-01-07
      相关资源
      最近更新 更多