Rurociąg przetwarzania dużych zbiorów danych i zdarzeń

Paul JULIEN, Mewen LE RESTE i Guillaume VERNERET są trzema stażystami programistów w vente-privee Epitech Innovation Lab. Ta współpraca ma przyczynić się do ich cyklu studiów w Epitech Paris. Pracowali razem na platformie internetowej, która ma na celu ułatwienie testowania w zespołach vente-privee. '

Termin „big data” jest coraz częściej wykorzystywany przez przedsiębiorstwa. Wielu z nich chce wdrożyć infrastruktury, aby zbudować wydajne środowisko. Kiedy nie wiesz dokładnie, co robisz, bardzo trudno jest znaleźć technologie, które naprawdę odpowiadają naszemu zapotrzebowaniu. Świat dużych zbiorów danych często może wydawać się bardzo nieprzejrzysty, postaramy się to wyjaśnić w tym artykule.

Co to jest Big Data?

Termin Big Data jest używany od roku 1998, dzięki Johnowi Masheyowi, głównemu naukowcowi w Silicon Graphics, w artykule „Big Data… and Next Wave of InfraStress”. Duże dane są powiązane z trzema V: objętością, różnorodnością i prędkością. Objętość dotyczy ilości danych mierzonych w gigabajtach do yottabajtów (1⁰²⁰ bajtów). Prędkość to czas, w którym dane mogą być przetwarzane, dziś mówimy o czasie rzeczywistym. Wreszcie, różnorodność polega na strukturze, może być nieuporządkowana, ale mogą to być również dane zdjęciowe, audio lub wideo. Istnieje wiele różnych rodzajów danych.

Big Data 3Vs

Podsumowując w kilku liczbach, co minutę użytkownicy Facebooka wysyłają ponad 31 milionów wiadomości, a ponad 2 miliony filmów. Każdego dnia odbywa się ponad 3 miliardy wyszukiwań w Google. W 2020 r. Skumulowana ilość dużych zbiorów danych wzrośnie do 44 trylionów GB (według Newgenapps i Domo).

Mam mnóstwo danych, co mogę z nimi zrobić?

Przedsiębiorstwa są coraz bardziej zainteresowane problematyką dużych zbiorów danych, ponieważ mają rzeczywiste interesy ekonomiczne. Na przykład w przypadku mediów internetowych możesz przeprowadzić analizę strumienia kliknięć aplikacji, dodać reklamy kierowane i przewidzieć przeciętnych użytkowników w danym okresie. Tematyka, taka jak maszyna uczenia się lub nauki o danych, jest dziś niezbędna. Oto schemat uproszczonego potoku przetwarzania zdarzeń:

Potok przetwarzania zdarzeń

Celem jest optymalizacja przetwarzania danych (zdarzeń) w różnych częściach:

· Broker: przechowywanie surowych danych.

· Strumień: przetwarzanie danych.

· Baza danych: Traktowane przechowywanie danych.

· Wizualizator: dane wizualne.

Wszechświat dużych zbiorów danych odpowiada na pytania, które wiele osób zadawało sobie wcześniej. Mimo wszystko istnieją pewne problemy związane z dużymi zbiorami danych. Po pierwsze, przechowywanie danych musi być zoptymalizowane, aby obniżyć koszty. Zatem prywatność danych jest niezbędna, jak widzimy, w dużych społeczeństwach, takich jak Facebook czy Google, występują problemy z prywatnością (patrz sprawa Cambridge Analytica). Problem, który będziemy badać, związany jest z wyborem technologii.

Jak wybrać odpowiednie technologie?

Technologie Big Data są liczne, czasem trudno jest znaleźć właściwą drogę. Głównym aktorem dużych zbiorów danych jest Apache, wśród ich najbardziej znanych technologii są Kafka, Hadoop lub Spark. Dla niektórych wyróżniają się w swojej dziedzinie, na przykład Hadoop, który pozwala zoptymalizować pamięć za pomocą zaawansowanego algorytmu zaimplementowanego przez Google: MapReduce lub Kafka, który jest używany jako broker wiadomości, jest bardzo wydajny, gdy chcesz dystrybuować dużo danych w różne strumienie.

W przypadku przetwarzania strumienia istnieje wiele technologii. Jeśli przeanalizujesz inny istniejący przypadek użycia, łatwiej jest znaleźć właściwą drogę. Weźmy przykład przetwarzania strumienia danych, dziś istnieje wiele technologii w tej dziedzinie i wszystkie mają zalety i wady. Kilka firm, takich jak Google (Cloud DataFlow, która stała się Apache Beam) lub Spotify (SCIO), opracowało własną technologię rozwiązania swojego problemu. Jeśli weźmiemy przykład użycia Vente-Privee, wiele danych jest gromadzonych za pomocą interfejsu API, który popycha je do Kafki. Problemem było agregowanie danych w czasie rzeczywistym lub z wykorzystaniem historii, przy użyciu tej samej technologii, aby można ją było łatwiej wdrożyć. Oto nasz uproszczony przypadek użycia.

Sprawa szybkiego użycia

Sprawa jest bardzo prosta: w Kafce mamy dużo danych (niektóre zdarzenia), musimy wygenerować KPI (Key Performance Indicator) i wepchnąć zagregowane dane do bazy danych. Musimy teraz znaleźć odpowiednie technologie, najpierw do wdrożenia przetwarzania strumieniowego. W tym celu dysponujemy pewnymi technologiami:

Są to frameworki, które ułatwią agregację danych, większość z nich używa języka Java.

Dokonaliśmy szybkiego testu porównawczego, aby uprościć nasz wybór, wymagania były proste:

· Dokumentacja: Jakość wsparcia.

· Kompatybilność: Jest kompatybilny z wdrożonymi technologiami.

· Rozpoczęcie pracy: Czas na sprawdzenie koncepcji.

· Wdrożenie: Można uruchomić i wdrożyć za pomocą Docker.

· Optymalizacja: jakość technologii, gdy wchodzisz głębiej.

Metodologia określania kryteriów była prosta, testowaliśmy punkt, jeśli nie był negatywny i blokował, przeszliśmy na następną technologię.

W takim przypadku Beam jest najbardziej odpowiedni. Szczegółowo obejmuje wiele technologii big data, takich jak odczyt Kafka, wejście / wyjście Cassandra i wiele innych. Sposób zarządzania przepływami danych za pomocą systemu rurociągów jest bardzo zoptymalizowany. Ten sposób biegania jest również bardzo przydatny, masz wybór do biegania „z pierwszej ręki” lub z konkretnymi biegaczami, takimi jak Spark lub Flink. Co prowadzi do dużego pozytywnego punktu Apache Beam, skalowalności. Gdy masz dużą ilość danych do przetworzenia, musisz uruchomić wiele agregatorów jednocześnie, potrzebujesz skalowalnej technologii, takiej jak Beam, aby uniknąć wąskich gardeł. Istnieją pewne negatywne punkty, ale nie blokowanie, takie jak wyjście baz danych szeregów czasowych, w naszym przypadku po prostu używamy bazy danych Scylla (nakładka C ++ Cassandra) jako szeregu czasowego, z jej oficjalnym wizualizatorem danych, Apache Zeppelin. Ponadto Apache Beam jest młodą technologią, więc brakuje społeczności, a zrozumienie jej działania jest bardzo skomplikowane, jeśli nie znasz języka Java.

Po wybraniu zestawu technologii konieczne będzie ich wdrożenie, wdrożenie i przetestowanie. Środowisko dużych zbiorów danych rośnie bardzo szybko i ważne jest, aby mieć je pod ręką. Upewnij się, że wszystkie technologie mogą zostać przetestowane i wdrożone (Gitlab CI jest do tego bardzo wygodny). Wielu programistów pracuje nad dużymi zbiorami danych, ale społeczność jest nadal bardzo słaba, bardzo ważny jest także wkład w nią.

Oto kilka linków, aby przejść dalej:

https://www.mongodb.com/big-data-explained

https://data-artisans.com/what-is-stream-processing

https://kafka.apache.org/

https://beam.apache.org/

https://www.scylladb.com/

https://zeppelin.apache.org/

Autorzy: Paul Julien, Guillaume VERNERET, Mewen LE RESTE