Secondo il sito di Kafka :
"Kakfa is used for building real-time data pipelines and streaming apps."
Cercando in Internet in lungo e in largo, ho trovato la seguente definizione generalmente accettata di ciò che " stream data " è:
- I dati di flusso sono dati che fluiscono in modo contiguo da un'origine a una destinazione su una rete; e
- I dati del flusso sono non di natura atomica, ovvero 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 possiedi tutti ; e
- I dati di streaming possono essere avviati / fermati in qualsiasi momento; e
- I consumatori possono allegare e scollegare da un flusso di dati a piacere ed elaborare solo le parti di esso 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, allora ...
Ora capisco cosa sono i "dati di streaming", quindi capisco cosa intendano Kafka e Kinesis quando si fatturano come middleware di elaborazione / intermediazione per le applicazioni con i dati di streaming. Ma ha suscitato i miei interessi: può / dovrebbe "streaming middleware" come Kafka o Kinesis essere utilizzato per i dati non in streaming, come i tradizionali broker di messaggi? 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à il suo bombardamento costante di messaggi JSON che devono essere elaborati e l'elaborazione è abbastanza complessa (convalida, trasformazione dei dati, filtraggio, aggregazione, ecc.):
- Caso n. 1: i messaggi sono ciascuno dei fotogrammi di un film; questo è un messagio JSON per fotogramma video contenente i dati del fotogramma e alcuni metadati di supporto
- Caso 2: i messaggi sono dati di serie temporali, forse il battito del cuore di qualcuno in funzione del tempo. Quindi il messaggio n. 1 viene inviato per rappresentare il mio battito cardiaco su t = 1, il messaggio n. 2 contiene il mio battito cardiaco su t = 2, ecc.
- Caso n. 3: i dati sono completamente disparati e non correlati in base al tempo o come parte di qualsiasi "flusso di dati". Forse gli eventi di controllo / sicurezza che vengono generati quando centinaia di utenti navigano nell'applicazione facendo clic sui pulsanti e eseguendo azioni
Sulla base di come vengono fatturati Kafka / Kinesis e sulla mia comprensione di cosa siano i "flussi di dati", sembrano essere candidati ovvi per i casi n. 1 (dati video contigui) e n. 2 (dati di serie temporali contigue). Tuttavia non vedo alcun motivo per cui un tradizionale broker di messaggi come RabbitMQ non potrebbe 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 quell'evento. Quindi per me questo parla di aver bisogno di un broker tradizionale come RabbitMQ. Ma non c'è nemmeno motivo per cui Kafka o Kinesis non possano gestire l'elaborazione dei dati degli eventi.
Quindi, in sostanza, sto cercando di stabilire una rubrica che dice: Ho X dati con caratteristiche Y. Dovrei usare un processore di flusso come Kafka / Kinesis per gestirlo. Oppure, al contrario, uno che mi aiuta a determinare: Ho dati W con caratteristiche Z. Dovrei usare un tradizionale broker di messaggi per gestirlo.
Quindi chiedo: Quali fattori sui dati (o altro) aiutano a guidare la decisione tra lo stream processor o il broker dei messaggi, poiché entrambi possono gestire i dati di streaming ed entrambi possono gestire i dati dei messaggi (non in streaming)? / strong>