Trabalhando com Kafka em Java: bibliotecas, configuração e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com Kafka em Java: bibliotecas, configuração e exemplos de código

\n\n

Apache Kafka é uma plataforma distribuída para streaming de dados, amplamente utilizada para construir sistemas de troca de mensagens de alta carga, coleta de logs, processamento de eventos em tempo real e integração de microsserviços. No ecossistema Java, o Kafka ocupa um lugar especial graças à biblioteca oficial Kafka Clients e a diversas ferramentas adicionais. Neste artigo, vamos detalhar como trabalhar com Kafka em Java, quais bibliotecas usar e fornecer exemplos práticos de código.

\n\n

Principais bibliotecas para trabalhar com Kafka em Java

\n\n

Para integrar aplicações Java com Apache Kafka, existem várias bibliotecas-chave:

\n\n
    \n
  • Kafka Clients — biblioteca oficial da Apache, que fornece API para produtores (Producer) e consumidores (Consumer). Esta é a forma mínima e mais confiável de interagir com os brokers.
  • \n
  • Spring Kafka — extensão para o Spring Framework que simplifica a configuração e o uso do Kafka através de anotações e templates (KafkaTemplate, @KafkaListener).
  • \n
  • Kafka Streams — biblioteca para construir aplicações de streaming (stream processing) em Java, sem necessidade de Spark ou Flink. Permite realizar filtragem, agregação e junção de streams.
  • \n
  • Akka Streams Kafka (Alpakka) — biblioteca reativa para trabalhar com Kafka baseada em Akka Streams, adequada para aplicações assíncronas e não bloqueantes.
  • \n
\n\n

Neste guia, vamos nos concentrar na biblioteca oficial Kafka Clients, pois ela é a base para todas as outras ferramentas.

\n\n

Adicionando dependências (Maven)

\n\n

Para começar, adicione a seguinte dependência ao seu pom.xml:

\n\n
<dependency>\n    <groupId>org.apache.kafka</groupId>\n    <artifactId>kafka-clients</artifactId>\n    <version>3.7.0</version>\n</dependency>
\n\n

Se você estiver usando Gradle, adicione:

\n\n
implementation 'org.apache.kafka:kafka-clients:3.7.0'
\n\n

Configuração do produtor (Producer)

\n\n

O produtor envia mensagens para tópicos do Kafka. Vejamos um exemplo simples de criação e envio de mensagem.

\n\n
import org.apache.kafka.clients.producer.*;\nimport java.util.Properties;\n\npublic class SimpleProducer {\n    public static void main(String[] args) {\n        // Configuração das propriedades do produtor\n        Properties props = new Properties();\n        props.put("bootstrap.servers", "localhost:9092");\n        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");\n        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");\n        props.put("acks", "all"); // Aguardar confirmação de todas as réplicas\n        props.put("retries", 3);  // Número de tentativas em caso de erro\n\n        // Criação do produtor\n        Producer<String, String> producer = new KafkaProducer<>(props);\n\n        // Envio da mensagem\n        ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "key1", "Olá, Kafka do Java!");\n        producer.send(record, (metadata, exception) -> {\n            if (exception == null) {\n                System.out.println("Mensagem enviada para o tópico: " + metadata.topic() +\n                                   ", partição: " + metadata.partition() +\n                                   ", offset: " + metadata.offset());\n            } else {\n                System.err.println("Erro ao enviar: " + exception.getMessage());\n            }\n        });\n\n        // Fechamento do produtor\n        producer.close();\n    }\n}
\n\n

Neste exemplo, definimos o endereço do broker (localhost:9092), os serializadores para chave e valor (neste

Recommendations