Kafka — Configurando e produzindo mensagens

Willyan Guimarães
experienceCode
Published in
3 min readMar 23, 2020

O Kafka é uma plataforma de processamento de dados desenvolvida pela Apache. Neste tutorial abaixo vamos ver como instalar, executar e produzir mensagens para serem consumidas. Então vamos lá:

Instalação

  • Baixar a versão mais recente, no momento deste post, esta;
  • Descompactar o arquivo em um diretório;
  • Abrir o bash na pasta de instalação

Executar o Kafka

Para executar o Kafka é preciso primeiramente rodar o Apache Zookeeper pois este é o sistema primário de coordenação de recursos distribuídos de uso geral para armazenar as informações. O Kafka foi desenvolvido assim como outros projetos Apache(Storm, HBase) para utilizar o ZooKeeper como base.

Abra a pasta /bin e execute:

./zookeeper-server-start.sh config/zookeeper.properties

Vale observar que inferimos as configurações padrão do arquivo properties.

INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)

Pronto! Com a mensagem acima no log da execução verá que na porta 2181 o ZooKeeper está rodando. A execução deste comando prende a E/S do terminal. Abra uma nova aba ou janela para continuar.

O próximo passo é executar o Kafka:

./kafka-server-start.sh ../config/server.properties

Assim que a aplicação subir a mensagem de log abaixo aparecerá indicando que já está rodando:

INFO [KafkaServer id=0] started (kafka.server.KafkaServer)

A execução deste comando também prende a E/S. Abra uma nova aba ou janela no terminal para continuar.

Produzir e consumir mensagens

Para possibilitar produzir e consumir mensagens é preciso criar um tópico. Este tópico será usado por um produtor pra gravar mensagens nele e algum consumidor que verifique as mensagens deste tópico poderá fazer leitura destas. Para criar um tópico executamos o seguinte comando:

./kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic LIKES_POST

De modo descritivo, este comando cria um tópico com o nome “LIKES_POST” apontando pro servidor iniciado na porta 9092 que é o Kafka, criando uma partição e um fator de replicação. Este comando não prende a E/S.

Para confirmar que criou o tópico acima podemos executar:

./kafka-topics.sh --list --bootstrap-server localhost:9092

A saída se o tópico foi criado corretamente é o nome do mesmo.

Com isso, podemos enviar mensagens para esse tópico. Para fazer isso, precisamos abrir um console de produtor de mensagens para o tópico criado.

./kafka-console-producer.sh --broker-list localhost:9092 --topic LIKES_POST

Este comando libera a E/S para digitar as mensagens que poderão ser inseridas a cada linha, como abaixo:

>

Então insira alguns dados:

>postId16736,likes=67
>postId3376,likes=80

Pronto! Agora para ler as mensagens como consumidor abra uma nova aba e digite:

./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic LIKES_POST --from-beginning

Verá a saída:

postId16736,likes=67
postId3376,likes=80

Aqui solicitamos ao Kafka para consumir as mensagens do servidor desde o começo. Outra forma para só consumir as novas mensagens que foram enviadas a partir deste momento de “escuta” é só retirar o parâmetro “- -from beginning”:

./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic LIKES_POST

Se agora voltarmos na aba do produtor poderá enviar mais mensagens e ver elas sendo lidas logo em seguida na aba do comando para consumir.

Este pequeno passo a passo mostra em linhas gerais como o Kafka funciona de uma forma bem simples. A ideia na verdade é que exceto a parte de configuração as mensagens possam ser produzidas e consumidas programaticamente. De qualquer forma é válido para um contato inicial.

Críticas e sugestões são sempre bem-vindas!

UPDATES:

Uma possibilidade para os comandos que bloqueiam a E/S é utilizar o & para que a execução seja em background, assim:

./zookeeper-server-start.sh ../config/zookeeper.properties &./kafka-server-start.sh ../config/server.properties &

Isso faz com que o trabalho sujo acima de abrir novas abas não aconteça. A única desvantagem é que mesmo liberando o terminal os logs continuaram a serem exibidos nesta tela.

--

--