Kafka Consumer WakeupException处理Java

时间:2016-06-09 13:58:33

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

如果我在线程中运行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();
}

此致 勒凯什

1 个答案:

答案 0 :(得分:0)

您可以在Confluent文档中找到一些示例,说明如何正确处理WakeupException [Confluent Consumer Doc]

基本上,如果使用consumer.poll(Integer.MAX_VALUE),则消费者将阻止,直到获取消息。在这种情况下,如果您想停止使用,可以调用consumer.wakeup()(来自其他线程)并捕获异常以正常关闭。

此外,在同步提交偏移量的同时,对consumer.wakeup()的调用会抛出WakeupException