„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 :)
- Jak sugeruje Holden, postawił wszystko na jednej partycji
- 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.
Ale DStream jest podzielony na RDD - czy nie jest możliwe, że drugie RDD zakończy przetwarzanie przed pierwszym? – EugeneMi
Zgodnie z dokumentacją "Domyślnie operacje wyjściowe są wykonywane pojedynczo, a wykonywane są w kolejności zdefiniowanej we wniosku." – Holden