Apache kafka Spring Boot Kafka Listener vs Consumer

Apache kafka Spring Boot Kafka Listener vs Consumer,apache-kafka,kafka-consumer-api,spring-kafka,Apache Kafka,Kafka Consumer Api,Spring Kafka,有什么区别?术语KafkanConsumer和KafkaListener可以互换使用吗?@KafkaListener是ConcurrentMessageListenerContainer的高级API,它在KafkanConsumer周围生成了几个内部侦听器 不同之处在于,KafkaConsumerAPI在需要时调用其poll()时可以按需进行轮询。侦听器抽象将在poll()周围有一个无限循环,并且每当记录出现在poll()中时,它都会为记录生成消息。我们有一个任务执行器,它运行如下逻辑:

有什么区别?术语KafkanConsumer和KafkaListener可以互换使用吗?
@KafkaListener
ConcurrentMessageListenerContainer
的高级API,它在
KafkanConsumer
周围生成了几个内部侦听器

不同之处在于,
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;
            }
        }

pollAndInvoke()中调用
KafkaConsumer.poll()

它们在Java代码中不可互换。KafkaConsumer是Kafka客户端库中的一个类,它为应用程序提供接收消息的API。KafkaListener是一个应用于方法的注释,因此Spring Kafka将调用它来处理消息。那么每个函数都做什么呢?当我将属性
Spring.Kafka.listener.concurrency
设置为4时,将实例化4个使用者,还是4个侦听器?侦听器对于所有使用者都是相同的。它是无状态的,因此不产生更多侦听器是完全正确的。并发性完全取决于您将从侦听器的主题配置中获得的分区数量。因此,如果最终只有一个分区,那么并发配置就无关紧要了。