如果您的主题只有一个分区,则根据使用者组策略,只有一个使用者能够轮询该分区。
该 ConcurrentMessageListenerContainer 确实创造了同样多的目标 KafkaMessageListenerContainer 提供的实例 concurrency 。并且仅在它不知道主题中的分区数量的情况下才这样做。
ConcurrentMessageListenerContainer
KafkaMessageListenerContainer
concurrency
当消费者组中的重新平衡发生时,只有一个消费者获得消费分区。所有工作都是在一个线程中完成的:
private void startInvoker() { ListenerConsumer.this.invoker = new ListenerInvoker(); ListenerConsumer.this.listenerInvokerFuture = this.containerProperties.getListenerTaskExecutor() .submit(ListenerConsumer.this.invoker); }
一个分区 - 一个用于顺序记录处理的线程。