Visão Geral
Curso Kafka Using Spring Boot. Este curso prático é projetado para desenvolvedores Java, arquitetos de software e engenheiros de backend que desejam construir aplicações escaláveis e resilientes orientadas a eventos utilizando o Apache Kafka em conjunto com o Spring Boot. Do ponto de vista técnico, você aprenderá a configurar projetos Spring Boot para interagir com Kafka, implementando produtores e consumidores de mensagens de forma eficiente e robusta. Cobriremos tópicos essenciais como a configuração de KafkaTemplate
para envio de mensagens, o uso da anotação @KafkaListener
para consumo, tratamento de diferentes formatos de serialização/deserialização (incluindo JSON e Avro com Schema Registry), estratégias de tratamento de erros, transações e testes. O curso terá um forte foco em exemplos de código e laboratórios práticos, capacitando os participantes a desenvolver microsserviços e sistemas de processamento de dados em tempo real.
Curso Kafka Using Spring Boot, a habilidade de integrar Apache Kafka com Spring Boot é um diferencial enorme para empresas que buscam construir arquiteturas de microsserviços e sistemas orientados a eventos. Isso permite desenvolver aplicações mais rapidamente, reduzir a complexidade de integração, garantir alta disponibilidade e escalabilidade, e otimizar a comunicação entre serviços. Ao dominar essa combinação, as organizações podem acelerar a entrega de funcionalidades, melhorar a resiliência de seus sistemas e inovar em soluções de dados em tempo real. Profissionais com essa expertise são altamente valorizados no mercado, impulsionando a eficiência e a competitividade tecnológica.
Conteúdo Programatico
Módulo 1: Fundamentos e Configuração do Ambiente (3 horas)
- 1.1. Introdução ao Spring Boot e Kafka:
- Por que usar Spring Boot com Kafka? Benefícios da auto-configuração e abstrações.
- Arquitetura de uma aplicação Spring Boot Kafka.
- 1.2. Configuração do Ambiente de Desenvolvimento:
- Iniciando um projeto Spring Boot com dependências Kafka via Spring Initializr.
- Configurando um ambiente Kafka local com Docker Compose (Kafka, ZooKeeper, Kafka UI/Control Center).
- Configurações básicas do Kafka no
application.yml
(bootstrap servers).
- 1.3. Conceitos Essenciais do Spring for Apache Kafka:
KafkaTemplate
: a interface principal para envio de mensagens.
@KafkaListener
: a anotação para criar consumidores.
- Auto-configuração de fábrica de produtores e consumidores.
- Prática: Criar um novo projeto Spring Boot. Configurar o Docker Compose para subir um cluster Kafka local. Configurar o
application.yml
para conexão inicial e testar a conexão.
Módulo 2: Implementando Produtores Kafka com Spring Boot (5 horas)
- 2.1. Enviando Mensagens Simples:
- Utilizando
KafkaTemplate<String, String>
para enviar mensagens string.
- Métodos
send()
: assíncronos e callbacks (ListenableFuture
).
- Tratamento de resultados (
SuccessCallback
, FailureCallback
).
- 2.2. Enviando Objetos Java como JSON:
- Configuração do
JsonSerializer
e JsonDeserializer
.
- Serialização automática de objetos POJO (Plain Old Java Object) para JSON.
- Produzindo e consumindo JSON (ex: um objeto
Order
, User
).
- 2.3. Estratégias de Tratamento de Erros para Produtores:
- Configurações de retransmissão (
retries
, retry.backoff.ms
).
- Tratamento de exceções em callbacks de envio.
- Estratégias de "backoff" e "circuit breaker" (conceitual).
- Prática: Implementar um serviço REST que recebe requisições e publica mensagens string e JSON em tópicos Kafka. Tratar os resultados de envio assíncronos.
Módulo 3: Implementando Consumidores Kafka com Spring Boot (5 horas)
- 3.1. Consumindo Mensagens com
@KafkaListener
:
- Configuração básica de um
KafkaListener
.
- Parâmetros da anotação (
topics
, groupId
, concurrency
).
- Consumindo mensagens string e JSON.
- 3.2. Gerenciamento de Offsets e Modos de Commit:
- Autocommit (
enable.auto.commit
).
- Commit manual (
ContainerAwareErrorHandler
, AcknowledgingMessageListener
).
- Quando usar commit manual (
AckMode
).
- 3.3. Concorrência e Consumer Groups:
- Como o Spring Boot gerencia múltiplas threads de consumidor.
- Impacto da concorrência no rebalanceamento do consumer group.
- Sintonizando o número de threads e o número de partições.
- Prática: Implementar múltiplos
@KafkaListener
para consumir mensagens dos tópicos criados. Configurar diferentes groupIds
e concurrency
. Experimentar com commit manual de offsets.
Módulo 4: Serialização Avançada, Schema Registry e Tratamento de Erros (4 horas)
- 4.1. Introdução ao Avro e Schema Registry:
- Por que usar Avro (compatibilidade de esquema, eficiência).
- O papel do Confluent Schema Registry.
- Configurando serializadores/deserializadores Avro no Spring Boot Kafka.
- 4.2. Integração com Schema Registry:
- Dependências Maven/Gradle para Avro e Schema Registry.
- Gerando classes Avro a partir de schemas
.avsc
.
- Exemplo prático de produção e consumo de mensagens Avro.
- 4.3. Estratégias Avançadas de Tratamento de Erros no Consumidor:
DefaultErrorHandler
e Dead Letter Topic (DLT)
.
- Customizando a estratégia de erro (retries, logging, DLT).
SeekToCurrentErrorHandler
para reprocessamento.
- Processamento idempotente para lidar com re-entregas.
- Prática: Integrar o projeto com o Confluent Schema Registry (pode ser via Docker). Criar um schema Avro, gerar as classes Java, e implementar produtores e consumidores de mensagens Avro. Configurar um
DefaultErrorHandler
com DLT.
Módulo 5: Transações, Testes e Boas Práticas (3 horas)
- 5.1. Transações Kafka com Spring Boot:
- Entendendo a semântica "Exactly-once" com transações.
- Configuração de produtores transacionais.
- Usando
@Transactional
e KafkaTemplate
em um contexto transacional.
- Considerações de desempenho e trade-offs.
- 5.2. Testando Aplicações Kafka com Spring Boot:
- Testes unitários de produtores e consumidores.
- Testes de integração com
spring-kafka-test
(EmbeddedKafka
).
- Teste de fluxos ponta a ponta.
- 5.3. Monitoramento e Boas Práticas:
- Métricas de produtores e consumidores (JMX, Micrometer).
- Configurações importantes para performance e resiliência (
batch.size
, linger.ms
, fetch.min.bytes
).
- Design de tópicos e chaves.
- Logging e observabilidade.
- Segurança (SSL/TLS, SASL - conceitual).
- Prática: Implementar um cenário transacional simples. Escrever testes de integração para um produtor e consumidor usando
EmbeddedKafka
.