DEV Community

Cover image for Primeiros passos com Kafka - Parte 1
Odilon Jonathan Kröger
Odilon Jonathan Kröger

Posted on • Updated on

Primeiros passos com Kafka - Parte 1

Imagem de capa feita por Kaitlyn Baker. Disponível na plataforma Unsplash.


Beleza?

Nesta publicação vou apresentar alguns comandos do Kafka.
Vou tentar apresentar os comandos da forma mais fácil, sem precisar ficar instalando a plataforma inteira - isso é possível graças ao Docker.

Então prepara o café ou chá, abre o editor de texto para fazer suas anotações e vamos nessa, publicar e consumir mensagens no Kafka.

O que vamos ver nesta publicação?

  • Como subir as imagens necessárias para ter um nó do Kafka rodando na sua máquina.
  • Como criar, alterar e deletar tópicos.
  • Como produzir mensagens nos tópicos.
  • Como podemos ler as mensagens que estão armazenadas em um tópico.

Ah, tem um detalhe! Os comandos que vou mostrar estou executando num terminal do Linux.

E o que não vamos ver nesta publicação?

Não vou entrar nos detalhes de funcionamento do Kafka.
Se você não conhece absolutamente nada de Kafka e chegou até esta publicação, sugiro fortemente que antes de qualquer coisa você leia o artigo Uma introdução ao Apache Kafka. Lá você vai encontrar todas as informações teóricas necessárias para entender como que o Kafka funciona.

Também não vou mostrar como instalar, nem os detalhes de funcionamento do Docker.
Sabendo o básico de Docker já é o suficiente para conseguir executar tudo oque será explicado abaixo.
De qualquer forma, para executar os comandos abaixo é esperado que você tenha funcionando na sua máquina o Docker e o docker-compose.

Como subir o Kafka na minha máquina?

Algumas pessoas curtem instalar tudo na máquina. Eu não sou uma dessas pessoas! :)
Minha sugestão é utilizar o Docker para subir o ambiente.
Para deixar a coisa ainda mais fácil, a Confluent disponibiliza arquivos docker-compose.yml com toda configuração necessária já pronta.

Primeiro vamos precisar baixar o repositório contendo esses arquivos: https://github.com/confluentinc/cp-all-in-one

Agora acesse a pasta cp-all-in-one/cp-all-in-one. Você verá que ali está o arquivo docker-compose.yml necessário para rodar o Kafka localmente.
Recomendo que você dê uma olhada no arquivo para entender quantas configurações teríamos que fazer na mão se não fosse por esta facilidade.

Se você quiser, pode comentar todos os serviços com excessão do zookeeper e do broker. Nestes exemplos serão os únicos dois serviços utilizados.

Nesse mesmo diretório do arquivo, vamos executar o comando necessário para subir todo o ambiente:

docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

Na primeira vez vai demorar um pouco, pois o Docker terá que baixar diversas imagens (cada uma daquelas que estão no docker-compose.yml).

Quando o comando acima estiver concluído, você pode seguir para os próximos passos.

Quero criar um tópico!!!

Como eu quero facilitar a coisa nessa publicação, eu não vou ficar entrando nos containers para executar os comandos. Como o docker-compose deixa que a gente execute através dele, vamos fazer uso dessa funcionalidade.
Repare que vamos sempre utilizar o kafka-topics nos comandos abaixo.

Execute o comando abaixo para criar o primeiro tópico. Vamos chamar ele de topico_teste.

docker-compose exec broker kafka-topics --create \
    --bootstrap-server broker:9092 \
    --topic topico_teste \
    --partitions 3 \
    --replication-factor 1
Enter fullscreen mode Exit fullscreen mode

O que é isso aí tudo?
Estamos pendindo para o docker-compose executar dentro do container broker o comando kafka-topics e seus argumentos.
--create para dizer que queremos criar um tópico.
--bootstrap-server é onde informamos o endereço do Kafka onde queremos criar o tópico. Este endereço que utilizamos é baseado no arquivo docker-compose.yml.
--topic é onde informamos o nome do tópico.
--partitions serve para dizermos quantas partições o tópico vai ter.
--replication-factor é utilizado para dizer em quantos nós este tópico deverá ser replicado. Para o nosso exemplo é necessário deixar 1, senão não vai funcionar, pois só temos um nó rodando. Mas em um cluster "pra valer", com toda certeza você vai precisar replicar mais do que em apenas 1 nó.

Se você quiser, pode executar o comando abaixo listar todos os tópicos.

docker-compose exec broker kafka-topics --list \
    --bootstrap-server broker:9092
Enter fullscreen mode Exit fullscreen mode

Para modificar um tópico:

docker-compose exec broker kafka-topics --alter \
    --bootstrap-server broker:9092 \
    --topic topico_teste \
    --partitions 10
Enter fullscreen mode Exit fullscreen mode

Se você quiser saber detalhes de como está o seu tópico, é possível utilizar o comando --describe:

docker-compose exec broker kafka-topics  --describe \
    --bootstrap-server broker:9092 \
    --topic topico_teste
Enter fullscreen mode Exit fullscreen mode

Vamos iniciar um consumidor.

Antes de começar a produzir mensagens, eu acho legal iniciar um consumidor para o tópico, assim podemos ver em tempo real a coisa funcionando!

Para iniciar um consumidor, vamos usar o kafka-console-consumer.
Basta executar o comando abaixo para iniciar o consumo de mensagens do seu tópico topico_teste.

docker-compose exec broker kafka-console-consumer \
    --bootstrap-server broker:9092 \
    --topic topico_teste
Enter fullscreen mode Exit fullscreen mode

Agora quero mandar mensagens para este tópico!

Legal! Para deixar ainda mais legal a experiência, deixe o consumidor rodando em uma outra aba do terminal, ou outro terminal, ou qualquer coisa assim para poder ver a coisa acontecendo ao mesmo tempo.

Vamos agora utilizar o kafka-console-producer. O comando para iniciar o producer está logo abaixo. Quando você executar, ele ficara ativamente enviando tudo que você digitar para o tópico. Para parar o producer basta pressionar Ctrl+C.

docker-compose exec broker kafka-console-producer \
    --bootstrap-server broker:9092 \
    --topic topico_teste
Enter fullscreen mode Exit fullscreen mode

E se eu quiser deletar o tópico?

Primeiro você precisa parar o seu consumidor e também o produtor de mensagens.
Em seguida, basta utilizar o kafka-topics passando por parâmetro --delete.

docker-compose exec broker kafka-topics  --delete \
    --bootstrap-server broker:9092 \
    --topic topico_teste
Enter fullscreen mode Exit fullscreen mode

É isso aí!

Kafka é uma ferramenta bastante poderosa, cheia de funcionalidades e configurações para conseguir ser uma ferramenta eficaz em diversos cenários diferentes.
Mas isso não dignifica que precisa ser difícil!

A ferramenta tem evoluído nesse sentido e após você "brincar" algumas vezes produzindo e consumindo mensagens, acaba se tornando cada vez mais fácil o entendimento de como cada uma das coisas funciona no Kafka.

Para não deixar o texto gigante, vou fechar por aqui. Mas numa próxima vou mostrar como podemos enviar mensagens no formato JSON!!!

Até lá! \o

Top comments (0)