2016-02-08 39 views
6

Sto cercando di capire come "inizializzare" lo stato della finestra per alcuni dei nostri lavori di flusso di dati di flusso. Scenario è un flusso di messaggi del forum, vogliamo emettere un conteggio di messaggi in esecuzione per ogni argomento per tutto il tempo, quindi abbiamo un flusso di flusso di dati con una finestra globale e si innesca per emettere ogni volta che arriva un record per un argomento . Tutto bene finora. Ma prima della sorgente del flusso, abbiamo un file di grandi dimensioni che vorremmo elaborare per ottenere i nostri conteggi storici, inoltre, poiché gli argomenti vivono per sempre, abbiamo bisogno del conteggio storico per informare gli output della fonte dello stream, quindi ci piace " Abbiamo bisogno della stessa logica per eseguire il file, quindi avviare l'esecuzione sulla sorgente del flusso quando il file è esaurito, mantenendo lo stato della finestra.Stato iniziale per un processo di flusso di dati

idee correnti:

  • Scrivi una fonte illimitata personalizzato che fa proprio questo. Legge il file finché non è esaurito e quindi inizia a leggere dallo stream. Non molto divertente perché scrivere fonti personalizzate non è molto divertente.
  • Eseguire la logica in modalità batch sul file e, come l'ultimo passaggio, emettere lo stato su un flusso in qualche modo, quindi disporre di una versione di streaming dell'avvio della logica che legge sia dal flusso di stato che dal flusso di dati e in qualche modo combina i due. Ciò sembra avere un senso, ma non sono sicuro di come assicurarsi che il lavoro di streaming legga tutto dalla sorgente di stato, per inizializzare, prima di leggere dal flusso di dati.
  • Immettere i dati storici in un flusso, scrivere un lavoro che viene letto da entrambi i flussi. Gli stessi problemi della seconda soluzione, non sono sicuro di come assicurarsi che uno stream venga "consumato" per primo.

EDIT: Ultimo opzione, e quello che stiamo andando con, è quello di scrivere il lavoro di calcolo in modo tale che non importa affatto quale ordine gli eventi arrivano in, quindi ci limiteremo a spingere l'archivio da il pub/sottotema e funzionerà tutto. Ciò funziona in questo caso, ma ovviamente influisce sul consumatore a valle (necessità di supportare aggiornamenti o ritrattazioni), quindi sarei interessato a sapere quali altre soluzioni le persone hanno per seminare i loro stati di finestra.

risposta

2

È possibile eseguire ciò che è stato suggerito nel punto 2 punto: eseguire due pipeline (nello stesso main), con il primo che popola un argomento pubsub dal file di grandi dimensioni. Questo è simile a quello che fa l'esempio StreamingWordExtract.

+0

Sì, vedo che possiamo ottenere i dati in un lavoro di streaming tramite Pub/Sub, è più la questione se possiamo leggere il lavoro dall'argomento "backfill" prima di cercare di leggere entrambi al stesso tempo e quindi avere timestamp di eventi molto diversi. – bfabry

+0

Insieme alla mia modifica sopra, che progettiamo il calcolo per essere indipendenti dall'ordine in cui arrivano gli eventi, e faremo i nostri output di supporto di destinazione in questo modo, funzionerà. Saluti. – bfabry

Problemi correlati