Przetwarzanie równoległe i strumieniowe

Message brokers, architektura przetwarzania strumieniowego

Stream

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

image

Dane strumieniowe

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

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

image

Przetwarzanie wczoraj i dziś

Przetwarzanie wsadowe (batch processing) - dane są gromadzone w partiach, 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. Nie trzeba czekać na przybycie danych w formie wsadowej.

image

Przetwarzanie wczoraj i dziś

Przetwarzanie wsadowe ma tę zaletę, że jest w stanie przeprowadzić dogłębną analizę, w tym uczenie maszynowe, 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 i oznaczanie odchyleń od wartości oczekiwanych.

image

Stream processing

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

image

Przetwarzanie strumieniowe

Aplikacje używane do pracy ze strumieniami danych potrzebują dwóch głównych funkcji

  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

image

Zastosowania

Dzięki analizie strumienia danych w czasie rzeczywistym możesz:

Projektować, rozwijać i wdrażać zaawansowane narzędzia analityczne, które monitorują dowolną liczbę strumieni zdarzeń

Wykrywać i analizować wzorce zachowań

Reagować na zdarzenia w momencie ich wystąpienia

Natychmiast podejmować inteligentne działania bez interwencji człowieka

Przewidywać zdarzenia

Use Cases

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

Przykład - sensory

image

image

Sensor cena

image

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

Sensor wersja domowa

image

Mierzy wilgotność, temperature, nasłonecznienie, żyzność.

Sensor wersja domowa

image

Sensor - budowa

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

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

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

Elementy sieci

Przekaźnik (Receiver) - otrzymuje za pomocą fal radiowych dane z poszczególnych sensorów i przesyła je dalej do Smartbox’a.

Smartbox - minikomputer, który zbiera i analizuje dane z poszczególnych sensorów umieszczonych na szklarni i przesyła je do chmury lub serwera.

image

Wymagania

Zbudowanie systemu zdolnego do :

Alarmowania - informacja o przekroczeniu oczekiwanego stanu

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

Generowanie podsumowań - dzienne nasłonecznienie, max/min temperatura itp.

Problemy skali

Tysiące sensorów wysyłających dane do serwera.

Dane pochodzą z różnych stref czasowych.

Różne wymagania / alerty zależne od typu uprawy, klienta itp.

image

Implementacja

Przykład implementacji w języku python

image

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

image

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.

Niezbędne do przetwarzania strumieniowego jest procesowanie danych. Procesowanie danych to możliwość ciągłego obliczania statystyk podczas poruszania się w strumieniu danych.

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

image

Architecture

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

The Message Broker

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

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

image

The Message Broker

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.

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

image

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.

image

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.

Data analytics and BI

Po przygotowaniu danych przesyłanych strumieniowo do wykorzystania przez procesor strumieniowy 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.

Streaming Data Storage

Opcja przechowywania danych strumieniowych :
W bazie danych — na przykład analiza danych oparta na PostgreSQL lub Amazon Redshift Easy SQL. Trudno skalować i zarządzać. Przechowywanie w chmurze jest drogie.
W brokerze komunikatów – na przykład przy użyciu pamięci trwałej Kafka Agile, nie ma potrzeby organizowania danych w tabele. Łatwy w konfiguracji, bez dodatkowych komponentów. Przechowywanie w Kafce jest drogie. Wydajność Kafki jest najlepsza do odczytywania ostatnich danych (z pamięci podręcznej).
W datalake (jeziorze danych) — na przykład Amazon S3 Agile, nie ma potrzeby organizowania danych w tabele. Niski koszt przechowywania. Duże opóźnienia utrudniają analizę w czasie rzeczywistym. Trudne do wykonania analizy SQL.

Storage

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.

image

Message Brokers

  1. Kinesis
  2. 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.

image

Kinesis

Plusy
Ł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.
Minusy
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ń Java/Scala 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.

image

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).

image

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.

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.

image

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.

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 możliwości zarządzania klastrami, udostępniania, automatycznego skalowania, równoważenia obciążenia, zarządzania konfiguracją i nie tylko.

image

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

image

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 bez konieczności pisania kodu.

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

image

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.

image

Bilioteki do procesowania danych

image

Spark

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

Ta platforma działa w pamięci RAM w klastrach.

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. W rzeczywistości firmy takie jak Intel, Yahoo, Groupon, Trend Micro i Baidu już polegają na Apache Stream.

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

image

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.

image

References

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