De acordo com o site Kafka :
"O Kakfa é usado para criar pipelines de dados em tempo real e aplicativos de streaming " .
Pesquisando na Internet em toda parte, encontrei a seguinte definição geralmente aceita do que são " dados de fluxo ":
- Dados de fluxo são dados que fluem contiguamente de uma fonte para um destino em uma rede; e
- Os dados do fluxo não são de natureza atômica, o que significa que qualquer parte do fluxo de dados é significativa e processável, em oposição a um arquivo cujos bytes não significam nada, a menos que você tenha todos eles; e
- Os dados do fluxo podem ser iniciados / parados a qualquer momento; e
- Os consumidores podem anexar e desanexar de um fluxo de dados à vontade e processar apenas as partes desejadas
Agora, se algo que eu disse acima estiver incorreto, incompleto ou totalmente errado, comece me corrigindo! Supondo que estou mais ou menos no caminho certo, então ...
Agora que entendo o que são "dados em fluxo", entendo o que Kafka e Kinesis querem dizer quando se autodenominam como middleware de processamento / intermediação para aplicativos com dados em fluxo. Mas isso despertou meus interesses: o "fluxo de middleware" como Kafka ou Kinesis pode / deve ser usado para dados que não são de fluxo contínuo, como os intermediários de mensagens tradicionais? E vice-versa: os MQs tradicionais como RabbitMQ, ActiveMQ, Apollo etc. podem ser usados para transmitir dados?
Vamos dar um exemplo em que um aplicativo enviará sua barragem constante de mensagens JSON que precisam ser processadas e o processamento é bastante complexo (validação, transformações nos dados, filtragem, agregações etc.):
- Caso nº 1: as mensagens são cada quadro de um filme; essa é uma bagagem JSON por quadro de vídeo que contém os dados do quadro e alguns metadados de suporte
- Caso 2: As mensagens são dados de séries temporais, talvez os batimentos cardíacos de alguém em função do tempo. Portanto, a mensagem nº 1 é enviada representando meu batimento cardíaco em t = 1, a mensagem nº 2 contém meu batimento cardíaco em t = 2, etc.
- Caso nº 3: os dados são completamente díspares e não relacionados ao tempo ou como parte de qualquer "fluxo de dados". Talvez os eventos de auditoria / segurança sejam disparados quando centenas de usuários navegam no aplicativo clicando nos botões e realizando ações
Com base em como o Kafka / Kinesis é cobrado e no meu entendimento sobre o que são "dados de streaming", eles parecem candidatos óbvios para os Casos 1 (dados de vídeo contíguos) e 2 (dados de séries temporais contíguas). No entanto, não vejo nenhuma razão para que um mediador de mensagens tradicional como o RabbitMQ não possa lidar com essas duas entradas com eficiência.
E no Caso # 3, somos fornecidos apenas a um evento que ocorreu e precisamos processar uma reação a esse evento. Então, para mim, isso diz respeito à necessidade de um corretor tradicional como o RabbitMQ. Mas também não há razão para que Kafka ou Kinesis não possam lidar com o processamento de dados de eventos.
Então, basicamente, estou procurando estabelecer uma rubrica que diz: Tenho X dados com características Y. Eu deveria usar um processador de fluxo como o Kafka / Kinesis para lidar com isso. Ou, inversamente, um que me ajude a determinar: eu tenho dados W com características Z. Eu devo usar um intermediário de mensagens tradicional para lidar com isso.
Por isso, pergunto: Quais fatores sobre os dados (ou não) ajudam a orientar a decisão entre o processador de fluxo ou o intermediário de mensagens, pois ambos podem lidar com dados de fluxo contínuo e ambos podem lidar com dados de mensagem (sem fluxo contínuo)?