O Apache Kafka é uma plataforma de streaming distribuído que permite publicar, assinar, armazenar e processar streams de registros em tempo real. Ele é amplamente utilizado em arquiteturas orientadas a eventos e microserviços devido à sua alta taxa de transferência, escalabilidade e durabilidade. Neste artigo, vamos explorar como usar o Kafka com Java, abordando os conceitos básicos e mostrando um exemplo prático.
1. Conceitos Básicos do Kafka
- Produtor (Producer): Responsável por publicar mensagens em um tópico do Kafka.
- Consumidor (Consumer): Lê mensagens de um ou mais tópicos do Kafka.
- Tópico (Topic): Um canal nomeado onde os produtores publicam mensagens e os consumidores as leem.
- Partição (Partition): Tópicos são divididos em partições para paralelismo e escalabilidade.
- Broker: Um servidor Kafka que armazena dados e atende a pedidos de clientes (produtores e consumidores).
2. Configurando o Kafka
Antes de começar a codificar em Java, é necessário ter uma instância do Kafka em execução. Você pode baixar o Kafka do site oficial e seguir as instruções de instalação.
3. Kafka com Java
Para usar o Kafka com Java, você precisa adicionar as dependências do cliente Kafka ao seu projeto. Se estiver usando Maven, adicione o seguinte ao seu pom.xml
:
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.8.0</version>
</dependency>
3.1. Produzindo Mensagens
Aqui está um exemplo simples de como produzir mensagens para um tópico Kafka usando Java:
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");
Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<String, String>("meu-topico", "chave", "valor"));
producer.close();
3.2. Consumindo Mensagens
Para consumir mensagens de um tópico Kafka:
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "meu-grupo");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
Consumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("meu-topico"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
System.out.printf("Offset = %d, Key = %s, Value = %s%n", record.offset(), record.key(), record.value());
}
}
Conclusão
O Apache Kafka é uma ferramenta poderosa para streaming de dados em tempo real. Com sua integração com Java, os desenvolvedores podem facilmente produzir e consumir mensagens, construindo sistemas escaláveis e orientados a eventos. Se você está buscando uma solução robusta para processamento de streams, o Kafka é definitivamente uma opção a ser considerada.