当卡夫卡失败时,卡夫卡的消费者依此坚持投票

时间:2018-05-10 08:27:17

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

我一直在玩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进行投票时,有没有办法限制消费者重试或使其失败?

1 个答案:

答案 0 :(得分:4)

不幸的是,这仍然是一个问题。许多消费者方法可能会出现各种情况。

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

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

编辑:从Kafka 2.0.0开始,所有消费者电话都可以接受超时。这样可以在经纪人倒闭的情况下恢复控制。