Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Aplicação Spring Boot para consumo de topicos de Kafkas diferentes

Boa noite,

É possível ter uma Aplicação Spring Boot responsável por fazer o consumo de tópicos de diferentes Kafkas ? ( nesse caso cada um teria suas configurações especificas tipo bootstrap.servers ,group.id e etc). Alguem teria um exemplo ou uma orientação de como fazer?

2 respostas
solução!

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!

Obrigada!