pulsar, kafka - join streams

0

Pisze apkę do importu danych w oparciu myślę że o pulsar. Idea jest taka że początkowo robię split danych per record i wrzucam je do swoich topiców. Każdy topic ma oczywiście swojego consumera który jakoś tam procesuje te dane i robi insert do bazy. I gdzieś na końcu byłby Processor który zbierałby dane z kolejek i złożyłby finalny obiekt. Proste do implementacji w oparciu o wątki ale tutaj potrzebuję chyba jeszcze czegoś co pozwoliło by łatwo zrobić taki join na streamach. Mógłbym oczywiście mieć wielowątkowego consumera który subskrybował by te wszystkie topiki ale gdzieś musiałbym przechowywać częściowe obiekty, dochodzi problem transakcyjności, obsługi błędów itd chyba nie tędy droga

0

Nie mylisz topików z partycjami?

0
Charles_Ray napisał(a):

Nie mylisz topików z partycjami?
raczej nie, 1 topic dla danego typu encji np Person, + partycjonowanie dla skalowalności
Przypuszczam że potrzebuję czegoś takiego https://databricks.com/blog/2018/03/13/introducing-stream-stream-joins-in-apache-spark-2-3.html ale nie znam zupełnie sparka i nie wiem czy na pewno wszystko dobrze zadziała.

1

To już nie rozumiem, piszesz o Kafce, a teraz pojawia się Spark. Może opisz problem, jaki rozwiązujesz. Co ma robić ten system?

0

Napisałem w 1 poście. Apka w oparciu najprawdopodobniej o apache pulsar który uważany jest za "lepszą" kafkę chociaż potencjalnie kafka też wchodzi w grę. Spark wyszedł dodatkowo przy researchu jak synchronizować róże strumienie ale sparka nie znam i wolałbym nie wprowadzać kolejnej technologi. Co do problemu to podam na jakimś przykładzie może będzie lepiej zrozumiałe. Mam import danych np osoby z jej danymi teleadresowymi. W pierwszym kroku robię split i wrzucam dane typu Person, Address, Phone do osobnych topików. Konsument dla topika Address zapisuje nowy adres do bazy i wrzuca nowy message z id adresu do nowego topika typu Address-Processed. Tak samo dla telefonu. Teraz główny konsument który subskrybuje topic Person musi zebrać te wszystkie idiki z topików typu Address-Processed, Phone-Processed i zapisać do bazy encje Person i odpowiednie relacje do pozostałych tabel. I problem jest z zebraniem wszystkich danych w konsumencie ponieważ jak wiadomo procesowanie jest strumieniowe i kolejność nie musi być zachowana. Mogę to zrobić "ręcznie" ale wtedy bardziej się skupiam na technicznych problemach a nie biznesowych albo może powinienem jeszcze czegoś innego użyć

1

To ja bym się w takim zainteresował https://www.confluent.io/blog/ksql-streaming-sql-for-apache-kafka/ (patrzysz na topici jak na tabele), ostatnio Confluent nieźle miesza wokół ekosystemu Kafki. Pulsara nie znam, więc się nie wypowiem. KSQL też nie =)

EDIT: przed KSQL bardziej prymitywnym zagadnieniem są chyba streamy: https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Streams+Join+Semantics, ale generalnie szedłbym w tę stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1