如果我在线程中运行kafka
消费者而不从外部操纵它,比如让消费者处于睡眠状态或唤醒他,那么有必要正确处理WakeupException
吗?什么是处理它的好方法?
消费者正在网络服务上运行,以便不断地将数据从队列中拉出来,并且永远不要停止这样做。此外,该服务没有空闲或暂停状态。在Kafka的文档中指出,只有当kafka使用者被另一个线程阻塞时才抛出异常,但这种情况永远不会发生。 https://kafka.apache.org/0100/javadoc/org/apache/kafka/common/errors/WakeupException.html
Kafka版本0.10.0.0
catch (WakeupException e) {
LOG.info("Kafka Consulmer wakeup exception");
// Ignore exception if closing
if (!closed.get()) {
throw e;
}
} finally {
consumer.close();
}
此致 勒凯什
答案 0 :(得分:0)
您可以在Confluent文档中找到一些示例,说明如何正确处理WakeupException [Confluent Consumer Doc]
基本上,如果使用consumer.poll(Integer.MAX_VALUE)
,则消费者将阻止,直到获取消息。在这种情况下,如果您想停止使用,可以调用consumer.wakeup()
(来自其他线程)并捕获异常以正常关闭。
此外,在同步提交偏移量的同时,对consumer.wakeup()
的调用会抛出WakeupException
。