Trabalhando com Kafka em Java: bibliotecas, configuração e exemplos de código
\n\nApache 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\nPrincipais bibliotecas para trabalhar com Kafka em Java
\n\nPara 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
Neste guia, vamos nos concentrar na biblioteca oficial Kafka Clients, pois ela é a base para todas as outras ferramentas.
\n\nAdicionando dependências (Maven)
\n\nPara começar, adicione a seguinte dependência ao seu pom.xml:
<dependency>\n <groupId>org.apache.kafka</groupId>\n <artifactId>kafka-clients</artifactId>\n <version>3.7.0</version>\n</dependency>\n\nSe você estiver usando Gradle, adicione:
\n\nimplementation 'org.apache.kafka:kafka-clients:3.7.0'\n\nConfiguração do produtor (Producer)
\n\nO produtor envia mensagens para tópicos do Kafka. Vejamos um exemplo simples de criação e envio de mensagem.
\n\nimport 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\nNeste exemplo, definimos o endereço do broker (localhost:9092), os serializadores para chave e valor (neste
Também na biblioteca
Actix-web para Rust: guia completo com exemplos
Agendador de Tarefas Swift: GCD, OperationQueue e Combine para iOS/macOS
GraphQL Java — biblioteca servidora para implementação de API GraphQL em Java
sqlc para Go: guia completo com exemplos práticos