Kafka — Configurando e produzindo mensagens
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.