Trabalhando com Apache Kafka em Java: do básico ao uso avançado
Apache Kafka é uma plataforma distribuída para processamento de dados em fluxo que se tornou o padrão de facto para a construção de arquiteturas orientadas a eventos. Neste guia, vamos explorar como trabalhar eficientemente com Kafka em Java: desde a instalação das bibliotecas necessárias até a escrita de um produtor e consumidor com tratamento de erros.
Por que Java e Kafka são a combinação ideal?
Java é uma das principais linguagens para trabalhar com Kafka por várias razões:
- O cliente oficial do Kafka é escrito em Java e oferece desempenho máximo
- Ecossistema rico de bibliotecas (Spring Kafka, Kafka Streams, Akka Streams)
- Tipagem forte e possibilidade de ajuste fino através de objetos de configuração
Instalação e adição de dependências
Para trabalhar com Kafka em Java, você precisará adicionar a dependência no pom.xml (Maven) ou build.gradle (Gradle).
Maven
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.6.0</version></dependency>Gradle
implementation 'org.apache.kafka:kafka-clients:3.6.0'Criando um Kafka Producer (Produtor)
O produtor é responsável por enviar mensagens para os tópicos do Kafka. Aqui está um exemplo básico de configuração:
import org.apache.kafka.clients.producer.*;import org.apache.kafka.common.serialization.StringSerializer;import java.util.Properties;
public class SimpleProducer { public static void main(String[] args) { // 1. Configuração das propriedades do produtor Properties props = new Properties(); props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); // 2. Criação do produtor KafkaProducer<String, String> producer = new KafkaProducer<>(props); // 3. Envio da mensagem ProducerRecord<String, String> record = new ProducerRecord<>( "my-topic", "key-1", "Olá, Kafka do Java!" ); // 4. Envio assíncrono com callback producer.send(record, (metadata, exception) -> { if (exception == null) { System.out.println("Mensagem enviada: " + "topic=" + metadata.topic() + ", partition=" + metadata.partition() + ", offset=" + metadata.offset()); } else { System.err.println("Erro ao enviar: " + exception.getMessage()); } }); // 5. Fechamento do produtor producer.close(); }}Criando um Kafka Consumer (Consumidor)
O consumidor lê mensagens dos tópicos. É importante configurar corretamente o grupo de consumidores para balanceamento de carga.
import org.apache.kafka.clients.consumer.*;import org.apache.kafka.common.serialization.StringDeserializer;import java.time.Duration;import java.util.Collections;import java.util.Properties;
public class SimpleConsumer { public static void main(String[] args) { // 1. Configuração das propriedades do consumidor Properties props = new Properties(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); props.put(ConsumerConfig.GROUP_ID_CONFIG, "my-consumer-group"); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(Consu Também na biblioteca
Processamento de Markdown em C# (.NET): bibliotecas e ferramentas
Geração de relatórios PDF em Java: visão geral das bibliotecas e ferramentas
Hibernate para Java: guia completo com exemplos
Axios para JavaScript (Node.js): guia completo com exemplos
Monitoramento de aplicações Go (Golang): bibliotecas e ferramentas