2016-06-29 13 views
4

Ich habe Spark-Streaming-Anwendung, die Kafka-Nachrichten verbraucht. Und ich möchte alle Nachrichten bearbeiten, die die letzten 10 Minuten zusammenkommen. Sieht aus wie es zwei Ansätze sind Arbeit zu tun getan:Spark-Streaming: Batch-Intervall vs Fenster

val ssc = new StreamingContext(new SparkConf(), Minutes(10)) 
val dstream = .... 

und

val ssc = new StreamingContext(new SparkConf(), Seconds(1)) 
val dstream = .... 
dstream.window(Minutes(10), Minutes(10)) 

und ich möchte nur klarstellen ist es Leistungsunterschiede zwischen ihnen

+2

Sie können einen schnellen Benchmark durchführen und herausfinden !!! Aber da "val ssc = new StreamingContext (neue SparkConf(), Minutes (10)") die Verarbeitung einmal in 10 Minuten dosiert, ist dies die beste Verarbeitung. Die Fensterversion erstellt einen Job, um die neuesten Informationen von Kafka alle 1 Sek. Zu erhalten und alle 10 Minuten zu aggregieren !!! – rakesh

Antwort

4

Manchmal müssen wir wissen, was passiert in den letzten n Sekunden alle m Sekunden. Als einfaches Beispiel nehmen wir an, das Batch-Intervall beträgt 10 Sekunden und wir müssen alle 30 Sekunden wissen, was in den letzten 60 Sekunden passiert ist. Hier werden 60 Sekunden Fensterlänge und 30 Sekunden Diaintervall genannt. Sagen wir, die ersten 6 Chargen sind A, B, C, D, E, F, die Teil des ersten Fensters sind. Nach 30 Sekunden wird sich ein zweites Fenster bilden, das D, E, F, G, H, I haben wird. Wie Sie sehen können, sind zwischen dem ersten und zweiten Fenster 3 Stapel vorhanden.

Eine Sache zu erinnern über Fenster ist, dass Spark auf das gesamte Fenster im Speicher hält. Im ersten Fenster wird RDD A mit F kombiniert, wobei der Union-Operator verwendet wird, um eine große RDD zu erstellen. Es wird 6-mal Speicher benötigt und ist in Ordnung, wenn Sie das brauchen. In einigen Fällen müssen Sie möglicherweise einige Status-Stapel in Stapel übertragen. Dies kann mit updateStateByKey erreicht werden.

Verwandte Themen