Я использую весеннюю загрузку 2.1.7.RELEASE и spring-kafka 2.2.7.RELEASE. И я использую аннотацию @KafkaListener для создания потребителя, и я использую все настройки по умолчанию для потребителя.
Вот моя конфигурация потребителя:
@Configuration
@EnableKafka
public class KafkaConsumerCommonConfig implements KafkaListenerConfigurer {
@Bean
public <K,V> ConcurrentKafkaListenerContainerFactory<String, Object> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, Object> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(primaryConsumerFactory());
factory.getContainerProperties().setMissingTopicsFatal(false);
return factory;
}
@Bean
public DefaultKafkaConsumerFactory<Object, Object> primaryConsumerFactory() {
return new DefaultKafkaConsumerFactory<>(sapphireKafkaConsumerConfig.getConfigs());
}
}
По некоторым причинам у меня есть несколько потребителей в одном приложении, как показано ниже.
@KafkaListener(topics = "TEST_TOPIC1")
public void consumer1(){
}
@KafkaListener(topics = "TEST_TOPIC2")
public void consumer2(){
}
@KafkaListener(topics = "TEST_TOPIC3")
public void consumer3(){
}
С учетом сказанного, согласно документу «Безопасность потребительских потоков»
Вы не можете иметь несколько потребителей, принадлежащих к одной группе, в одном потоке, и вы не можете иметь несколько потоков, безопасно использующих одного и того же потребителя. Один потребитель на поток - это правило. Чтобы запустить несколько потребителей в одной и той же группе в одном приложении, вам нужно будет запустить каждого из них в отдельном потоке. Полезно обернуть логи потребителя c в свой собственный объект, а затем использовать ExecutorService в Java для запуска нескольких потоков, каждый со своим собственным потребителем.
Теперь мой вопрос, должен ли я что-то делать дополнительные при использовании приведенного выше кода с использованием Spring-Kafka для решения этого сценария или не имеет значения, потому что группа будет генерироваться случайным образом, как я не указал? Пожалуйста, предложите.