我一直在玩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进行投票时,有没有办法限制消费者重试或使其失败?
答案 0 :(得分:4)
不幸的是,这仍然是一个问题。许多消费者方法可能会出现各种情况。
正在进行一项Kafka改进建议KIP-266,为消费者方法添加超时以避免挂起。
据我所知,从另一个线程调用wakeup()
是最好的解决方法
编辑:从Kafka 2.0.0开始,所有消费者电话都可以接受超时。这样可以在经纪人倒闭的情况下恢复控制。