Spring Boot Kafka Listener与Consumer

时间:2019-04-03 14:18:03

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

有什么区别?术语KafkaConsumer和KafkaListener可以互换使用吗?

1 个答案:

答案 0 :(得分:3)

@KafkaListenerConcurrentMessageListenerContainer的高级API,它在KafkaConsumer周围产生了多个内部侦听器。

不同之处在于,KafkaConsumer API在需要时调用poll()时可以按需可轮询。侦听器抽象即将在该poll()周围无限循环,并且每当它们从poll()出现时,它都会为记录生成消息。我们有一个任务执行器,它运行如下逻辑:

        while (isRunning()) {
            try {
                pollAndInvoke();
            }
            catch (@SuppressWarnings(UNUSED) WakeupException e) {
                // Ignore, we're stopping
            }
            catch (NoOffsetForPartitionException nofpe) {
                this.fatalError = true;
                ListenerConsumer.this.logger.error("No offset and no reset policy", nofpe);
                break;
            }
            catch (Exception e) {
                handleConsumerException(e);
            }
            catch (Error e) { // NOSONAR - rethrown
                Runnable runnable = KafkaMessageListenerContainer.this.emergencyStop;
                if (runnable != null) {
                    runnable.run();
                }
                this.logger.error("Stopping container due to an Error", e);
                wrapUp();
                throw e;
            }
        }

在该KafkaConsumer.poll()中调用pollAndInvoke();