• 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:

  1. Publicação e assinatura: Os usuários podem publicar dados em tempo real enquanto outros sistemas podem assinar para receber esses dados.

  2. 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.

  3. 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

  1. Acesse o console de gerenciamento da AWS.

  2. Navegue até a seção do Amazon MSK.

  3. Clique em "Criar cluster".

  4. 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.

  1. Acesse a seção de IAM no console da AWS.

  2. Crie uma nova função e selecione o tipo de uso apropriado (como serviço da AWS).

  3. 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.

  1. Crie uma instância EC2 com o sistema operacional de sua escolha.

  2. 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:

  1. Utilize a ferramenta de linha de comando do Kafka ou uma biblioteca em sua aplicação.

  2. 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:

  1. Kafka Tool: Interface gráfica para visualizar tópicos e gerenciar configurações.

  2. Confluent Control Center: Ferramenta web para monitoramento de clusters Kafka.

  3. 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.