Kafka é uma plataforma distribuída de streaming de eventos. Isso significa poder publicar (publish/write) e consumir (subscribe to/read) fluxos de eventos, armazenar esses fluxos de forma duradoura e processá-los a medida que ocorrem ou retrospectivamente.
Arquitetura
É um sistema distribuído baseado em servidores e clientes que se comunicam usando um protocolo TCP.
-
Servidores: O núcleo do Kafka é executado como um cluster formado por múltiplos servidores chamados de brokers. Eles compõem a camada de armazenamento e roteamento: recebem, gravam no disco e entregam os eventos. O ecossistema também pode incluir servidores adicionais em clusters separados rodando ferramentas como o Kafka Connect (para integração automatizada com bancos de dados ou sistemas externos).
-
Clientes: São aplicações e microserviços que utilizam bibliotecas do Kafka para ler, escrever e processar fluxos de eventos em paralelo.
Conceitos e termos
-
Events: Representam o registro de um fato ocorrido (também chamados de mensagens). Um evento contém uma chave, um valor, um timestamp e cabeçalhos de metadados opcionais.
- Event key: “Alice”
- Event value: “Made a payment of $200 to Bob”
- Event timestamp: “Jun. 25, 2020 at 2:06 p.m.”
-
Producers e Consumers: Produtores são aplicações que escrevem (publish) eventos no Kafka, consumidores (subscribe) leem e processam esses eventos. Eles são totalmente desacoplados, não precisando interagir diretamente ou aguardar um pelo outro.
-
Topics: Estruturas onde os eventos são armazenados, eles são mantidos por um período de tempo configurado. Um tópico suporta múltiplos produtores e consumidores.
-
Partitions: Tópicos são subdivididos em partições que ficam distribuídas entre vários brokers.
-
Replication: Para tolerância a falhas, cada partição de um tópico pode ser replicada em múltiplos brokers (normalmente 3 cópias).

Kafka CLI
O CLI do Kafka é um conjunto de scripts que invocam classes para interagir com o cluster.
kafka-topics.sh
Criar um tópico chamado “pagamentos” com 3 partições e fator de replicação 1:
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic pagamentos \
--partitions 3 --replication-factor 1Adicionando e removendo configurações de tópico:
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics \
--entity-name pagamentos --alter --add-config x=ykafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics \
--entity-name pagamentos --alter --delete-config xDeletar um tópico:
kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic pagamentoskafka-console-producer.sh
Escrever mensagens em um tópico:
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic pagamentos
>{"id": 1, "valor": 150.0}
>{"id": 2, "valor": 300.0}kafka-console-consumer.sh
Ler mensagens de um tópico, --from-beginning para ler desde o início:
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic pagamentos --from-beginningkafka-consumer-groups.sh
Descrever o estado de um grupo de consumidores:
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group grupo1