Spark: przetwarzanie wielu tematów Kafki równolegle

Używam spark 1.5.2. Muszę uruchomić Spark streaming z Kafką jako źródłem streamingu. Muszę czytać z wielu tematów w Kafce i przetwarzać każdy temat inaczej.

    Czy to dobry pomysł, aby robić to w tej samej pracy? Jeśli tak, czy powinienem utworzyć pojedynczy strumień z wieloma partycjami lub inny strumień dla każdego tematu? Używam kafka direct steam. O ile wiem, spark uruchamia długo działające odbiorniki dla każdej partycji. Mam stosunkowo małe skupisko, 6 węzłów z 4 rdzeniami każdy. Jeśli mam wiele tematów i partycji w każdym temacie, czy wydajność będzie miała wpływ, ponieważ większość wykonawców jest zajęta długimi odbiornikami? Proszę mnie poprawić, jeśli moje zrozumienie jest złe tutaj
Author: nish, 2015-12-23

2 answers

Poczyniłem następujące spostrzeżenia, na wypadek gdyby komuś pomogło:

  1. w kafka direct stream, odbiorniki nie są uruchamiane tak długo, jak zadania. Na początku każdej partii inerval, najpierw dane są odczytywane z Kafki w executorach. Po przeczytaniu część przetwarzania przejmuje kontrolę.
  2. jeśli tworzymy pojedynczy strumień z wieloma tematami, tematy są odczytywane jeden po drugim. Również filtrowanie strumienia D dla zastosowania innej logiki przetwarzania dodałoby kolejny krok do job
  3. Tworzenie wielu strumieni pomogłoby na dwa sposoby: 1. Nie musisz stosować operacji filtrowania, aby przetwarzać różne tematy w inny sposób. 2. Możesz odczytywać wiele strumieni równolegle (w przeciwieństwie do jednego po drugim w przypadku pojedynczego strumienia). Aby to zrobić, istnieje nieudokumentowany parametr konfiguracyjny spark.streaming.concurrentJobs*. Postanowiłem więc utworzyć wiele strumieni.

    sparkConf.set("spark.streaming.concurrentJobs", "4");
    
 16
Author: nish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-23 10:07:46

Myślę, że właściwe rozwiązanie zależy od Twojego przypadku użycia.

Jeśli twoja logika przetwarzania jest taka sama dla danych ze wszystkich tematów, to bez wątpienia jest to lepsze podejście.

Jeśli logika przetwarzania jest inna, myślę, że otrzymujesz pojedyncze RDD ze wszystkich tematów i musisz utworzyć pairedrdd dla każdej logiki przetwarzania i obsługiwać ją osobno. Problem polega na tym, że tworzy to rodzaj grupowania do przetwarzania, a ogólna prędkość przetwarzania będzie określona przez temat który potrzebuje najdłuższego czasu na przetworzenie. Tematy z mniejszą ilością danych muszą więc czekać, aż dane ze wszystkich tematów zostaną przetworzone. Jedną z zalet jest to, że jeśli jego dane timeseries, a następnie przetwarzanie przebiega razem, co może być dobrą rzeczą.

Kolejną zaletą prowadzenia niezależnych zadań jest to, że uzyskujesz lepszą kontrolę i możesz dostosować udostępnianie zasobów. Na przykład: zadania, które proces temat o dużej przepustowości można przypisać wyższy CPU / pamięci.

 6
Author: Atul Soman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-23 11:02:24