🧐 O que é? Qual o uso?

O Apache Kafka é uma plataforma de mensageria distribuída, open source, projetada para alta capacidade de envio e processamento de mensagens. Possui alta tolerância a falhas e é utilizada por grandes empresas que enfrentam desafios com grandes volumes de dados.

🛠️ Exemplo: Criando uma aplicação Spring Boot com Spring Kafka

Veja um passo a passo básico para criar uma aplicação simples usando Spring Boot e Spring Kafka:

1️⃣ Adicione as dependências no build.gradle:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.kafka:spring-kafka'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

2️⃣ Configure o Kafka no application.yml:

spring:
  kafka:
    bootstrap-servers: localhost:9092
    consumer:
      group-id: exemplo-grupo
      auto-offset-reset: earliest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer

Explicação das propriedades:

  • bootstrap-servers: Endereço do(s) servidor(es) Kafka a serem conectados.
  • consumer.group-id: Identifica o grupo de consumidores (permite balanceamento de carga).
  • consumer.auto-offset-reset: Define o que fazer se não houver offset salvo (ex: “earliest” começa do início).
  • consumer.key-deserializer e consumer.value-deserializer: Classes responsáveis por transformar os bytes recebidos em objetos Java.
  • producer.key-serializer e producer.value-serializer: Classes responsáveis por transformar objetos Java em bytes para envio

3️⃣ Exemplo de Producer (publicador):

// ProducerService.java
@Service
public class ProducerService {
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    public void sendMessage(String topic, String message) {
        kafkaTemplate.send(topic, message);
    }
}

Este é um exemplo de Produtor, que envia mensagens para um tópico Kafka. O KafkaTemplate é usado para enviar mensagens de forma assíncrona.

4️⃣ Exemplo de Consumer (assinante):

// ConsumerService.java
@Service
public class ConsumerService {
    @KafkaListener(topics = "meu-topico", groupId = "exemplo-grupo")
    public void listen(String message) {
        System.out.println("Mensagem recebida: " + message);
    }
}

Este é um exemplo de Consumidor, que escuta mensagens de um tópico específico. O método listen será chamado sempre que uma nova mensagem for recebida.

Servidor Kafka

Para rodar o Kafka localmente, você pode usar o Docker. Lembre-se de iniciar o Kafka localmente antes de rodar a aplicação.

🔗 Mais informações

🎥 Vídeos

Para começar, vale assistir a este material do O Hipsters ponto Tube.
É um conteúdo compacto e muito interessante:

Para complementar, assista também ao vídeo do Código Fonte TV!
Ele tem 11 minutos e traz um resumo muito bem pensado sobre o Kafka: