Z artykułu dowiesz się:
- Co to jest Apache Kafka
- Jakie są podstawowe elementy architektury Kafki
- Dlaczego warto korzystać z Apache Kafka
- Jak Netflix wykorzystuje Kafkę
- W jakich branżach Kafka znajduje zastosowanie
Poznaj bliżej Apache Kafka
Kiedy w grę wchodzą pieniądze i dostrzega się potencjał czerpania coraz większych korzyści z prowadzonych działań, grzechem byłoby z tego nie skorzystać. Netflix nie pozwala takim okazjom przemknąć tak po prostu koło nosa. Jeśli chodzi o dane, które pozyskuje, to ich ilość jest tak duża, że zwykły śmiertelnik nawet nie pomyślałby o tym, aby je poukładać, a co dopiero sensownie wykorzystać do optymalizacji swoich działań. Zespół Netflixa myśli jednak innymi kategoriami i dlatego korzysta z platformy do przetwarzania strumieni danych Apache Kafka. Brzmi abstrakcyjnie? Może trochę…
Na początek, zgodnie z dobrymi obyczajami wypada się przedstawić. Kafka jest nowoczesną platformą rozwiązującą problem pozyskiwania danych z różnych źródeł. Służy do ich strumieniowego przesyłu i przetwarzania. Projekt zrodził się w 2011 roku i został zainicjowany przez LinkedIn. Celem było opracowanie takiego oprogramowania, który pozwalałoby na efektywne zarządzanie danymi w czasie rzeczywistym. Bingo, udało się! Apache Kafka dostępna jest na licencji open source, a jej funkcjonalności chwile po uruchomieniu poszerzyły Confluent Platform oraz Confluent Cloud. To system rozproszony, a w jego typowej konfiguracji działają co najmniej 3 serwery w klastrze i mogą one obsługiwać dowolną liczbę klientów.
Kafka jest przystosowana do współpracy z kluczowymi języki programowania. Python czy Java posiadają aktywnie rozwijane biblioteki do łatwej integracji kodu biznesowego z Kafką. Platforma jest więc niezwykle elastyczna, ponieważ można ją bez problemu dostosować do indywidualnych potrzeb. Co najważniejsze, jej rozproszona architektura pozwala na obsługę ogromnej ilości danych, zachowując przy tym dużą przepustowość i naprawdę minimalne opóźnienia. Właśnie dlatego Netflix bez dłuższego zastanowienia wybrał Apache Kafka jako wsparcie dla swoich zbiorów danych. Świetnie radzi sobie z przetwarzaniem rozbudowanych zbiorów danych, jak żadne inne podobne narzędzie.
W odróżnieniu od typowego brokera wiadomości (tak, często Kafka właśnie z tego typu narzędziami jest utożsamiana), dane nie są usuwane w momencie odebrania wiadomości przez adresata. No właśnie, jak to mówią, w przyrodzie nic nie ginie, a jeśli chodzi o dane, dzisiaj pozbywanie się ich tak po prostu jest zwyczajnym strzałem w kolano, czego Netflix postanowił nie robić. Słusznie, czerpie z tego niemałe korzyści. Jakie, o tym za chwilę.
Żeby nie być zielonym. Podstawowe pojęcia związane z Kafką
Żeby się jednak nie pogubić za szybko w środowisku Kafki, trzeba nie tylko poznać jej zastosowanie i charakter, ale również kluczowe pojęcia, które są przy okazji jej tematu używane. Jej architektura składa się z wielu elementów. Wszystkie oczywiście są przemyślane i nie znalazły się tutaj przypadkiem. Mają przypisane sobie role, z których dotychczas wywiązywały się perfekcyjnie i na horyzoncie nie widać jakichkolwiek negatywnych zmian w tym obszarze. Zatem, jak wygląda architektura Apache Kafka?
- Producenci – to oni są odpowiedzialni za publikowanie rekordów w tematach. Rolę tę pełnią systemy i aplikacje generujące dane. Następnie przesyłają je do Kafki, gdzie są przetwarzane.
- Konsumenci – to również aplikacje i systemy, ale z kolei te, które subskrybują tematy i korzystają z rekordów danych. Korzystają ze swoich indywidualnych wymagań, odczytują dane z partycji i przetwarzają je.
- Brokery – to nic innego, jak serwery Kafki w klastrze. Odpowiadają za przechowywanie i replikację danych. Pod skrzydłami każdego jednego brokera jest jedna lub więcej partycji. To brokerzy komunikują się zarówno z producentami, jak i konsumentami.
- Grupy konsumentów – konsumenci łączą się w grupy po to, aby koordynować korzystanie z różnych partycji tematu. Dzięki temu możliwe jest przetwarzanie równoległe i skalowanie zużycia.
- Tematy – to kategorie lub kanały, w których publikowane są przez producentów rekordy danych. Tematy w dalszej kolejności dzieli się na partycje.
- Partycje – to mniejsze jednostki tematów. To właśnie one pozwalają na poziomą skalowalność i przetwarzanie równoległe w klastrze. Odpowiadają za dużą przepustowość dzięki rozpraszaniu danych w ramach jednego tematu wśród wielu brokerów.
- Klaster – łączy wielu współpracujących ze sobą brokerów. Klaster odpowiada za zwiększoną odporność na awarie oraz umożliwia replikację danych pomiędzy brokerami, aby zapewnić wysoką dostępność.
- Złącza i strumienie – to dodatkowe komponenty Kafki. Kafka Connect pozwala na szybką i bezproblemową integrację z zewnętrznymi systemami danych. Kafka Streams z kolei udostępnia interfejs API przeznaczony do tworzenia aplikacji dedykowanych do przetwarzania strumieniowego na platformie.
W czym mogę pomóc, czyli zalety korzystania z Apache Kafka
No dobrze, ale dlaczego Kafka a nie inne oprogramowanie o podobnym przeznaczeniu? Są ku temu twarde powody i trudno się dziwić największym graczom na rynku, że wybierają właśnie ten system. Apache Kafka charakteryzuje się dużą tolerancją na błędy. Świetnie radzi sobie z automatycznym zrównoważaniem obciążenia, jakie jest przetwarzane pomiędzy konsumentami. To proste – dynamicznie wzrasta obciążenie wiadomości, Ty wtedy wdrażasz plan B i dodajesz więcej węzłów i konsumentów. Ale chwila, musisz być przewidywalny i wcześniej zdefiniować wystarczającą liczbę partycji. Jesteś bezpieczny!
Na Kafkę decyduje się wiele firm, ponieważ to projekt typu open source. Twórcom chodziło m.in. o stosunkowo łatwą łączność z innymi systemami o podobnym przeznaczeniu. Poza tym do systemu można łatwo i szybko dodawać producentów i konsumentów różnego typu. Twoja aplikacja się rozrasta, a Ty bez problemu możesz dostosowywać system do jej zmieniających się potrzeb i nowego środowiska pracy, nie musisz wcale przepisywać jej architektury na nowo. Brzmi sensownie, prawda?
To też może Cię zainteresować, jeśli cenisz sobie oczywiście bezpieczeństwo danych. Kafka dysponuje wbudowaną strukturą uwierzytelniania. Producenci i konsumenci są skonfigurowani do parametrów zapisu i odczytu z określonych kolejek. Jeden scentralizowany mechanizm pozwala na zarządzanie dostępem do wszystkich danych.
To chyba już jest jasne, dlaczego z Kafki korzystają tacy giganci, jak LinkedIn, Uber, Airbnb, Twitter, PayPal, Tinder czy Pinterest, no i oczywiście Netflix. Obsługa danych z Kafką jest po prostu nie tylko łatwa i przyjemna, ale przede wszystkim korzystna i opłacalna.
Jak to robią najlepsi, czyli jak Netflix korzysta z Apache Kafka
To teraz trochę praktyki. Po co Netflixowi Kafka, ale tak konkretnie? To, że do przetwarzania danych, to już wiemy, tylko że to właśnie Kafka stoi częściowo za sukcesem Netflixa i pewnie każdy chociaż częściowo chciałby znać odpowiedź na pytanie, dlaczego.
Tak ogólnie – Netflix wykorzystuje Apache Kafka do obsługi swojej infrastruktury strumieniowego przesyłania wydarzeń w czasie rzeczywistym. Ok, ale po co? A no po to, aby monitorować dane i zdarzenia, które są tu i teraz, analizować je i podejmować możliwie jak najszybsze decyzje dotyczące dostarczania treści i rekomendacji użytkowników.
Netflix stosuje strategię zarządzania aplikacją opartą na mikrousługach. Chodzi o to, aby uzyskać równowagę między abstrakcją danych a szybkością skalowania firmy. Kiedy w danym projekcie dużo się dzieje i wiele jednostek ma na siebie wzajemny wpływ, to nietrudno o niepowodzenia. Wyobraźmy sobie sytuację, kiedy planujemy zmianę daty produkcji programu. Będzie to miało odzwierciedlenie w planie programowym, a to z kolei przełoży się na przepływ środków pieniężnych i budżet na dany rok. Jeśli doszłoby do jakiejkolwiek awarii w mikrousługach, to skutkowałoby to utratą synchronizacji wielu obliczeń i co gorsza utratą niektórych danych o milionowych wartościach.
I właśnie dlatego jest Kafka, która pozwala na budowę infrastruktury o naturze asynchronicznej. Możliwe jest oddzielenie transakcji, a zdarzenia stają się niezmiennym strumieniem, z którego można odtworzyć cały stan systemu.
Nie tylko Netflix. Kafka na świeczniku
A jak robią to inni? Przykładowo Uber obsługuje biliony wiadomości dziennie. Trudno sobie to wyobrazić, to potężne narzędzie. Kafka Streams jest przez Ubera wykorzystywana m.in. do dopasowywania klientów i kierowców. Z kolei LinkedIn obsługuje obecnie 7 bilionów wiadomości dziennie, które są podzielone na 100 000 tematów. Platforma X (dawniej Twitter) potrzebuje Kafki do obsługi dużych strumieni danych w postaci tweetów. Pozwala ona na ich przetwarzanie i dostarczanie w czasie rzeczywistym. Airbnb współpracuje z Kafką w zakresie obsługi danych o rezerwacjach. PayPal z kolei potrzebuje jej do przetwarzania transakcji w czasie rzeczywistym i zarządzania ryzykiem.
Z Kafki korzysta też wiele instytucji finansowych, aby obsługiwać szybkie źródła danych w czasie rzeczywistym m.in. z systemów transakcyjnych i giełd. Jest to również narzędzie, które znalazło swoje zastosowanie w branży gamingowej. Kafka pozwala na obsługę interakcji graczy tu i teraz. Umożliwia optymalizację gry i personalizację doświadczeń. Oczywiście Apache Kafka świetnie odnajduje się w e-commerce. Odpowiada za śledzenie zachować użytkowników i dostarczanie spersonalizowanych rekomendacji. Kafka bierze czynny udział w dostosowywaniu oferty do dynamicznie zmieniających się preferencji zakupowych klientów.
Tam, gdzie w grę wchodzą duże ilości danych, Kafka czuje się jak ryba w wodzie. Obsługuje biliony wiadomości, skaluje się liniowo i integruje się z innymi systemami. Trudno jej nie lubić, naprawdę ułatwia zarządzanie danymi, które są dzisiaj jedną z najcenniejszych walut w biznesie.