Sto solo cercando di capire come funziona il modello di programmazione. Scenario sto utilizzando Pub/Sub + Dataflow per l'analisi degli strumenti per un forum web. Ho un flusso di dati provenienti da Pub/Sub che assomiglia a:Stato longevo con Google Dataflow
ID | TS | EventType
1 | 1 | Create
1 | 2 | Comment
2 | 2 | Create
1 | 4 | Comment
E voglio finire con un flusso proveniente dal flusso di dati che assomiglia:
ID | TS | num_comments
1 | 1 | 0
1 | 2 | 1
2 | 2 | 0
1 | 4 | 2
voglio il lavoro che questo rollup viene eseguito come un processo di flusso, con nuovi conteggi che vengono compilati quando arrivano nuovi eventi. La mia domanda è: dov'è il posto idiomatico in cui il lavoro memorizza lo stato per l'argomento corrente e il conteggio dei commenti? Supponendo che gli argomenti possano vivere per anni. idee correnti sono:
- scrivere una voce 'corrente' per il tema id per BigTable e in una query DoFn ciò che l'attuale numero di commento per l'argomento ID è in arrivo anche mentre scrivo questo io non lo sono. fan.
- Utilizzare gli ingressi laterali in qualche modo? Sembra che forse questa è la risposta, ma se così fosse non capisco del tutto.
- Configurare un processo di streaming con una finestra globale, con un trigger che si attiva ogni volta che ottiene un record e fare affidamento su Dataflow per mantenere l'intera cronologia del riquadro da qualche parte. (Requisiti di archiviazione illimitata?)
EDIT: Giusto per chiarire, non avrei avuto alcun problema in atto qualsiasi di queste tre strategie, o un milione di diversi altri modi di farlo, io sono più interessato a ciò che è il migliore modo di farlo con Dataflow. Ciò che sarà più resistente al fallimento, dovendo rielaborare la cronologia per un backfill, ecc. Ecc.
EDIT2: c'è attualmente un bug con il servizio dataflow in cui gli errori hanno esito negativo se si aggiungono input ad una trasformazione flatten, che significherà è necessario scartare e ricostruire qualsiasi stato accumulato nel lavoro se si apporta una modifica a un lavoro che include l'aggiunta di qualcosa a un'operazione di appiattimento.
giusto, quindi questo è il numero 3 nella mia lista di potenziali implementazioni. La mia domanda è, è una * buona idea *? Lo stato qui viene mantenuto implicitamente dal flusso di dati. Cosa succede se ho bisogno di riavviare il lavoro? Come si implementerebbe un backfill storico? – bfabry
In base alle modifiche apportate, potresti essere in grado di [Aggiornare la pipeline esistente] (https://cloud.google.com/dataflow/pipelines/updating-a-pipeline). Se le modifiche sono più sostanziali, l'approccio citato funziona se si sta utilizzando un'origine personalizzata che consente di leggere tutti i vecchi dati. –
Un'origine personalizzata come metodo per gestire i backfill ecc. È un'idea interessante. Sembrerebbe risolvere quella domanda. È una buona idea avere quello stato che cresce solo per sempre? Cosa succede se un argomento del forum può essere chiuso, c'è un modo per dire "non ci saranno più eventi a cui teniamo conto per questo ID" in modo che venga scartato? – bfabry