Nesta série de posts veremos o Kafka Streams em detalhes, construindo um projeto juntos. Neste Post irei introduzir o conceito de Kafka Streams e apresentar o projeto que montaremos juntos nesta série. Todo o código ficará disponível no Github ao final de cada post.
O que é Kafka Streams ?
Kafka Streams é uma biblioteca/dependência Java que você adiciona ao seu código, assim você ganha vários helpers para lhe auxiliar na manipulação de um Stream. Um Stream é uma sequência “infinita” de eventos que você recebe de uma entrada, nesse caso um tópico Kafka. “Infinita” pois no conceito de Stream você não sabe quando termina, do ponto de vista do consumidor.
Enquanto você está recebendo os eventos do tópico (Stream de eventos), você pode realizar várias operações com esses eventos, vou listar algumas:
- Agregação. Somando um conjunto de 10 eventos, em uma janela de 2 minutos.
- Transformação. Colocando um texto de um campo em caixa alta.
- Filtro. Capturando apenas eventos onde um valor específico seja encontrado.
Obviamente você poderia fazer tudo isso por conta própria, implementando filtros, agregações e transformações. Porém o próprio Apache Kafka dispõe de um conjunto de Streams APIs, provendo tudo isso de forma nativa, seguindo as melhores práticas e pronto para escalar, seja para aplicações com baixa ou alta volumetria.
Construindo nosso Caso de Uso
Ao longo desta série de posts vamos construir uma aplicação de exemplo, onde iremos aprender aos poucos os conceitos por trás do Kafka Streams e aplicá-los na prática. Tenho certeza que ao fim desta série ficará claro todos os conceitos e aplicações do Kafka Streams.
Nosso projeto será uma aplicação responsável por gerenciar o Saldo dos clientes no nosso banco fictício.
Veja o diagrama abaixo do nosso projeto:

Vamos construir uma única aplicação, Streams Saldo, que será responsável por consumir todas as operações do tópico Operação. Usando Kafka Streams, vamos realizar as seguintes operações:
- A operação de entrada pode ser um Débito ou Crédito. Para cada operação iremos verificar se o cliente tem saldo para realizar a operação, caso sim, gravaremos a saída no tópico Extrato e o novo saldo no tópico Saldo, caso a operação não possa ser realizada iremos gravar apenas no tópico Rejeitadas, que funcionará como um DLQ (Dead Letter Queue).
- O tópico de extrato irá manter todas as operações realizadas com sucesso e com o novo saldo após essa operação, assim poderemos saber qual o saldo do cliente após determinada operação.
- O tópico saldo irá manter apenas o saldo final do cliente.
- Não criaremos uma aplicação para consumir dos tópicos de saída, foge do escopo da nossa série de posts sobre Kafka Streams. Usaremos o próprio CLI que vem na instalação do Kafka para consultar os dados chegando nos tópicos de saída, assim como usaremos o CLI para gravar no tópico de entrada.
Links importantes
Github do projeto: https://github.com/kafkabrasil/kafka-streams-aplicacao-saldo
Próximo Post da Série: https://kafkabrasil.com/kafka-streams-construcao-do-projeto-base/
Comments
Pingback: Kafka Streams – Construção do projeto base - Kafka Brasil