Parte I - Fundamentos Do Apache Kafka
Apache Kafka com Java - Gerenciamento de Filas.
Parte I: Fundamentos do Apache Kafka
Introdução
Esta parte apresenta os conceitos essenciais do Apache Kafka, sua arquitetura, principais componentes e comandos básicos para quem está começando.
O que é Apache Kafka?
Apache Kafka é uma plataforma distribuída de streaming de eventos, projetada para alta performance, escalabilidade e tolerância a falhas. É amplamente utilizada para processamento de dados em tempo real, integração entre sistemas e pipelines de dados.
Conceitos Principais
-
Broker: Servidor Kafka responsável por armazenar e entregar mensagens.
-
Topic: Canal lógico onde as mensagens são publicadas e consumidas.
-
Partition: Subdivisão de um tópico para escalabilidade e paralelismo.
-
Producer: Aplicação que envia mensagens para o Kafka.
-
Consumer: Aplicação que lê mensagens do Kafka.
-
Consumer Group: Grupo de consumidores que compartilham a leitura de partições.
-
Offset: Posição sequencial de uma mensagem dentro de uma partição.
Arquitetura Básica
-
Producers publicam mensagens em tópicos.
-
Brokers armazenam as mensagens.
-
Consumers leem as mensagens dos tópicos.
-
O Kafka garante alta disponibilidade e escalabilidade por meio de partições e replicação.
Instalação Rápida com Docker
docker-compose up -d
Comandos Essenciais
- Criar um tópico:
kafka-topics --create --topic meu-topico --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
- Produzir mensagens:
kafka-console-producer --topic meu-topico --bootstrap-server localhost:9092
- Consumir mensagens:
kafka-console-consumer --topic meu-topico --from-beginning --bootstrap-server localhost:9092
Exercícios Práticos
-
Suba o ambiente Kafka localmente.
-
Crie tópicos com diferentes números de partições.
-
Produza e consuma mensagens usando o terminal.
-
Experimente criar múltiplos consumidores em um mesmo grupo.
Recursos Recomendados
-
Livro: Kafka: The Definitive Guide (O\'Reilly)
Exemplo Java: Producer e Consumer Simples
A seguir, você encontra exemplos didáticos de um Producer e um Consumer em Java, ideais para quem está começando a experimentar o Apache Kafka na prática. Os arquivos completos estão disponíveis em: parte1-fundamentos/src/main/java/SimpleProducer.java e parte1-fundamentos/src/main/java/SimpleConsumer.java.
Como executar os exemplos
- Garanta que o Kafka está rodando em localhost:9092
Utilize o docker-compose.yml fornecido na pasta parte1-fundamentos/ para subir o ambiente local rapidamente:
docker-compose up -d
2. Crie o tópico meu-topico se necessário
Execute o comando abaixo para criar o tópico no seu cluster Kafka local:
docker exec -it \<nome_do_container_kafka> kafka-topics --bootstrap-server localhost:9092 --create --topic meu-topico --partitions 1 --replication-factor 1
Substitua \<nome_do_container_kafka> pelo nome real do container Kafka em execução (ex: kafka ou kafka1).
3. Compile e execute os exemplos Java usando Maven
O projeto já possui um pom.xml pronto na pasta parte1-fundamentos com todas as dependências necessárias. Basta rodar:
mvn compile
mvn exec:java -Dexec.mainClass=SimpleProducer
mvn exec:java -Dexec.mainClass=SimpleConsumer
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.util.Properties;
public class SimpleProducer {
public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
try (KafkaProducer producer = new KafkaProducer<>(props)) {
producer.send(new ProducerRecord<>("meu-topico", "mensagem de exemplo"));
System.out.println("Mensagem enviada!");
}
}
}
}
}
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import java.util.Collections;
import java.util.Properties;
public class SimpleConsumer {
public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "grupo-exemplo");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
try (KafkaConsumer consumer = new KafkaConsumer<>(props)) {
consumer.subscribe(Collections.singletonList("meu-topico"));
ConsumerRecords records = consumer.poll(java.time.Duration.ofSeconds(5));
for (ConsumerRecord record : records) {
System.out.printf("Recebido: %s%n", record.value());
}
}
}
}
Dica: Você pode modificar os exemplos para enviar e consumir múltiplas mensagens, testar diferentes tópicos ou experimentar com múltiplos consumidores para entender o funcionamento dos consumer groups.
Esses exemplos são apenas para fins didáticos e funcionam em ambientes locais com o Kafka rodando no padrão (localhost:9092).
Exercícios Práticos
Para praticar e aprofundar os conceitos desta parte, consulte também o arquivo auxiliar:
- parte1-fundamentos/exercicios-parte1.md --- Exercícios de fundamentos, comandos básicos, experimentação inicial e espaço para anotações.
Código-Fonte e Exemplos
Todo o conteúdo, exemplos práticos e arquivos de configuração deste artigo estão disponíveis no repositório oficial do projeto no GitHub:
🔗 github.com/chmulato/kafka-java-mastery
Acesse, explore e contribua!