Disclaimer : sono un committer Apache Flink e membro PMC e ho familiarità solo con il design di alto livello di Storm, non con i suoi interni.
Apache Flink è un framework per l'elaborazione unificata e batch. Il runtime di Flink supporta nativamente entrambi i domini a causa del trasferimento di dati in pipeline tra attività parallele che include shuffle di pipeline. I record vengono immediatamente spediti dalla produzione delle attività alla ricezione delle attività (dopo essere stati raccolti in un buffer per il trasferimento di rete). I lavori batch possono essere eseguiti facoltativamente utilizzando il blocco dei trasferimenti di dati.
Apache Spark è un framework che supporta anche l'elaborazione batch e stream. L'API batch di Flink sembra abbastanza simile e affronta casi d'uso simili a Spark ma differisce negli interni. Per lo streaming, entrambi i sistemi seguono approcci molto diversi (mini-batch vs. streaming) che li rendono adatti a diversi tipi di applicazioni. Direi che il confronto tra Spark e Flink è valido e utile, tuttavia Spark non è il motore di elaborazione del flusso più simile a Flink.
Venendo alla domanda originale, Apache Storm è un processore di flusso di dati senza funzionalità batch. In effetti, il motore a pipeline di Flink internamente sembra un po 'simile a Storm, cioè le interfacce dei compiti paralleli di Flink sono simili ai bulloni di Storm. Storm e Flink hanno in comune l'obiettivo di elaborare flussi a bassa latenza mediante trasferimenti di dati in pipeline. Tuttavia, Flink offre un'API di livello più elevato rispetto a Storm. Invece di implementare la funzionalità di un bolt con uno o più lettori e collezionisti, l'API DataStream di Flink fornisce funzioni come Map, GroupBy, Window e Join. Molte di queste funzionalità devono essere implementate manualmente quando si utilizza Storm. Un'altra differenza è l'elaborazione della semantica. Storm garantisce l'elaborazione almeno una volta, mentre Flink fornisce esattamente una volta. Le implementazioni che danno queste garanzie di elaborazione differiscono abbastanza. Mentre Storm utilizza riconoscimenti a livello record, Flink utilizza una variante dell'algoritmo Chandy-Lamport. In breve, le origini dati iniettano periodicamente marcatori nel flusso di dati. Ogni volta che un operatore riceve un tale marker, controlla il suo stato interno. Quando un marker è stato ricevuto da tutti i sink di dati, viene eseguito il commit del marker (e di tutti i record che sono stati elaborati in precedenza). In caso di errore, tutti gli operatori delle fonti vengono reimpostati al loro stato quando hanno visto l'ultimo marker commesso e l'elaborazione è continuata. Questo approccio marcatore-checkpoint è più leggero rispetto ai riconoscimenti a livello record di Storm. Questo le origini dati iniettano periodicamente marcatori nel flusso di dati. Ogni volta che un operatore riceve un tale marker, controlla il suo stato interno. Quando un marker è stato ricevuto da tutti i sink di dati, viene eseguito il commit del marker (e di tutti i record che sono stati elaborati in precedenza). In caso di errore, tutti gli operatori delle fonti vengono reimpostati al loro stato quando hanno visto l'ultimo marker commesso e l'elaborazione è continuata. Questo approccio marcatore-checkpoint è più leggero rispetto ai riconoscimenti a livello record di Storm. Questo le origini dati iniettano periodicamente marcatori nel flusso di dati. Ogni volta che un operatore riceve un tale marker, controlla il suo stato interno. Quando un marker è stato ricevuto da tutti i sink di dati, viene eseguito il commit del marker (e di tutti i record che sono stati elaborati in precedenza). In caso di errore, tutti gli operatori delle fonti vengono reimpostati al loro stato quando hanno visto l'ultimo marker commesso e l'elaborazione è continuata. Questo approccio marcatore-checkpoint è più leggero rispetto ai riconoscimenti a livello record di Storm. Questo tutti gli operatori delle fonti vengono reimpostati al loro stato quando hanno visto l'ultimo marker commesso e l'elaborazione è continuata. Questo approccio marcatore-checkpoint è più leggero rispetto ai riconoscimenti a livello record di Storm. Questo tutti gli operatori delle fonti vengono reimpostati al loro stato quando hanno visto l'ultimo marker commesso e l'elaborazione è continuata. Questo approccio marcatore-checkpoint è più leggero rispetto ai riconoscimenti a livello record di Storm. Questoil set di diapositive e il discorso corrispondente descrivono l'approccio di elaborazione dello streaming di Flink tra cui tolleranza agli errori, checkpoint e gestione dello stato.
Storm offre anche un'API di alto livello esattamente una volta chiamata Trident. Tuttavia, Trident si basa su mini-batch e quindi più simile a Spark che a Flink.
La latenza regolabile di Flink si riferisce al modo in cui Flink invia i record da un'attività all'altra. Ho detto prima che Flink utilizza trasferimenti di dati con pipeline e inoltra i record non appena vengono prodotti. Per motivi di efficienza, questi record vengono raccolti in un buffer che viene inviato sulla rete quando è pieno o quando viene raggiunta una determinata soglia di tempo. Questa soglia controlla la latenza dei record perché specifica il tempo massimo in cui un record rimarrà in un buffer senza essere inviato all'attività successiva. Tuttavia, non può essere utilizzato per fornire garanzie concrete circa il tempo impiegato da un record per entrare in un programma perché dipende anche dal tempo di elaborazione all'interno delle attività e dal numero di trasferimenti di rete tra le altre cose.