Secondo il sito Kafka :
" Kakfa viene utilizzato per la creazione di pipeline di dati in tempo reale e app di streaming " .
Cercando su Internet in lungo e in largo, ho trovato la seguente definizione generalmente accettata di cosa sono i " dati di flusso ":
- I dati di flusso sono dati che fluiscono contigui da un'origine a una destinazione su una rete; e
- I dati di flusso non sono di natura atomica, il che significa che qualsiasi parte di un flusso di dati che scorre è significativa e processabile, al contrario di un file i cui byte non significano nulla a meno che non li possiate tutti; e
- I dati di flusso possono essere avviati / arrestati in qualsiasi momento; e
- I consumatori possono collegarsi e staccarsi da un flusso di dati a piacimento ed elaborarne solo le parti che desiderano
Ora, se qualcosa che ho detto sopra è errato, incompleto o totalmente sbagliato, per favore inizia correggendomi! Supponendo che io sia più o meno in pista, quindi ...
Ora che capisco cosa sono i "dati di streaming", allora capisco cosa significano Kafka e Kinesis quando si considerano middleware di elaborazione / intermediazione per applicazioni con dati di streaming. Ma ha suscitato i miei interessi: "streaming middleware" come Kafka o Kinesis può essere usato per dati non streaming, come i broker di messaggi tradizionali? E viceversa: possono / dovrebbero essere usati MQ tradizionali come RabbitMQ, ActiveMQ, Apollo, ecc. Per lo streaming dei dati?
Facciamo un esempio in cui un'applicazione invierà la sua raffica costante di backend di messaggi JSON che devono essere elaborati e l'elaborazione è piuttosto complessa (convalida, trasformazioni sui dati, filtro, aggregazioni, ecc.):
- Caso n. 1: i messaggi sono ciascuno dei fotogrammi di un film; si tratta di una messaggistica JSON per frame video contenente i dati del frame e alcuni metadati di supporto
- Caso n. 2: i messaggi sono dati di serie temporali, forse il battito del cuore di qualcuno in funzione del tempo. Quindi viene inviato il messaggio n. 1 che rappresenta il mio battito cardiaco a t = 1, il messaggio n. 2 contiene il mio battito cardiaco a t = 2, ecc.
- Caso n. 3: i dati sono completamente diversi e non correlati dal tempo o come parte di qualsiasi "flusso di dati". Forse eventi di controllo / sicurezza che vengono generati mentre centinaia di utenti navigano nei pulsanti dell'applicazione facendo clic su azioni
In base alla fatturazione di Kafka / Kinesis e alla mia comprensione di cosa siano i "dati in streaming", sembrano essere ovvi candidati per i Casi n. 1 (dati video contigui) e n. 2 (dati contigui delle serie temporali). Tuttavia, non vedo alcun motivo per cui un broker di messaggi tradizionale come RabbitMQ non sia in grado di gestire in modo efficiente entrambi questi input.
E con il caso n. 3, ci viene fornito solo un evento che si è verificato e dobbiamo elaborare una reazione a tale evento. Quindi per me questo parla della necessità di un broker tradizionale come RabbitMQ. Ma non c'è nemmeno motivo per cui Kafka o Kinesis non possano gestire nemmeno l'elaborazione dei dati degli eventi.
Quindi, fondamentalmente, sto cercando di stabilire una rubrica che dice: ho dati X con caratteristiche Y. Dovrei usare un processore di flusso come Kafka / Kinesis per gestirlo. O, al contrario, uno che mi aiuta a determinare: ho dati W con caratteristiche Z. Dovrei usare un broker di messaggi tradizionale per gestirlo.
Quindi chiedo: quali fattori relativi ai dati (o altrimenti) aiutano a orientare la decisione tra il processore di flusso o il broker dei messaggi, dal momento che entrambi possono gestire i dati di streaming ed entrambi possono gestire i dati dei messaggi (non di streaming)?