Kafka

O Apache Kafka é uma plataforma de streaming distribuído que possui basicamente três objetivos: Publish e subscribe em fluxos de registros, armazenamento de fluxo de registros e processamento de fluxos conforme eles ocorrem. Com isso, o Kafka é uma boa alternativa de plataforma para uma arquitetura orientada a eventos.

No Kafka, as mensagem são publicadas em tópicos que seria basicamente um feed de mensagens, possibilitando ser consumidos por um ou mais consumidores, utilizando a estrutura de partições, como demonstrando na imagem abaixo, o que possibilita o melhor consumo entre múltiplos consumidores concorrentes através de grupo de consumidores.

fonte: kafka.apache.org

As mensagens inseridas nas partições são definitivamente armazenas (durably persists) e são identificadas pelo offset quando consumidas. Dessa forma, os registros sempre ficam armazenadas em ordem, possibilitando o reprocessamento de todo fluxo de dados publicados do tópico.

Com o objetivo de ser uma plataforma tolerante a falhas e escalável, a infraestrutura do Kafka é composta por uma ou mais instância do Kafka, chamado de cluster, e pelo Zookeeper, que é responsável por centralizar as informações de configurações e nomenclaturas entre as instâncias do Kafka. Assim, permitindo a distribuição e replicação dos tópicos entre o cluster.

Executando Kafka com Docker

Para simplificar a criação do ambiente Kafka, vamos utilizar o docker compose para a criação de dois containers, do Kafka e do Zookeeper.

docker-compose.yml

version: '3.6'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:5.2.1
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_SYNC_LIMIT: 2

  kafka:
    image: confluentinc/cp-kafka:5.2.1
    ports:
      - "9092:9092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"

Execute docker-compose up para iniciar o Kafka no ambiente local.

Para encerrar, execute docker-compose up.

Obs: Também pode ser utilizado o docker-compose rm -f para encerrar e remover os containers.

Conclusão

Podemos ver, que o Kafka tem maior complexidade comparado com soluções de filas, pois com seu objetivo de ser uma solução escalável e tolerante a falhas, iniciando pela necessidade do Zookeeper infraestrutra para gerenciar o cluster, o particionamento de tópicos para atender múltiplos consumidores e o armazenamento dos fluxos, porém é o trade off de decisões, onde se temos o requisito de escalabilidade na troca de mensagem o Kafka é uma excelente opção, porém se não temos esse requisito, podemos pensar em uma solução mais simples de mensageria.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.