Czym jest Kafka?

Do czego służy Kafka, czy warto się jej uczyć i co ma z tym wszystkim wspólnego Netflix?

Czym jest Kafka?

Historia Kafki

Kafka, znana też jako Apache Kafka, zaczęła powstawać w roku 2009. Tworzył ją zespół programistów firmy LinkedIn, w którym byli m.in. Neha Narkhede, Jay Kreps i Jun Rao. Odeszli później z LinkedIna by stworzyć nową firmę Confluent. Od roku 2011 Kafka jest projektem typu Open Source. W 2012 roku wyszła ona z inkubatora Apache, dzięki czemu stała się pełnoprawnym projektem Apache Software Foundation.

Nazwę tej technologii wybrał Jay Kreps. Pochodzi ona od niemieckojęzycznego pisarza pochodzenia żydowskiego: Franza Kafki, którego twórczość lubił.

Więcej o historii Kafki można dowiedzieć się z wywiadu z Nehą Narkhede:

Czym jest Kafka?

Kafka to platforma do przesyłania strumieniowego zdarzeń (ang. event streaming) wykorzystująca wzorzec Publish-Subscribe. Przesyłanie strumieniowe zdarzeń to cyfrowy odpowiednik centralnego systemu nerwowego ludzkiego ciała. Ma za zadanie przechwytywanie danych w czasie rzeczywistym ze źródeł zdarzeń takich jak mobilne urządzenia, aplikacje czy bazy danych w formie strumieni zdarzeń. Zdarzenia są przechowywane w strukturze zwanej Logiem, by później mogły zostać odczytane i przetworzone gdzie indziej. Log to uporządkowana lista zdarzeń numerowana od zera (liczba porządkowa to tzw. offset). Struktury te są wykorzystywane w partycji tzw. Topiców.

Zdarzeniem może być m.in.:

  • stworzenie nowego konta w serwisie
  • aktualizacja adresu e-mail użytkownika w jego profilu na stronie
  • złożenie przez użytkownika zamówienia na określone produkty
  • zmiana stanu pacjenta podłączonego do aparatury medycznej
  • wykonanie przelewu w banku

Kafka posiada architekturę rozproszoną, która toleruje awarie (pracuje dalej w przypadku awarii jednego z serwerów) i nie traci zdarzeń dzięki tzw. replikacji.

Ponadto Kafka może być skalowana do setek serwerów (brokerów) i milionów zdarzeń na sekundę. Cechuje się wysoką wydajnością, gdzie opóźnienie jest niższe niż 10 milisekund. Można powiedzieć, że działa w czasie rzeczywistym co jest jej największą zaletą.

Przypadki użycia Kafki

Wyobraź sobie, że tworzysz projekt składający się z dwóch aplikacji. Pierwsza aplikacja generuje zdarzenia i wysyła je do drugiej aplikacji, gdzie zostają w jakiś sposób przetworzone:

W tej chwili cały proces jest bardzo prosty. Jednak w miarę upływu czasu i rozwoju Twojego projektu dochodzą kolejne cztery aplikacje: dwie generujące zdarzenia i dwie przetwarzające zdarzenia. Każda z aplikacji generująca zdarzenia komunikuje się z każdą aplikacją przetwarzającą zdarzenia. Skomplikowanie jak widać poniżej rośnie:

Dla każdej aplikacji przetwarzającej zdarzenia musisz zaimplementować 3 integracje z aplikacjami generującymi zdarzenia. Oznacza to, że w sumie musisz zaimplementować aż 9 integracji. Liczba ta bardzo szybko rośnie, gdy zwiększa się liczba aplikacji komunikujących się ze sobą. Cały proces można jednak uprościć poprzez rozdzielenie aplikacji od siebie Kafką:

Kafkę można użyć m.in. do:

  • Oddzielanie zależności systemowych co pozwala zmniejszyć obciążenie np. baz danych i systemów. Jest to pomocne przy mikroserwisach (małych aplikacjach, które wykonują jedno powierzone im zadanie)
  • Przesyłania komunikatów przez co może zastąpić takie systemy jak Apache ActiveMQ czy RabbitMQ
  • Śledzenia aktywności na stronie internetowej np. akcji wykonanych przez użytkownika
  • Zbierania logów aplikacji z różnych serwisów i umieszczaniu ich w jednym miejscu, gdzie dalej będą przetwarzane
  • Monitorowania metryk aplikacji, dzięki czemu można stworzyć statystyki
  • Przetwarzania zdarzeń w potoku (ang. pipeline), gdzie zdarzenia są generowane i przetwarzane w wielu etapach.

Co Netflix ma wspólnego z Kafką?

Na początku Netflix używał Apache Chukwa do zbierania zdarzeń i zapisywania ich do Amazon's Simple Storage Service (w skrócie S3) używając Apache Hadoop a następnie przetwarzaniu plików S3 i zapisywaniu ich z użyciem Apache Hive w formacie Apache Parquet. Cały proces miał opóźnienie (ang. latency) 10 sekund. Jest to wystarczające dla procesów skanujących dane z częstotliwością 1 dnia lub 1 godziny.

Analitykę w czasie rzeczywistym umożliwiło Netflixowi przejście z Chukwy na Kafkę. Z danych z 2019 roku wynika, że Netflix przetwarza setki miliardów zdarzeń każdego dnia i 2,5 milionów zdarzeń na sekundę z milisekundowym opóźnieniem.

Netflix używa Kafki za każdym razem gdy wyświetla Ci w czasie rzeczywistym rekomendacje innych tytułów na napisach końcowych obecnie oglądanego tytułu. Zdarzeniem jest tu wyświetlenie napisów końcowych. Zdarzenia łapki w górę lub w dół dla danego tytułu również są wysyłane do Kafki i dalej przetwarzane w celu wyświetlania lepszych rekomendacji. Jest to tzw. personalizacja profilu Netflixa.

Więcej o użyciu Kafki w Netflixie można poczytać na ich technicznym blogu:

Kafka – Netflix TechBlog
Read writing about Kafka in Netflix TechBlog. Learn about Netflix’s world class engineering efforts, company culture, product developments and more.

Czy warto uczyć się Kafki?

Zdecydowanie tak! Jej popularność cały czas rośnie i jej znajomość jest wymagana w coraz większej ilości ogłoszeń o pracę. Kafka jest używana przez tysiące firm, w tym ponad 60% z rankingu Fortune 100 (coroczny ranking 100 największych amerykańskich firm klasyfikowanych wg przychodów brutto). Wymienię kilka znanych firm:

  • Wspomniany już Netflix
  • Cloudflare używa Kafki do potoku przetwarzania logów co umożliwia przetwarzanie setek miliardów zdarzeń dziennie z tysięcy serwerów
  • LinkedIn używa Kafki do zapobiegania spamu czy zbierania danych użytkownika by lepiej proponować rekomendacje osób, które możesz znać, ale nie masz ich jeszcze w sieci znajomych
  • The New Tork Times używa Kafki do przesyłania artykułów na różne aplikacje i systemy dzięki czemu czytelnicy mogą mieć do nich dostęp natychmiast.
  • Uber używa Kafki do zbierania danych użytkownika, taksówki i przejazdu w czasie rzeczywistym, aby obliczyć cenę przejazdu.

Podsumowanie

Apache Kafka zaczęła być tworzona w 2009 roku przez zespół programistów firmy LinkedIn. Od 2011 roku jest projektem typu Open Source, zaś od 2012 roku jest częścią projektów Apache.

Kafka to platforma do przesyłania strumieniowego zdarzeń (ang. event streaming) wykorzystująca wzorzec Publish-Subscribe. Przechwytuje dane w czasie rzeczywistym ze źródeł zdarzeń w formie strumieni zdarzeń i przechowuje je w strukturze zwanej Logiem, czyli uporządkowanej liście zdarzeń numerowanej od zera, by później mogły zostać odczytane i przetworzone gdzie indziej.

Posiada architekturę rozproszoną, która toleruje awarie (pracuje dalej w przypadku awarii jednego z serwerów) i nie traci zdarzeń dzięki tzw. replikacji. Może być skalowana do setek serwerów (brokerów) i milionów zdarzeń na sekundę.

Jest używana przez tysiące firm (w tym ponad 60% z rankingu Fortune 100) m.in.: Netflix, Cloudflare, LinkedIn, The New York Times czy Uber i posiada wiele przypadków użycia.

Liczba komentarzy:

Zaloguj się lub dołącz do społeczności Javowców, aby móc uczestniczyć w dyskusji 🙂