Java 当卡夫卡倒台时,卡夫卡消费者仍在等待投票

Java 当卡夫卡倒台时,卡夫卡消费者仍在等待投票,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,我一直在玩Zookeeper和Kafka的基本设置来学习如何使用它,但我在消费者方面遇到了麻烦。当Kafka不可用时,对poll()方法的调用将挂起,直到它重新联机 卡夫卡版本:0.10.1.0 我的代码如下所示: KafkaConsumer<String, byte[]> consumer = new KafkaConsumer<>(props); consumer.subscribe(topics); while (!stopped) { // If by

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

卡夫卡版本: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);
}
KafkaConsumer消费者=新的KafkaConsumer(道具);
消费者。订阅(主题);
当(!停止){
//如果由于任何原因卡夫卡不可用,此呼叫将挂起
//直到卡夫卡重新上线。
记录=消费者轮询(超时);
对于(消费者记录:记录){
过程(记录);
}
睡眠(睡眠时间);
}
我已经了解到,当我调用
poll()
时,消费者将尝试无限期地连接到卡夫卡,直到它重新联机或调用
consumer.wakeup()


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

不幸的是,这仍然是一个问题。许多消费者方法可以适用于各种场景

有一个卡夫卡改进方案正在进行中,向使用者方法添加超时以避免挂起

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


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