Para que possamos escrever os nossos primeiros programas utilizando Kafka, é preciso que ele esteja configurado e rodando. Assim, vamos utilizar o docker-compose para levantar uma instância simples do Kafka e vamos utilizar o Conduktor como nossa GUI de acesso e configuração.
Como instalar o Kafka
Como tudo na vida, existem várias formas de você fazer a mesma coisa: instalar o Kafka no seu computador. Você pode fazer download dos binários (ou até mesmo compilar o código) a partir do site oficial da ferramenta. Neste mesmo site, você consegue encontrar um quickstart para rodar o Kafka a partir da linha de comando manualmente. Eventualmente, quando você tiver maior familiaridade com o Kafka, aconselho que volte a essa documentação. Tenho certeza de que ela vai ampliar mais ainda o seu conhecimento.
Outra forma – e é a que eu aconselho para você que está começando – é utilizar o Docker. Para instalar o Docker, independente do seu sistema, existem vários manuais na internet. Se você estiver num ambiente Windows, rodando a versão “Home”, acredito que o nível de dificuldade será maior. Nesse caso, sinceramente, compensa instalar uma VM e emular o Linux internamente. Vou partir do princípio de que você já tem o Docker instalador. Se não tem, pare aqui. Eu vou ficar esperando você instalar e depois continuamos. Tudo bem?
No meu GitHub disponibilizei uma adaptação do docker-compose com as imagens da bitnami. Basicamente, peguei as imagens que eles disponibilizaram e alterei – conforme o “readme” do repositório – para que permita conexões internas e externas. Assim você não precisa recompilar imagens docker para testar a sua aplicação.
Após baixar o código do meu GitHub, entre na pasta .docker e digite no seu terminal:
docker-compose up
E pronto! Você já tem o Kafka pronto para uso!
Escolhendo uma GUI para gestão do Kafka
Para acessar o Kafka, você teria de entrar no container e via shell executar os scripts de administração do Kafka. Uma alternativa mais amigável é utilizar aplicações GUI, porém as duas que eu conheço possuem limitações.
O Kafka Tool, com certeza, é uma das mais famosas e mais simples de utilizar. E é justamente a facilidade que me faz gostar tanto desse aplicativo. Por outro lado, a sua licença é extremamente limitada. A sua utilização não é permitida sequer para uso educacional. Por isso não vou abordá-lo neste artigo, ficando apenas a menção honrosa. A segunda ferramenta é o Conduktor. Na minha percepção, com um visual baseado em dashboards, a UX desse software é mais voltada para administração dos clusters. Visualizaro conteúdo dos tópicos, no Conduktor, não é uma das tarefas mais objetivas. Além dos muitos cliques, o excesso de informação pode confundir quem está começando. A licença dele, por outro lado, é mais permissiva, permitindo o uso gratuito com a única limitação de acessar um cluster com apenas um broker. Justamente o nosso cenário.
Configurando o Conduktor
Uma vez que o Kafka já está rodando, você pode baixar o instalador do Conduktor através do site. Depois de instalado, você vai precisar fazer login no sistema. Para casos como esse, eu prefiro sempre vincular a minha conta do GitHub. Mas você também pode criar uma conta específica para o software.
Ao clicar em Login/Singup, o seu browser será aberto, oferecendo a oportunidade de fazer o login ou se cadastrar.
Feito o login, sua aplicação automaticamente estará pronta para configurar os clusters. Para isso, clique no botão “New Kafka Cluster”, no centro da janela:
Na aba Kafka Cluster, a opção “Cluster Name” serve apenas como label para você diferenciar entre as diversas conexões que você pode salvar no seu aplicativo. Em “Bootstrap Servers”, informe “localhost:9093” – sem as aspas. Esse é o endereço para acesso externo do nosso broker. Embora no nosso arquivo docker-compose nós tenhamos adicionado a imagem do Zookeeper, configurá-lo na conexão é um comportamento que foi depreciado. Em breve o Kafka não terá mais necessidade do Zookeeper. Por isso, não o informaremos na nossa conexão.
O campo additional properties serve para quando forem necessárias configurações de conexão, como caminho de certificados, credenciais de usuário e senha e assim por diante. Sua página de configuração deve estar igual a da imagem:
Ao clicar no botão “Save”, no canto inferior direito da tela, voltamos para a janela inicial do Kafka, com a diferença que agora temos o nosso broker configurado e acessível.
Visualizando o conteúdo dos tópicos
Com o Conduktor devidamente configurado, clique no cluster para que possamos ver o seu status:
Neste momento é aberto um dashboard com todas as informações do seu cluster. Você consegue verificar quantos brokers estão configurados, versão do Kafka, quantos consumer estão conectados, ver detalhes de cada tópico. Enfim, como eu disse, a experiência de usuário do Conduktor é bem mais voltada para administração. Mas onde estão as minhas mensagens?
Ao clicar em “Topics” no menu esquerdo da tela, o Conduktor irá mostrar dados dos tópicos, como partições, reatribuições, tamanho, entre outros.
Neste momento, nosso cluster não possui nenhum tópico cadastrado. Provavelmente o seu também estará assim. Para criar um novo tópico, clique no botão “+ Create”, no canto superior direto da tela.
Apenas preencha o campo nome. As demais configurações deixe como está. Ao clicar em “Create Topic”, o tópico já estará pronto para uso. É preciso dizer que as bibliotecas de Kafka permitem a criação automática dos tópicos. Isso, claro, depende de configuração. Esse comportamento não é o mais recomendado. Preferia sempre criar os tópicos pessoalmente – claro, usando scripts para isso.
Consumindo mensagens
Quando se trata do conteúdo dos tópicos, o Conduktor abandona a filosofia de dashboard. Você precisa fazer uma série de configurações para que os dados do seu tópico sejam acessíveis. Por baixo dos panos, o que o Conduktor faz é criar uma instância de consumer. Por isso das configurações. Mas fique tranquilo: ele usa um group randômico, não interferindo no consumo das suas aplicações em produção.
Clique no tópico que acabamos de criar, e na próxima janela, no botão “Consume Data”:
Nossa mensagem não possui chave e o seu conteúdo é JSON. Por isso, vamos configurar, na seção “Format” o campo “Key” pode ter o valor “none (ignore)” e o campo “Value” ser alterado para “JSON”. Na seção “Parameters”, você configura quais mensagens devem ser mostradas na tela. Por padrão – “now (latest)” – o Conduktor irá buscar apenas as mensagens mais recentes. Mas você pode alterar para “the beginning (earliest)” para visualizar desde as mensagens mais antigas do tópico.
Clique no botão “Start” no canto inferior direito. Como nosso tópico acabou de ser criado, não há mensagens para serem visualizadas. Mas o nosso consumer está à postos, esperando a primeira chegar. Vamos produzir uma mensagem para ele?
Produzindo mensagens
Voltando para o dashboard do nosso tópico, você vai encontrar no topo o botão “PRODUCER”. Clique nele. Na tela de produção de mensagens, você pode construir templates que armazenarão dados padrão para o envio de mensagens. Por exemplo, se o nosso tópico fosse apenas Sales, poderíamos informar no seu header informado se foi feita uma informação de Post ou Put. O primeiro campo é destinado a informar a chave da mensagem, enquanto o segundo é destinado a informar o conteúdo. Para testar a produção de mensagens, copie e cole no segundo campo, o JSON abaixo e clique no botão “Send”:
{
"Id": "54005fa5-5c21-4c61-8aa3-77fcb6ed1d48",
"BrancheId": "590ba731-2211-47fc-9d79-946203232268",
"DocumentId": "123.456.789-10",
"SaleNumber": "A45678DF78",
"DateSale": "2021-03-28T12:10:51.935366-03:00",
"Items": [
{
"ProductId": "b4fbc8f9-8206-43cf-89d5-b05ca236cd5a",
"Value": 999.12,
"Quantity": 1.234
}
],
"TotalSale": 1232.91408
}
Se você tiver mantido a tela do seu consumer aberta, você verá a mensagem aparecer quase que simultaneamente na tela do consumer.
E assim você criou a sua primeira mensagem no Kafka!
Agora que nós temos o ambiente pronto, a ferramenta necessária para administrar e visualizar nossas mensagens, chegou o momento de colocar as mãos no código e escrever o nosso primeiro Producer!
Até lá!
Muito bom! Parabéns.
Obrigado pelo conteúdo! Foi de grande ajuda.
Valeu pelo retorno, Hercules! Se encontrar qualquer dificuldade, só entrar em contato. Blz?
Muito obrigado!