Przetwarzanie strumieni danych
Dane, dane są wszędzie… wszyscy korzystamy intensywnie z różnych cyfrowych usług i w rezultacie coraz więcej serwisów produkuje coraz większe ilości danych. Informacje muszą szybko dotrzeć do właściwych odbiorców, muszą być błyskawicznie przetworzone lub wzbogacone, zdarzenia w jednym systemie powodują wyzwolenie reakcji w innym miejscu. W „czasie rzeczywistym” – co oznacza z minimalnym opóźnieniem.
Kiedy pojawia się dużo danych z jednego lub wielu systemów, automatycznie stajemy przed problemem zapisu tych informacji, ich interpretacji i prezentacji wyników. Jeśli słyszysz o systemach do przetwarzania „strumieni danych”, zwykle problem zapisu dużej ilości danych jest wymieniany jako główny powód do przejścia z tradycyjnych baz danych do platform strumieniowego przetwarzania danych. Ale to nie jest prawda. „Tradycyjne bazy” potrafią przyjąć miliony rekordów w sekundzie (właściwie górny limit nie istnieje). Masz więcej danych?
To co jest prawdziwym wyzwaniem, to dystrybucja danych (także ich bezpieczne przechowanie), wzbogacenie i aktualizacja, odczyt w różnych systemach.
Jak odbywa się przetwarzanie strumieni danych?
System A wykonuje jakąś czynność i rezultatem tej czynności jest informacja. System B bazuje na tych danych, by dostarczyć informację dla użytkownika tego systemu lub przesłać ją do innego systemu. Dla przypomnienia – dzisiaj procesy obsługiwane są przez systemy, które mają budowę modułową, jak taśma produkcyjna w fabryce. Bardzo rzadko jest to wszystkorobiący kombajn.
System A non-stop produkuje więc dane, to jest nasz ‘strumień danych’. System B z różnych przyczyn nie odbiera tych danych bezpośrednio. Po pierwsze nie potrafi. Nie jest tak zaawansowany, by sobie z tym poradzić. Po drugie często potrzebuje danych, które są przetworzone (dane muszą być zagregowane, dołączone inne informacje, niepotrzebne informacje usunięte…). Wymień inne powody.
I tutaj pojawia się pośrednik – „platforma przetwarzania strumieniowego”. Coś, co będzie w stanie odebrać dane, które napływają z systemu A i udostępnić je po przetworzeniu systemowi B. Najczęściej tą platformą jest Kafka. Ale są też inne – na chmurce i takie, które można mieć u siebie. Są też rozwiązania, które jako takie nie służą do odbierania informacji i ich udostępniania, ale zajmują się przetwarzaniem informacji i ich publikacją do platform - skąd mogą być one pobrane przez systemy (np. Apache Flink).
Pentaho - praca z datami
Jak odczytywać daty, konwertować do innego formatu i inne operacje na datach w Pentaho Kettle
Odczyt dat i ich konwersja sprawia wiele problemów niedoświadczonym użytkownikom. Bez zbędnej gadaniny - przejdźmy prosto do tematu.
Odczyt daty
Przy czytaniu plików (Tekstowe, pliki Excela) daty w kolumnie mogą mieć jeden z przykładowych formatów (tylko mała próbka jak mogą być one zapisane):
2023-10-26
26/10/2023
10/26/23 14:15
26/Oct/23 5:43 AM
Często krok odczytujący plik, np. "Text file input" potrafi automatycznie, poprawnie zinterpretować format daty i zaproponować właściwy w opcjach "Format". Czasami jednak musimy ręcznie wstawić tam właściwy. Np. jeśli nasze daty zapisane są w formacie "2023-10-26", w polu "Format" wpisujemy maskę "yyyy-MM-dd". Upewnij się że odczytywana data ma typ danych "Date" - jeśli będzie to "String", nie będziesz mógł użyć takiej informacji jako daty w następnych krokach.
Amerykański zapis daty jest często "dziwaczny" i nie dość że miesiąc występuje tam na początku, często zapisany jest słownie skrótem lub pełną nazwą miesiąca. Dodatkowo nie rzadko godzina występuje w formacie dwunastogodzinnym z następującą po nim określeniu czy chodzi o rano czy popołudnie; AM, PM. I tak gdybyśmy chcieli odczytać datę "26/Oct/23 05:29 AM" musimy użyć maski "dd/MMM/yy h:mm a".
Uwaga, powyższa maska może nie zadziałać jeśli masz system operacyjny w polskiej wersji. Popularne formaty dat zostały wymienione w tym dokumencie Pentaho: https://help.hitachivantara.com/Documentation/Pentaho/9.3/Products/Common_Formats
Apache Flink - przetwarzanie danych
Domyślnym sposobem tworzenia aplikacji Apache Flink jest użycie Flink SQL. Ułatwia on tworzenie aplikacji przetwarzania strumieniowego przy użyciu standardowego SQL. Łatwo jest nauczyć się Flink, jeśli kiedykolwiek pracowałeś z bazą danych lub systemem podobnym do SQL, zgodnym z ANSI-SQL 2011.
Podobnie jak w przypadku wszystkich silników SQL, zapytania Flink działają na szczycie tabel. Różnią się one jednak od tradycyjnej bazy danych, ponieważ Flink nie zarządza danymi składowanymi w statycznych tabelach; zamiast tego jego zapytania działają w sposób ciągły na danych zewnętrznych (z tabel baz danych lub plików powstają tabele dynamiczne w programie Flink a po przetworzeniu danych mogą być z powrotem zapisane do tradycyjnych tabel baz danych i do plików).
Potoki przetwarzania danych Flink zaczynają się od danych źródłowych. Dane źródłowe tworzą wiersze obsługiwane podczas wykonywania zapytania; są to dynamiczne tabele Flink, do których odwołuje się klauzula FROM zapytania. Mogą to być topiki Kafki, bazy danych, systemy plików lub dowolny inny system z którego Flink wie jak korzystać.
Zanim zaczniesz czytać dalej, upewnij się że przeczytałe(a)ś wcześniejsze artykuły jak zainstalować Apache Flink [uruchomienie-apache-flink-w-windows] i jak utworzyć pierwszą aplikację w tym środowisku [pierwsza-transformacja-w-apache-flink]
Raz jeszcze: tabele dynamiczne Flink nie są tabelami baz danych - powstają one poprzez odczytanie tabel baz danych [np MySQL, Oracle], plików [np. CSV] lub pochodzą z innych źródeł [np. Kafka]. Flink używa swoich własnych tabel - przeczytaj o nich więcej na stronie Apache Flink
Tworzymy pierwszą transformację w Apache Flink
Programy i przepływy danych
Podstawowymi programami w Apache Flink są strumienie i transformacje. Koncepcyjnie strumień jest (potencjalnie niekończącym się) przepływem rekordów danych, a transformacja jest operacją, która pobiera jeden lub więcej strumieni wejściowych (źródło) i w rezultacie generuje jeden lub więcej strumieni wyjściowych. W krokach opisanych poniżej stworzymy transformację - batch który pobierze informacje z jednego źródła i zapisze informacje do innego miejsca (nazywanych we Flink 'sinks').
Język i środowisko
Programy Flink można pisać w trzech językach; Scala, Java, Python. Ponieważ Flink napisany jest w Scala, ten język jest najbardziej naturalny. Kodowanie w Java jest także wygodne. Pisanie programów Flik w Python nie jest zbyt wygodne (wymagany interfejs miedzy programem Python a Flink).
Nasz pierwszy program napiszemy w Java. Środowiskiem w którym go stworzymy będzie Eclipse IDE. Program można pobrać ze strony Eclipse - https://www.eclipse.org/ide/.
Opis instalacji i konfiguracji Flink znajdziesz we artykule "Uruchomienie Apache Flink w Windows"