- Data Hackers Newsletter
- Posts
- Tutorial completo do Apache Kafka: da instalação à execução de aplicações
Tutorial completo do Apache Kafka: da instalação à execução de aplicações
Um passo a passo para configurar o Apache Kafka e criar sistemas de streaming de dados eficientes, com exemplos práticos.
Se você está buscando uma solução poderosa para streaming de dados em tempo real, o Apache Kafka pode ser a resposta. Neste tutorial, vamos guiá-lo desde a instalação até a execução de aplicações práticas, apresentando todos os passos necessários para configurar o Kafka e maximizar sua eficiência em ambientes de big data.
Aprenda como criar, gerenciar e monitorar tópicos no Kafka, além de integrar esta plataforma robusta com serviços como AWS e Docker. Este post traz dicas e aponta algumas das melhores práticas para otimizar o uso da ferramenta, garantindo que sua arquitetura de dados se mantenha ágil e escalável.
O que é Apache Kafka?
Apache Kafka é uma plataforma open source distribuída projetada para a transmissão de dados em tempo real. Ele permite a publicação, a assinatura, o armazenamento e o processamento de fluxos contínuos de registros. Desenvolvido inicialmente pela LinkedIn, o Kafka é amplamente adotado em várias empresas para gerenciar grandes volumes de dados.
Um dos principais objetivos do Apache Kafka é lidar com fluxos de dados gerados simultaneamente por diversas fontes. A plataforma não apenas movimenta dados de um ponto A para um ponto B, mas pode entregá-los a vários destinos ao mesmo tempo, ideal para sistemas de big data e aplicações em tempo real.
As três funções principais que o Kafka oferece incluem:
Publicação e assinatura: Os usuários podem publicar dados em tempo real enquanto outros sistemas podem assinar para receber esses dados.
Armazenamento eficiente: O Kafka armazena dados na ordem em que são recebidos, utilizando um mecanismo de log para manter a integridade e a sequência das mensagens.
Processamento de dados: Permite o processamento em tempo real dos dados transmitidos, possibilitando análises e respostas rápidas a eventos conforme ocorrem.
O Apache Kafka se destaca como uma alternativa robusta aos sistemas tradicionais de mensageria, oferecendo alta escalabilidade, resiliência e desempenho. É especialmente eficaz em ambientes onde grandes quantidades de dados precisam ser processadas e analisadas em tempo real, como operações de TI, monitoramento de eventos e aplicações na Internet das Coisas (IoT).

O Apache Kafka é hoje uma verdadeira referência no streaming de dados
Por que usar o Apache Kafka?
O Apache Kafka é uma ferramenta poderosa e uma solução essencial no gerenciamento de fluxos de dados em tempo real. Aqui estão algumas razões para considerar o seu uso:
Performance e escalabilidade
O Kafka tem uma capacidade de lidar com um grande volume de dados, podendo processar milhões de mensagens por segundo em ambientes distribuídos. É ideal para aplicações que exigem alta performance e escalabilidade, minimizando a latência e maximizando a eficiência.
Arquitetura distribuída
A arquitetura distribuída do Kafka permite que as empresas escalem suas aplicações de maneira flexível. Os dados podem ser particionados e replicados em múltiplos servidores, aumentando a disponibilidade e a resiliência do sistema. Dessa forma, falhas pontuais em servidores não comprometem a integridade ou a acessibilidade dos dados.
Integração com microserviços
O Kafka facilita a comunicação entre serviços de forma assíncrona, permitindo que cada microserviço opere de modo independente. Isso contribui para aplicações mais ágeis e responsivas, sem depender de chamadas de sincronização que podem causar gargalos de desempenho.
Sistema de mensagens robusto
O Kafka garante que as mensagens sejam armazenadas de forma durável. Mesmo que um consumidor fique offline, as mensagens não são perdidas, pois são persistidas no log do Kafka. Isso é crucial para aplicações onde a perda de dados pode ser inaceitável.
Flexibilidade de uso
O Kafka pode ser utilizado em diversas aplicações, incluindo rastreamento de atividades em tempo real, integração de dados e análise de grandes volumes de dados. Essa versatilidade permite que as empresas utilizem o Kafka em vários contextos, economizando recursos e aumentando a eficiência operacional.
Como instalar o Apache Kafka?
Instalar o Apache Kafka pode parecer complexo, mas com um guia detalhado, você terá tudo funcionando em pouco tempo. Vamos abordar a instalação no Linux e no Windows através do WSL2.
Passo 1: Pré-requisitos
Antes de iniciar a instalação, tenha o Java 8 ou superior instalado na sua máquina. Para verificar a instalação, execute o seguinte comando no terminal:
java -version
Se o Java não estiver instalado, você pode baixá-lo do site oficial ou usar um gerenciador de pacotes como apt
no Ubuntu:
sudo apt update
sudo apt install default-jdk
Passo 2: Baixar o Apache Kafka
Acesse a página de downloads do Apache Kafka e baixe a versão mais recente. Você pode usar wget
para facilitar o download diretamente pelo terminal:
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
Depois de baixar, extraia o arquivo:
tar -xzf kafka_2.13-3.7.0.tgz
Passo 3: Iniciar o Zookeeper
O Kafka utiliza o Zookeeper para coordenação e gerenciamento dos brokers, que já vem incluído na distribuição do Kafka. Para iniciá-lo, execute:
cd kafka_2.13-3.7.0
bin/zookeeper-server-start.sh config/zookeeper.properties
Passo 4: Iniciar o Kafka Server
Com o Zookeeper em funcionamento, inicie o servidor Kafka em uma nova janela de terminal:
bin/kafka-server-start.sh config/server.properties
O servidor Kafka começará a funcionar e estará escutando na porta padrão 9092.
Passo 5: Criar um tópico
Agora que o Kafka está em funcionamento, você pode criar um tópico. Em outro terminal, execute:
bin/kafka-topics.sh --create --topic meu-primeiro-topico --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
Você deve ver uma mensagem confirmando que o tópico foi criado.
Passo 6: Produzir mensagens
Para enviar mensagens ao tópico criado, utilize o console do produtor:
bin/kafka-console-producer.sh --topic meu-primeiro-topico --bootstrap-server localhost:9092
No console, você pode digitar mensagens que serão enviadas para o Kafka.
Passo 7: Consumir mensagens
Por fim, para ler as mensagens enviadas ao tópico, abra outro terminal e inicie o consumidor:
bin/kafka-console-consumer.sh --topic meu-primeiro-topico --from-beginning --bootstrap-server localhost:9092
Agora, sempre que você enviar uma nova mensagem pelo produtor, ela será exibida no consumidor.
Como usar o Apache Kafka com AWS?
Integrar o Apache Kafka com a AWS pode ser feito de forma eficiente utilizando o Amazon Managed Streaming for Apache Kafka (MSK). O MSK oferece um serviço totalmente gerenciado, que facilita a construção, funcionamento e escalabilidade de aplicações que utilizam o Kafka. Veja como utilizar o Apache Kafka com AWS.
Passo 1: Criar um cluster MSK provisionado
Acesse o console de gerenciamento da AWS.
Navegue até a seção do Amazon MSK.
Clique em "Criar cluster".
Escolha o tipo de cluster que deseja provisionar, configurando a quantidade de nós e a instância virtual desejada.
Passo 2: Criar uma função IAM
Após configurar o cluster, crie uma função IAM (Identity and Access Management) que conceda as permissões necessárias para que sua aplicação possa criar tópicos no cluster MSK.
Acesse a seção de IAM no console da AWS.
Crie uma nova função e selecione o tipo de uso apropriado (como serviço da AWS).
Adicione as permissões necessárias para o acesso ao MSK.
Passo 3: Criar uma máquina cliente
Para interagir entre sua aplicação e o cluster MSK, configure uma máquina cliente, que pode ser uma instância EC2 ou um ambiente local.
Crie uma instância EC2 com o sistema operacional de sua escolha.
Instale as dependências necessárias, como o Kafka client.
Passo 4: Criar um tópico no cluster MSK
Após a configuração do cluster e da máquina cliente, você pode criar um tópico:
Utilize a ferramenta de linha de comando do Kafka ou uma biblioteca em sua aplicação.
Execute o comando para criar um novo tópico, especificando o número de partições e a replicação desejada.
Passo 5: Produzir e consumir dados
Com o tópico criado, use a API do produtor para enviar mensagens e a API do consumidor para ler as mensagens.
Passo 6: Usar o Amazon CloudWatch para monitorar métricas
O CloudWatch pode ajudar a monitorar a saúde do seu cluster MSK, permitindo visualização de métricas como latência de entrega de mensagens, tráfego de dados e utilização de recursos.
Passo 7: Excluir recursos de AWS
Para evitar custos desnecessários, sempre exclua os recursos criados durante testes e desenvolvimento.

Entre os destaque do Kafka está sua capacidade de adaptação
Como usar o Apache Kafka com Docker?
Utilizar o Apache Kafka com Docker facilita a criação e o gerenciamento de ambientes isolados e replicáveis. Aqui está como configurar o Apache Kafka usando o Docker.
Passo 1: Instalar Docker
Tenha o Docker instalado em sua máquina. Você pode baixá-lo do site oficial do Docker e seguir as instruções de instalação.
Passo 2: Configurar o Docker Compose
Crie um arquivo docker-compose.yml
na pasta do seu projeto com a seguinte configuração básica:
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper:3.4.6
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:latest
ports:
- "9092:9092"
expose:
- "9093"
environment:
KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9092,OUTSIDE://localhost:9092
KAFKA_LISTENERS: INSIDE://0.0.0.0:9092,OUTSIDE://0.0.0.0:9092
KAFKA_ZOOKEEPER: zookeeper:2181
Passo 3: Iniciar os Contêineres
Para iniciar o Kafka e o Zookeeper, navegue até o diretório onde seu arquivo docker-compose.yml
está localizado e execute:
docker-compose up -d
Este comando baixa as imagens necessárias e inicia os contêineres em segundo plano.
Passo 4: Criar Tópicos no Kafka
Após iniciar o Kafka, crie tópicos utilizando o CLI do Kafka que está disponível no contêiner:
docker exec -it <nome_do_contêiner_kafka> kafka-topics.sh --create --topic <nome_do_tópico> --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
Substitua <nome_do_contêiner_kafka>
pelo nome do seu contêiner Kafka e <nome_do_tópico>
pelo nome desejado do tópico.
Passo 5: Produzir e Consumir Mensagens
Para enviar mensagens para o tópico criado, abra um terminal e execute:
docker exec -it <nome_do_contêiner_kafka> kafka-console-producer.sh --topic <nome_do_tópico> --bootstrap-server localhost:9092
Depois, em outro terminal, para consumir mensagens, execute:
docker exec -it <nome_do_contêiner_kafka> kafka-console-consumer.sh --topic <nome_do_tópico> --from-beginning --bootstrap-server localhost:9092
Como criar e gerenciar tópicos no Kafka?
Criar e gerenciar tópicos no Apache Kafka é fundamental ao trabalhar com este sistema de streaming de dados. A seguir, abordaremos o processo de criação e gestão de tópicos, incluindo comandos práticos.
Criando um tópico
Para criar um tópico, utilize a ferramenta kafka-topics.sh
. Aqui está um exemplo para criar um tópico chamado meu-topico-legal
, que terá uma partição e fator de replicação:
kafka-topics --create --topic meu-topico-legal --partitions 1 --replication-factor 1 --if-not-exists --zookeeper localhost:32181
O parâmetro --if-not-exists
garante que o tópico não será recriado caso já exista.
Verificando tópicos existentes
Após a criação, use o comando a seguir para verificar se o tópico foi criado e suas características:
kafka-topics --describe --topic meu-topico-legal --zookeeper localhost:32181
Isso retornará detalhes como o número de partições e o líder do tópico.
Alterando um tópico
Para alterar uma configuração de tópico, como adicionar partições, utilize:
kafka-topics --alter --topic meu-topico-legal --partitions 3 --zookeeper localhost:32181
Note que você não pode reduzir o número de partições de um tópico existente.
Deletando um tópico
Para remover um tópico, use:
kafka-topics --delete --topic meu-topico-legal --zookeeper localhost:32181
Essa operação deve ser feita com cautela, pois todos os dados contidos no tópico serão perdidos.
Como visualizar mensagens no Kafka?
Visualizar mensagens no Apache Kafka é essencial para monitorar e gerenciar os dados que transitam por seus tópicos. Aqui estão algumas abordagens eficazes.
Usando o console consumer
Utilize o kafka-console-consumer para consumir mensagens diretamente de um tópico:
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic seu-topico --from-beginning
Visualização com ferramentas de terceiros
Além do console, considere utilizar ferramentas que oferecem uma interface amigável, como:
Kafka Tool: Interface gráfica para visualizar tópicos e gerenciar configurações.
Confluent Control Center: Ferramenta web para monitoramento de clusters Kafka.
Kafdrop: Interface web que permite visualizar tópicos, partições e mensagens.
Consumir mensagens programaticamente
Se você deseja visualizar mensagens em uma aplicação, pode usar bibliotecas cliente. Um exemplo simples em Java:
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import java.time.Duration;
import java.util.Collections;
import java.util.Properties;
public class ExemploKafkaConsumer {
public static void main(String[] args) {
Properties props = new Properties();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ConsumerConfig.GROUP_ID_CONFIG, "grupo-exemplo");
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("seu-topico"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
System.out.printf("Recebido: key=%s value=%s%n", record.key(), record.value());
}
}
}
}
Dicas úteis
Para consumir uma quantidade limitada de mensagens, utilize o parâmetro --max-messages no console consumer.
Monitore as configurações de offset para garantir que você receba mensagens no ponto desejado.
Dicas e melhores práticas para otimizar o uso do Apache Kafka
Ao implementar o Apache Kafka, seguir algumas dicas pode garantir a eficiência e a performance do seu sistema de streaming. Aqui estão algumas recomendações importantes:
1. Defina os parâmetros de configuração de log
Ajuste os parâmetros de configuração de log, como log.retention.hours e log.retention.bytes, para manter os logs gerenciáveis.
2. Conheça os requisitos de hardware
O Kafka pode ser executado eficientemente em hardware de baixo custo. Optimize a CPU, RAM e armazenamento para o seu cluster.
3. Aproveite o Apache ZooKeeper
Mantenha um número ideal de nós de ZooKeeper (geralmente três), e assegure-se de otimizar a largura de banda.
4. Configure a replicação e redundância
Aumente o fator de replicação padrão de dois para três para maior segurança e disponibilidade.
5. Gerencie as configurações de tópicos
Defina um fator de replicação de três e ajuste o tamanho das mensagens para evitar latência elevada.
6. Utilize processamento paralelo
Aumentar o número de partições por tópico pode melhorar o throughput, mantendo-o abaixo de 10.000 para simplificar o monitoramento.
7. Monitore continuamente
Estabeleça um sistema de monitoramento, usando ferramentas como Prometheus e Grafana.
8. Aumente o Ulimit
Aumente o limite de arquivos abertos para pelo menos 128.000 para evitar a queda de brokers.
9. Mantenha a latência de rede baixa
Certifique-se de que os brokers estejam próximos aos clientes e utilize conexões de alta largura de banda.
10. Documentação e treinamento
Documente as melhores práticas e promova treinamentos regulares para sua equipe.
Considerações finais
Agora que você percorreu o passo a passo para instalar e configurar o Apache Kafka, está pronto para explorar as possibilidades que essa poderosa ferramenta de streaming de dados oferece. Você aprendeu como criar e gerenciar tópicos, integrar o Kafka com AWS e Docker, além de visualizar mensagens e aplicar boas práticas para otimizar seu uso.
Com essa base sólida, você pode começar a implementar soluções de streaming em tempo real que atendam às necessidades do seu negócio. O Kafka não só melhora a eficiência na manipulação de dados, mas também se destaca pela flexibilidade e escalabilidade, tornando-se uma escolha valiosa em um mundo cada vez mais orientado por dados.