2015-06-04 12 views
5

Czy można wymusić przetwarzanie w poszczególnych procesach w Spark Streaming? Naszym przypadkiem jest czytanie wydarzeń z Kafki, gdzie każdy temat musi być przetworzony w kolejności.Przetwarzanie w kolejnoś ci w Spark Streaming

Z tego co wiem, niemożliwe jest - każdy strumień w podziale na RDD, a RDDS są przetwarzane równolegle, więc nie ma sposobu, aby zagwarantować porządek.

Odpowiedz

1

Można zmusić RDD do pojedynczej partycji, co usuwa wszelkie równoległości.

+0

Ale DStream jest podzielony na RDD - czy nie jest możliwe, że drugie RDD zakończy przetwarzanie przed pierwszym? – EugeneMi

+0

Zgodnie z dokumentacją "Domyślnie operacje wyjściowe są wykonywane pojedynczo, a wykonywane są w kolejności zdefiniowanej we wniosku." – Holden

1

„Nasz przypadek użycia jest odczyt zdarzeń z Kafki, gdzie każdy wątek musi być przetwarzane w porządku.”

Według mojego rozeznania, co tworzy wątek separate Dstreams. Więc powinieneś przetwarzać każdy Dstream jeden po drugim.

Ale najprawdopodobniej masz na myśli, że chcesz przetworzyć każde wydarzenie, które otrzymujesz z 1 tematu Kafki. W takim przypadku nie powinieneś polegać na zamawianiu rekordu w RDD, raczej powinieneś oznaczyć każdy rekord znacznikiem czasu, gdy zobaczysz je po raz pierwszy (prawdopodobnie w górę strony) i użyć tego znacznika czasu do późniejszego zamówienia.

masz innych opcji, które są złe :)

  1. Jak sugeruje Holden, postawił wszystko na jednej partycji
  2. partycji z pewnym wzrostem funkcji na podstawie czasu odbioru, więc wypełnić partycji jeden po drugim . Następnie możesz niezawodnie używać zipWithIndex.