Title: Przetwarzanie równoległe i strumieniowe

PRS

Przetwarzanie równoległe i strumieniowe

Wykład 8

Dane sensoryczne, serwer danych, broker danych, biblioteki przetwarzania strumieniowego

Strumień

Strumień (stream) odnosi się do nieprzerwanego ciągu danych, który "nie ma" punktu początkowego ani końcowego.

Dane strumieniowe

Dane strumieniowe to dane, które są generowane w sposób ciągły, zwykle w dużą intensywnością i z dużą prędkością.

Strumieniowe źródło danych zazwyczaj składa się z "ciągłych" danych ze znacznikami czasu, które rejestrują zdarzenia na bieżąco — takie jak np. kliknięcie przez użytkownika łącza na stronie internetowej lub rejestrujących odczyt czujnika informujący o aktualnej temperaturze.

Przetwarzanie danych wczoraj i dziś

Przetwarzanie wsadowe (batch processing) - dane są gromadzone w grupach, po czym są przetwarzane, przechowywane lub analizowane w zależności od potrzeb.

Przetwarzanie strumieniowe - przepływ danych wejściowych jest ciągły i jest przetwarzany w czasie rzeczywistym. Wynik przetwarzania jest dostępny natychmiastowo.

Przetwarzanie danych wczoraj i dziś

Przetwarzanie wsadowe ma tę zaletę, że jest w stanie przeprowadzić dogłębną analizę, w tym zadania uczenia maszynowego, a jego wadą jest duże opóźnienie.

Przetwarzanie strumienia ma tę zaletę, że ma małe opóźnienie, a wadą jest możliwość wykonania tylko prostej analizy, takiej jak obliczanie wartości średnich w oknie czasowym, wykrycie alarmu itp.

Stream processing

Przetwarzanie strumieni często wiąże się z wieloma zadaniami na przychodzących seriach danych („strumień danych”), które mogą być wykonywane równolegle.

Przetwarzanie strumieniowe

Aplikacje używane do pracy ze strumieniami danych oparte są o dwa główne aspekty:

1. Przechowywania danych
2. Przetwarzania danych

Przetwarzanie musi być odporne na błędy czy utratę danych oraz (w większości przypadków) zachowywać ich kolejność.

Wiadomości wysyłane do strumienia są zwykle małe, mierzone w kilobajtach, ale jest ich bardzo, bardzo dużo!

Wyzwania przetwarzania stumieniowego

- obługa danych o wielkości do kilku gigabitów na sekundę,
- skalowalność i dostosowanie do zmiennego obciążenia,
- otrzymanie danych i szybkie ich przetworzenie i udostępnienie ich dalszym użytkownikom.

Zastosowania

- Projektowanie, rozwijanie i wdrażanie zaawansowanych narzędzi analitycznych, które monitorują dowolną liczbę strumieni zdarzeń
- Wykrywanie i analizowa wzorców zachowań
- Reagowanie na zdarzenia w momencie ich wystąpienia
- Inteligentne działania bez interwencji człowieka
- Przewidywanie zdarzeń

Przypadki użycia

- Clickstream analytics - śledzenie zachowania użytkowników na stronach internetowych
- Real-time analytics for sensor data.
- Cyber security - ataki ddos
- Fraud Detection - w transakcjach bankowych
- Log analysis - wykrywanie anomalii w systemie

Przykład sensory

Sensor

Mierzy zawartość wody w podłożu (WC), temperaturę i przewodność elektryczną gleby (EC).

Sensor wersja domowa

Mierzy wilgotność, temperaturę, nasłonecznienie, żyzność.

Sensor ceny

Sensor - budowa

Sensor jest prostym urządzeniem zasilanym baterią, które służy wyłącznie do pomiarów.

Sensor komunikuje się ze światem najczęściej poprzez technologię bluetooth (low energy bluetooth).

W realnym zastosowaniu sensor będzie zawsze komunikował się bezprzewodowo z odbiornikiem / agregatorem danych lub pośrednikiem przesyłającym informacje dalej do chmury.

Cel użycia sensorów

Zbudowanie systemu zdolnego do :

Alarmowania - informacja o przekroczeniu oczekiwanych stanów odczytów

Sterowanie zmian - utrzymanie poziomu nawodnienia, strategie nawodnienia, nawożenia itp.

Generowanie raportów - dzienne nasłonecznienie, max/min temperatura itp.

Problem skali

- Tysiące sensorów wysyłających dane do serwera.
- Dane pochodzą z różnych stref czasowych.
- Różne ustawienia / alerty zależne od typu uprawy, klienta itp.

Połączenie z sensorem

Przykład implementacji w języku python

Analiza danych - proces

ETL

ETL (extract, transform and load) - wyodrębnianie, przekształcanie i zapisywanie, to proces integracji danych, który łączy dane z wielu źródeł danych w jeden, spójny magazyn danych, który jest zapisywany do hurtowni danych lub innego systemu docelowego.

Streaming data architecture

Architektura przetwarzania strumieniowego to struktura komponentów oprogramowania stworzonych do przyjmowania i przetwarzania dużych ilości danych przesyłanych strumieniowo z wielu źródeł jednocześnie.

Procesowanie danych umożliwia zarządzanie, monitorowanie i analizę danych strumieniowych w czasie rzeczywistym.

Architektura

Architektura przetwarzania strumieniowego zawiera cztery kluczowe elementy konstrukcyjne:

1. The Message Broker
2. Stream processing framework (Batch and Real-time ETL Tools)
3. Data Analytics / Serverless Query Engine
4. Streaming Data Storage

Broker wiadomości

Jest to element, który pobiera dane ze źródła zwanego producentem, opcjonalnie tłumaczy je na standardowy format wiadomości i przesyła dalej.

Inne komponenty (konsumenci) mogą następnie nasłuchiwać i wykorzystywać komunikaty przekazywane przez brokera.

Broker wiadomości

Pierwsza generacja brokerów komunikatów, takich jak RabbitMQ i Apache ActiveMQ, opierała się na paradygmacie Message Oriented Middleware (MOM).

Później pojawiły się hiperwydajne platformy przesyłania wiadomości (często nazywane procesorami strumieniowymi), które są bardziej odpowiednie dla paradygmatu przesyłania strumieniowego.

Popularne narzędzia do przetwarzania strumieniowego to Apache Kafka i Amazon Kinesis Data Streams, Google processing cloud, Azure IoT Hub.

Stream processing framework

Strumienie danych z brokera komunikatów muszą zostać zagregowane, przekształcone i ustrukturyzowane, zanim dane będą mogły być analizowane za pomocą narzędzi analitycznych opartych na SQL.

Służą do tego narzędzia do procesowania danych strumieniowych, pobierają one zdarzenia z kolejek, a następnie łączą, przekształcają lub agregują dane.

Wynikiem działania processingu może być wywołanie API, akcja, wizualizacja, alert lub w niektórych przypadkach nowy strumień danych.

Stream processing framework

Kilka przykładów bibliotek przetwarzania strumieniowego typu open source (narzędzi ETL) to Apache Storm, Spark i Apache Flink.

AWS rekomenduje wykorzystywanie Apache Flink lub Spark oraz własne rozwiązanie Amazon Kinesis Data Analytics.

Microsoft Azure obsługuje wdrażanie Apache Spark i Apache Storm jako typ klastra usługi HDInsight. Ponadto platforma Azure udostępnia swoje autorskie rozwiązanie o nazwie Stream Analytics.

W przypadku GCP kluczowymi platformami do przetwarzania danych strumieniowych są Dataproc, w skład którego wchodzą Spark i Flink oraz osobne autorskie rozwiązanie, jakim jest Dataflow.

Analiza danych a BI

Po przetworzeniu danych przez procesor można je dodatkowo analizować.

Istnieje wiele różnych podejść do analizy danych strumieniowych - przez zapytania SQL, rozwiązania NoSQL, transformacje.

Przykłady narzędzi: Amazon Athena, Amazon Redshift, Elasticsearch, Cassandra, Sisense, Power BI, Tableau.

Przechowywanie danych

Data Lake to najbardziej elastyczna i tania opcja przechowywania danych o zdarzeniach, ale jej prawidłowe skonfigurowanie i utrzymanie jest dość trudne.

Schema on-read - tworzenie struktury w danych w momencie odczytu.

Wszyscy dostawcy chmury dostarczają odpowiednie komponenty służące jako jeziora danych.

Przykłady brokerów danych

Kinesis

Apache Kafka

Kinesis

Kinesis Data Streams to usługa przetwarzania, która może nieprzerwanie przechwytywać gigabajty danych na sekundę z setek tysięcy źródeł.

Kinesis Data Analytics może przetwarzać strumienie danych w czasie rzeczywistym za pomocą SQL lub Apache Flink.

Kinesis

Zalety

- Łatwy w konfiguracji i utrzymaniu
- Może obsłużyć dowolną ilość danych przesyłanych strumieniowo
- Integruje się z zestawem narzędzi Big Data firmy Amazon, takim jak Amazon Kinesis Data Analytics, Amazon Kinesis Data Firehose i AWS Glue Schema Registry.

Wady

- Jego komercyjna usługa w chmurze jest wyceniana za godzinę za fragment
- Dokumentacja nie jest prosta
- Nie oferuje wsparcia dla bezpośredniego przesyłania strumieniowego

Kafka

Apache Kafka to otwarta, rozproszona platforma strumieniowania zdarzeń dla wysokowydajnych potoków danych, analizy strumieniowej, integracji danych i aplikacji o znaczeniu krytycznym.

Pierwotnie opracowany przez LinkedIn jako aplikacja kolejki wiadomości, Apache Kafka został udostępniony na zasadach open source i przekazany Apache w 2011 roku. Następnie Kafka przekształcił się w platformę do przesyłania strumieniowego danych o otwartym kodzie źródłowym.

Kafka

Kafka działa w klastrze w środowisku rozproszonym, które może obejmować wiele centrów danych.

Klaster Kafka składa się z wielu brokerów Kafka (węzłów w klastrze).

Kafka

Temat (topic) jest przeznaczony do przechowywania strumieni danych w uporządkowanej i podzielonej na partycje niezmiennej sekwencji rekordów. Każdy temat jest podzielony na wiele partycji, a każdy broker przechowuje jedną lub więcej z tych partycji.

Partycje są replikowanie, czyli ich kopie mogą znajdować się na wielu serwerach.

Kiedy odczytujemy jeden konkretny rekord z pliku, system operacyjny wczytuje kilkaset (lub więcej) następnych rekordów do pamięci operacyjnej.

Kafka

Aplikacje wysyłają strumienie danych do partycji za pośrednictwem producentów; strumienie danych mogą być następnie wykorzystywane i przetwarzane przez inne aplikacje za pośrednictwem konsumentów.

Wielu producentów i konsumentów może jednocześnie publikować i pobierać wiadomości.

Kafka

Przygotowanie Apache Kafka zajmuje kilka dni lub tygodni, aby skonfigurować w pełni gotowe środowisko produkcyjne, w oparciu o wiedzę specjalistyczną, którą posiadasz w swoim zespole.

Jako system rozproszony typu open source wymaga własnego klastra, dużej liczby węzłów (brokerów), replikacji i partycji w celu zapewnienia odporności na awarie i wysokiej dostępności systemu.

Kafka

Konfiguracja klastra Kafka wymaga nauki (jeśli nie ma wcześniejszego doświadczenia w konfigurowaniu i zarządzaniu klastrami Kafka), praktyki inżynierii systemów rozproszonych oraz umiejętności zarządzania klastrami, udostępniania, automatycznego skalowania, równoważenia obciążenia, zarządzania konfiguracją i nie tylko.

Kafka

Kafka używa modelu pull. Konsumenci żądają partii wiadomości z określonym offsetem.

Kafka przechowuje zdarzenia w jednym dużym pliku na dysku, który jest dołączany sekwencyjnie w miarę przetwarzania nowych zdarzeń.

Dane są uporządkowane sekwencyjnie; jeśli dwóch konsumentów odczyta tę samą partycję, obaj odczytają dane w tej samej kolejności. Oznacza to, że wielu niepowiązanych konsumentów zobaczy tę samą „rzeczywistość”.

Konsumentów możemy łączyć w grupy wtedy każdy będzie otrzymywał unikalne komunikaty od danego producenta (zrównoleglenie przetwarzania).

Kafka streams

Kafka Streams to interfejs API Java do przetwarzania strumieni dostarczany przez Apache Kafka, który umożliwia programistom dostęp do filtrowania, łączenia, agregowania i grupowania.

Kafka streams jest "natywnym" rozwiązaniem do procesowania danych oferowanym przez Kafkę.

Kafka

Plusy
     Integruje się z istniejącymi aplikacjami
     Oferuje niskie opóżnienie do 10 milisekund
     Zmniejsza potrzebę wielokrotnych integracji
     Służy jako doskonały zamiennik tradycyjnych brokerów wiadomości.
Minusy
     Brakuje ważnego paradygmatu przesyłania komunikatów, takiego jak kolejki punkt-punkt
     Ma tendencję do zachowywania się nieoptymalnie, jeśli nie jest odpowiednio skonfigurowana

Podsumowanie

W środowisku przetwarzania strumienia zdarzeń istnieją dwie główne klasy technologii:

1. system przechowujący zdarzenia oraz
2. technologia, która pomaga programistom pisać aplikacje podejmujące działania na zdarzeniach.

Biblioteki do procesowania danych

Apache Flink

Apache Flink to biblioteka do przetwarzania rozproszonego do obliczeń na nieograniczonych i ograniczonych strumieniach danych, która jest niezwykle szybka w złożonym przetwarzaniu strumieniowym.

W rzeczywistości jest w stanie przetwarzać transmisje na żywo w ciągu milisekund, ponieważ można go zaprogramować tak, aby przetwarzał tylko nowe, zmienione dane.

Flink z łatwością umożliwia wykonywanie przetwarzania wsadowego i strumieniowego na dużą skalę, oferując wgląd w czasie rzeczywistym.

Flink, jest odporny na awarie, co oznacza, że ​​awaria systemu nie wpłynie na cały klaster.

Apache Flink

Programy dla Apache Flink można pisać w różnych językach, takich jak Python, Scala, SQL i Java.

Flink jest znany z łatwości użytkowania i łatwej integracji z innymi narzędziami do przetwarzania dużych zbiorów danych typu open source, takimi jak Kafka i Hadoop.

Flink opiera się na koncepcji strumieni i przekształceń. Dane trafiają do systemu przez źródło i wychodzą przez ujście.

Apache Flink

Plusy
     Oferuje niskie opóźnienia, wysoką przepustowość
     Prosty i przejrzysty interfejs użytkownika
     Dynamicznie analizuje i optymalizuje zadania
     Czysty interfejs API strumienia danych i dokumentacja
Minusy
     Integracja z ekosystemem Hadoop YARN może być trudna
     Obsługuje tylko Scala, Java, Python (nie w pełni)
     Ograniczone wsparcie ze strony społeczności

Apache Spark

Spark jest platformą przetwarzania danych typu open source, znaną ze swojej szybkości i łatwości użytkowania.

Sparl działa w pamięci RAM w klastrach.

Spark to jedna z wiodących platform przesyłania strumieniowego w czasie rzeczywistym do wszystkiego, od przetwarzania wsadowego i uczenia maszynowego po SQL na dużą skalę i przesyłanie strumieniowe dużych zbiorów danych.

Apache Spark

Użytkownicy Sparka mogą łatwo pisać aplikacje w Python, SQL, R, Scala lub Java, dzięki czemu są wszechstronne i łatwe w obsłudze.

Apache Spark

Plusy
     Jest odporny na błędy
     Obsługuje wiele języków
     Obsługuje zaawansowaną analizę
     Wydajność jest bardzo szybka
     Łatwe przetwarzanie wsadowe
Minusy
     Stroma krzywa uczenia się
     Zużywa dużo pamięci
     Brak wbudowanego algorytmu buforowania
     Może być skomplikowany w konfiguracji i wdrażaniu

Storm

Storm to to proste rozwiązanie do przetwarzania nieograniczonych strumieni danych big data.

Niektóre z dużych marek korzystających ze Storm to Spotify, Yelp i WebMD.

Jedną z największych zalet Storm jest to, że został zaprojektowany do użytku z dowolnym językiem programowania, oferując użytkownikom dużą elastyczność.

Inne fakty, które warto wiedzieć o Storm, to to, że jest odporny na błędy, skalowalny i łatwo integruje się z technologiami, z których już korzystasz.

Storm

Referencje

https://www.altexsoft.com/blog/real-time-analytics/

https://www.integrate.io/blog/5-real-time-streaming-platforms-big-data/

https://hazelcast.com/glossary/stream-processing/

https://www.upsolver.com/blog/streaming-data-architecture-key-components

https://www.upsolver.com/blog/comparing-apache-kafka-amazon-kinesis

https://www.onaudience.com/resources/what-is-data-stream-and-how-to-use-it/

https://datacadamia.com/data/processing/stream_vs_batch

https://www.grodan.com/

https://www.informatica.com/se/resources/articles/what-is-etl.html

https://luminousmen.com/post/schema-on-read-vs-schema-on-write

https://softwareskill.pl/apache-kafka-wprowadzenie