Skip to content

Instantly share code, notes, and snippets.

@felipepoliveira
Created February 8, 2022 12:22
Show Gist options
  • Save felipepoliveira/7da72522af0d3c79793708297b08db4e to your computer and use it in GitHub Desktop.
Save felipepoliveira/7da72522af0d3c79793708297b08db4e to your computer and use it in GitHub Desktop.

Rodando Kafka no Windows com WSL 2

O Kafka é um serviço muito popular e difundido para ignorarmos só porque ele roda mal no Windows, então vamos resolver isso.

O que é Kafka?

Apache Kafka é uma plataforma open-source de processamento de streams desenvolvida pela Apache Software Foundation, escrita em Scala e Java. O projeto tem como objetivo fornecer uma plataforma unificada, de alta capacidade e baixa latência para tratamento de dados em tempo real. Sua camada de armazenamento é, essencialmente, uma "fila de mensagens de publishers/subscribers maciçamente escalável projetada como um log de transações distribuído", tornando-o altamente valioso para infra-estruturas corporativas que processam transmissão de dados. Além disso, Kafka se conecta a sistemas externos (para importação/exportação de dados) através do Kafka Connect e ainda fornece o Kafka Streams, uma biblioteca Java de processamento de fluxos.

Artigo extraído do Wikipedia.

Vídeo explicativo da Alura

O que é WSL?

Subsistema Windows para Linux é um módulo do sistema operacional Windows 10, que visa a disponibilizar um ambiente Linux compatível no sistema da Microsoft, de forma que se possam executar programas (baseados em texto) nativos dos sistemas GNU/Linux dentro do próprio Windows sem a necessidade de emuladores ou do uso de máquinas virtuais. Vários distribuições Linux distintos podem em princípio ser instalados sobre este módulo.

Outras distribuições linux podem ser paralelamente ou substitutivamente instaladas sobre o mesmo módulo, a exemplo as distribuições OpenSUSE e Arch Linux; o que leva à mudança do nome do subsistema do ponto de vista do usuário.

Artigo extraído do Wikipedia

Vídeo explicativo do Dicionário do Programador

Baixando o Kafka no Windows e configurando no WSL

1) Baixando o Kafka no Windows

  • Acesse o link da página oficial do Kafka e baixe a última versão disponível dos binários: https://kafka.apache.org/downloads
  • Extraia o conteúdo em uma pasta no Windows, por exemplo C:/apps/kafka
  • O diretório Kafka contém uma estrutura parecida com essa:
    • bin/
    • config/
    • libs/
    • [...] + conteúdo

2) Rodando o Kafka no WSL

Nessa fase, vamos rodar a instância do Kafka e do Zookeeper dentro do WSL

  • Inicie seu WSL Ainda não tem WSL configurando no seu Windows? Acesse esse link e siga o tutorial.
  • Na sua instânia linux instale o Java:
    • Se sua instância for Ubuntu:
      • sudo apt-get update
      • sudo apt-get install default-jre

2.1) Iniciando o Zookeeper

  • Navegue utilizando o comando cd até a pasta do kafka;
  • Na pasta raiz insira o comando: bin/zookeeper-server-start.sh config/zookeeper.properties (perceba que este comando necessita de um arquivo de configuração como argumento. O arquivo encontra-se na pasta config/). Com isso, o zookeeper será iniciado com sucesso.

2.2) Iniciando o Kafka

Resolvendo problema de endereçamento entre Windows e WSL

Antes de iniciar o Kafka é necessário realizar uma configuração para que ele funcione do jeito correto no WSL de forma que o Windows possa também acessar o serviço.

Nos meus estudos com Kafka rodando no WSL eu me deparei com um bug que talvez você possa ter, vamos verificar isso agora pra checar como deve configurar seu Kafka antes de roda-lo.

Testando endereçamento de rede

Primeiramente, acesse seu terminal do Windows (não do WSL) e execute o comando ping localhost.

No meu caso o Windows retornou o seguinte resultado: Resposta de ::1: tempo<1ms.

Perceba que localhost para o Windows faz referência ao endereço IPV6 ::1:.

Agora acesse o terminal do WSL e faça a mesma coisa ping localhost.

No meu caso o Ubuntu retornou o seguinte resultado: 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.296 ms.

Perceba que no WSL localhost faz referência ao endereço 127.0.0.1.

O que isso significa?

Esse desacordo de endereçamento do localhost faz com que eu fizesse uma alteração nas configurações do Kafka para que ele pudesse ser acessado do Windows.

Configurando o listeners

Bem, agora vamos fazer a configuração do Kafka.

  • Acesse o arquivo localizado em config/server.properties. Localize a configuração #listeners=PLAINTEXT://:9092 você vai perceber que ela está comentada com um '#'.
  • Remove o comentário e altere o valor para:
    • listeners=PLAINTEXT://[::1]:9092;

A configuração listeners determina o nome do servidor que rodará o Kafka.

Iniciando o Kafka

No seu terminal do WSL acesse a raiz do Kafka e execute: bin/kafka-server-start.sh config/server.properties.

Pronto.

Agora você já:

  • ✅ Baixou o Kafka ;
  • ✅ Iniciou o Zookeeper;
  • ✅ Configurou o listeners do Kafka;
  • ✅ Iniciou o Kafka

Bora testar?

1, 2, 3 Testando

Testando o Kafka no WSL

  • Abra outro terminal do WSL;
  • Vá até a raiz do Kafka;
  • Execute o comando bin/kafka-console-consumer.sh --bootstrap-server [::1]:9092 --topic mytesttopic
    • Neste comando você está criando um consumer do Kafka (um subscriber de dados);
      • bootstrap-server - O servidor principal do Kafka;
      • topic o nome do tópico que você deseja streamar dados;
  • Se der tudo certo, o console vai ficar parado esperando dados serem enviados por um publisher;

Agora em outro terminal do WSL, na raiz do Kafka:

  • Execute o comando bin/kafka-console-producer.sh --bootstrap-server [::1]:9092 --topic mytesttopic (perceba que usamos o endereço [::1]:9092 ao invés de localhost pois é o nome utilizado no listeners)
    • Neste comando você está criando um producer do Kafka (um publisher de dados)
      • bootstrap-server - O servidor principal do Kafka;
      • topic o nome do tópico que você deseja streamar dados;
  • Se der tudo certo, o console vai ficar parado esperando a entrada de dados;

Envie alguns dados no seu terminal producer e verifique se ele aparece no terminal consumer.

Se aparecer, deu tudo certo! 🥳

Testando o Kafka no Windows

Agora vamos ver se o Windows consegue acessar o serviço do Kafka rodando no WSL.

  • Abra um terminal no Windows
  • Execute o comando bin/windows/kafka-console-consumer.bat --bootstrap-server [::1]:9092 --topic mytesttopic (perceba que usamos o endereço [::1]:9092 ao invés de localhost pois é o nome utilizado no listeners);

Pronto, se os dados publicados no WSL também aparecerem no Windows deu tudo certo!

@gdonega
Copy link

gdonega commented Feb 8, 2022

Ótimo tutorial!

@euguizola
Copy link

Muito bom!!! 👌👌👌👌

@CarolinaMoraes
Copy link

👏👏👏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment