2015-06-04 16 views
5

È possibile applicare l'elaborazione in ordine in Spark Streaming? Il nostro caso d'uso è la lettura di eventi da Kafka, in cui ogni argomento deve essere elaborato in ordine.Elaborazione in corso in Spark Streaming

Da quello che posso dire è impossibile: ogni flusso è suddiviso in RDD e RDDS vengono elaborati in parallelo, quindi non c'è modo di garantire l'ordine.

risposta

1

È possibile forzare l'RDD a essere una singola partizione, che rimuove qualsiasi parallelismo.

+0

Ma il DStream è suddiviso in RDD: non è possibile che il secondo RDD finisca di essere elaborato prima del primo? – EugeneMi

+0

Secondo la documentazione "Per impostazione predefinita, le operazioni di output vengono eseguite una alla volta e vengono eseguite nell'ordine in cui sono definite nell'applicazione." – Holden

1

"Il nostro caso d'uso è la lettura eventi da Kafka, in cui ogni argomento deve essere elaborata in ordine."

Come per la mia comprensione, ogni argomento forme Separata Dstreams. Quindi dovresti elaborare ogni Dspeams uno dopo l'altro.

Ma molto probabilmente si intende che si desidera elaborare ogni evento che si ottiene da 1 argomento Kafka in ordine. In tal caso, non dovresti dipendere dall'ordinamento del record in un RDD, piuttosto dovresti taggare ogni record con il timestamp quando li vedi per la prima volta (probabilmente modo a monte) e usare questo timestamp per ordinare in seguito.

avete altre scelte, che fanno male :)

  1. Come suggerisce Holden, mettere tutto in una partizione
  2. partizione con qualche funzione crescente in base alla ricezione di tempo, in modo da riempire le partizioni uno dopo l'altro . Quindi puoi usare zipWithIndex in modo affidabile.
Problemi correlati