Olá Aline.
Tudo bem?
Desculpa a demora, estou respondendo esse tópico para tentar ajudar você e outros alunos que estiverem com essa mesma dúvida. Valeu :)
Sim, é possível ter uma aplicação Spring Boot responsável por consumir tópicos de diferentes Kafkas. Para isso, você pode configurar múltiplos beans de KafkaListenerContainerFactory
no seu arquivo de configuração do Spring.
Cada bean pode ter suas próprias configurações específicas, como bootstrap.servers
, group.id
e outras propriedades relacionadas ao Kafka. Por exemplo, você pode ter um bean para consumir tópicos de um Kafka com uma configuração e outro bean para consumir tópicos de outro Kafka com uma configuração diferente.
Aqui está um exemplo de como você pode configurar múltiplos beans de KafkaListenerContainerFactory
no arquivo de configuração do Spring:
@Configuration
public class KafkaConfig {
@Bean
public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory1() {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory1());
return factory;
}
@Bean
public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory2() {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory2());
return factory;
}
// Configuração do consumer factory para o Kafka 1
@Bean
public ConsumerFactory<String, String> consumerFactory1() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka1:9092");
props.put(ConsumerConfig.GROUP_ID_CONFIG, "group1");
// outras configurações específicas do Kafka 1
return new DefaultKafkaConsumerFactory<>(props);
}
// Configuração do consumer factory para o Kafka 2
@Bean
public ConsumerFactory<String, String> consumerFactory2() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka2:9092");
props.put(ConsumerConfig.GROUP_ID_CONFIG, "group2");
// outras configurações específicas do Kafka 2
return new DefaultKafkaConsumerFactory<>(props);
}
}
Neste exemplo, temos dois beans de KafkaListenerContainerFactory
configurados para consumir tópicos de dois Kafkas diferentes. Cada bean tem sua própria configuração específica, como bootstrap.servers
e group.id
.
Espero que isso te ajude a configurar a sua aplicação Spring Boot para consumir tópicos de diferentes Kafkas. Se tiver mais alguma dúvida, é só me dizer.
Espero ter ajudado e bons estudos!