Executando verificação de segurança...
1

[Python][Kafka] Enriquecimento de eventos

Hello!
Gostaria de abrir uma thread aqui (StackOverflow like, rs), para deixar como fonte de informação após as discussões geradas para debater sobre Enriquecimento de eventos quando estamos trabalhando com Kafka. Dando enfoque ao Python!


A principal questão aqui que gostaria de levantar, são as diferenças entre Kafka Consumer API (Kafka Producer API) vs Kafka Stream API: qual utilizar para o enriquecimento de eventos? E porquê ?

Use cases seriam bem legais de se ler!


Kafka Consumer API

Muito vantajoso para realizar operações onde se deve ter o controle dos commits dos eventos, acaba deixando a gente fazer operações em "baldes" (bulk/batch processing) dado que você pode controlar quando commitar os offsets manualmente. Porém, como algumas desvantagens, pode-se citar que não conseguimos salvar os estados anteriores dos eventos já passados para fazer agregações, não temos algum tipo de paralelismo ou concorrencia aqui para ajustar - porém podemos explorar o número de consumidores por consumer group.

Pode-se dizer que também é necessário controlar o Consumer o Producer separados aqui, cada um com sua API.

Opções de bibliotecas/frameworks exploradas: Aiokafka & Fastavro (para serialização de mensagens com schemas)

Kafka Streams API

É possível ter Consumo e Produção de eventos de uma vez só, sem usar diferentes APIs, dado que esta é contruída ao topo das duas. Existem formas de adicionar concorrência no processamento - visando maior otimização. Conseguimos realizar operações com o estado dos eventos, realizando junções e agregações de eventos de uma forma "out-of-the-box", sendo possível realizar somas e contagens de campos de forma rapida e fácil. Existem tabelas, que funcionam em cima de um tópico de changelog para garantir segurança (fault tolerance), e são compartilhados entre os tópicos "escutados" pelo serviço em questão.

Opções de bibliotecas/frameworks exploradas: Faust-streaming (suportado pela comunidade agora) & Fastavro, Bytewax


StackOverflow afora, não encontrei muito sobre comparações de performance entre os mesmos. O problema que estou lidando no momento é que o enriquecimento dos eventos acaba necessitando de APIs externas e de consultas à bancos de dados, ou seja, a maioria (se não todos) os dados que serão usados para enriquecer os eventos não se encontram dentro do Kafka.

Alguém tem sugestões de como prosseguir nesses casos?

Obrigado (:
PS.: Perdão se alguma informação acima não está 100% correta - estou no processo de aprendizado sobre...

Carregando publicação patrocinada...