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.

Um comentário sobre “Kafka

  1. Pingback: Kafka no Vert.x | Emmanuel Neri

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.