Czym jest Apache Kafka?

Apache Kafka to rozproszona platforma do przesyłania strumieniowego zdarzeń typu open-source, która przetwarza dane w czasie rzeczywistym. Kafka doskonale sprawdza się w obsłudze aplikacji opartych na zdarzeniach i budowaniu niezawodnych potoków danych, oferując niskie opóźnienia i wysoką przepustowość dostarczania danych.

Dzisiaj miliardy źródeł danych nieprzerwanie produkują strumienie informacji, często w formie zdarzeń - podstawowych struktur danych, które rejestrują każde wystąpienie w systemie lub środowisku.

Typowo zdarzenie to akcja, która wywołuje kolejną akcję jako część procesu. Klient składający zamówienie, wybierający miejsce w samolocie czy wypełniający formularz rejestracyjny - to wszystko przykłady zdarzeń. Zdarzenie nie musi angażować człowieka - na przykład raport podłączonego termostatu o temperaturze w danym czasie to również zdarzenie.

Przesyłanie strumieniowe zdarzeń oferuje aplikacjom możliwość natychmiastowego reagowania na nowe informacje. Platformy do przesyłania strumieniowego danych, takie jak Apache Kafka, pozwalają deweloperom budować systemy, które konsumują, przetwarzają i działają na danych w momencie ich przybywania, zachowując przy tym kolejność i niezawodność każdego zdarzenia.

Kafka ewoluował w najszerzej używaną platformę przesyłania strumieniowego zdarzeń, zdolną do pobierania i przetwarzania bilionów rekordów dziennie bez zauważalnych opóźnień wydajności, wspierając skalowalne wolumeny. Ponad 80% organizacji z listy Fortune 500 używa Kafka, w tym Target, Microsoft, AirBnB i Netflix, aby dostarczać klientom doświadczenia oparte na danych w czasie rzeczywistym.

Pochodzenie Apache Kafka

W 2011 roku LinkedIn opracował Apache Kafka, aby sprostać rosnącym potrzebom firmy dotyczącym systemu o wysokiej przepustowości i niskich opóźnieniach, zdolnego do obsługi masowych wolumenów danych zdarzeń w czasie rzeczywistym. Zbudowany przy użyciu Java i Scala, Kafka został później udostępniony jako open source i przekazany do Apache Software Foundation.

Podczas gdy organizacje już wcześniej wspierały lub używały tradycyjnych systemów kolejek komunikatów (np. Amazon SQS od AWS), Kafka wprowadził fundamentalnie inną architekturę systemu komunikatów.

W przeciwieństwie do konwencjonalnych kolejek komunikatów, które usuwają wiadomości po konsumpcji, Kafka zachowuje wiadomości przez konfigurowalny czas, umożliwiając wielu konsumentom niezależne czytanie tych samych danych. Ta zdolność czyni Kafka idealnym do komunikacji i event sourcingu, przetwarzania strumieni oraz budowania potoków danych w czasie rzeczywistym.

Dzisiaj Kafka stał się de facto standardem dla przesyłania strumieniowego zdarzeń w czasie rzeczywistym. Branże, które używają Kafka, obejmują finanse, e-commerce, telekomunikację i transport, gdzie zdolność do szybkiego i niezawodnego obsługiwania dużych wolumenów danych jest niezbędna.

Jak działa Apache Kafka

Kafka to platforma rozproszona; działa jako odporny na awarie, wysoce dostępny klaster, który może obejmować wiele serwerów, a nawet wiele centrów danych.

Kafka ma trzy podstawowe możliwości:

  1. Umożliwia aplikacjom publikowanie lub subskrybowanie strumieni danych lub zdarzeń

  2. Przechowuje rekordy dokładnie w kolejności, w jakiej wystąpiły, z odpornością na awarie i trwałym przechowywaniem

  3. Przetwarza rekordy w czasie rzeczywistym w momencie ich wystąpienia

Producenci (aplikacje lub tematy) zapisują rekordy do tematów nazywanych logami, które przechowują rekordy w kolejności ich wystąpienia względem siebie. Tematy są następnie dzielone na partycje i rozprowadzane w klastrze brokerów Kafka (serwerów).

W każdej partycji Kafka utrzymuje kolejność rekordów i przechowuje je trwale na dysku przez konfigurowalny okres retencji. Podczas gdy kolejność jest gwarantowana w ramach partycji, nie jest gwarantowana między partycjami. W oparciu o potrzeby aplikacji, konsumenci mogą niezależnie czytać z tych partycji w czasie rzeczywistym lub z określonego przesunięcia.

Kafka zapewnia niezawodność poprzez replikację partycji. Każda partycja ma lidera (na jednym brokerze) i jednego lub więcej następców (repliki) na innych brokerach. Ta replikacja pomaga tolerować awarie węzłów bez utraty danych.

Historycznie Kafka polegał na Apache ZooKeeper, scentralizowanej usłudze koordynacji dla rozproszonych brokerów. W 2021 roku Kafka wprowadził tryb KRaft (Kafka Raft Protocol), eliminując potrzebę ZooKeeper.

Ta zmiana zmniejsza zewnętrzne zależności, upraszcza architekturę i czyni klastry Kafka bardziej odpornymi na awarie oraz łatwiejszymi w zarządzaniu i skalowaniu.

API Apache Kafka

Deweloperzy mogą wykorzystać możliwości Kafka poprzez cztery główne interfejsy programistyczne (API):

  • Producer API

  • Consumer API

  • Streams API

  • Connector API

Producer API

Producer API umożliwia aplikacji publikowanie strumienia do tematu Kafka. Po zapisaniu rekordu do tematu nie można go zmienić ani usunąć. Zamiast tego pozostaje w temacie przez wstępnie skonfigurowany czas, przez dwa dni lub do wyczerpania miejsca na dysku.

Consumer API

Consumer API umożliwia aplikacji subskrybowanie jednego lub więcej tematów oraz pobieranie i przetwarzanie strumienia przechowywanego w temacie. Może pracować z rekordami w temacie w czasie rzeczywistym lub pobierać i przetwarzać przeszłe rekordy.

Streams API

To API opiera się na Producer i Consumer API i dodaje złożone możliwości przetwarzania, które umożliwiają aplikacji wykonywanie ciągłego przetwarzania strumieni front-to-back. Konkretnie, Streams API obejmuje konsumowanie rekordów z jednego lub więcej tematów, analizowanie, agregowanie lub transformowanie ich zgodnie z wymaganiami oraz publikowanie wynikowych strumieni do tych samych lub innych tematów.

Podczas gdy Producer i Consumer API mogą być używane do prostego przetwarzania strumieni, Streams API umożliwia rozwój bardziej zaawansowanych aplikacji strumieniowania danych i zdarzeń.

Connector API

To API pozwala deweloperom budować łączniki, które są wielokrotnego użytku producentami lub konsumentami, upraszczającymi i automatyzującymi integrację źródła danych z klastrem Kafka.

Przypadki użycia Apache Kafka

Deweloperzy używają Kafka głównie do tworzenia dwóch rodzajów aplikacji:

  1. Potoki danych strumieniowych w czasie rzeczywistym

  2. Aplikacje strumieniowe w czasie rzeczywistym

Potoki danych strumieniowych w czasie rzeczywistym

Aplikacje zaprojektowane specjalnie do przenoszenia milionów i milionów rekordów danych lub zdarzeń między systemami enterprise, na dużą skalę i w czasie rzeczywistym. Aplikacje muszą przenosić je niezawodnie, bez ryzyka korupcji, duplikacji danych lub innych problemów, które typowo występują przy przenoszeniu tak ogromnych wolumenów danych z wysoką prędkością.

Na przykład instytucje finansowe używają Kafka do przesyłania tysięcy transakcji na sekundę przez bramy płatności, usługi wykrywania oszustw i systemy księgowe, zapewniając dokładny przepływ danych w czasie rzeczywistym bez duplikacji czy utraty.

Aplikacje strumieniowe w czasie rzeczywistym

Aplikacje napędzane strumieniami rekordów lub zdarzeń, które generują własne strumienie. W cyfrowym świecie spotykamy te aplikacje codziennie.

Przykłady obejmują serwisy e-commerce, które aktualizują dostępność produktów w czasie rzeczywistym, lub platformy dostarczające spersonalizowane treści i reklamy oparte na żywej aktywności użytkowników. Kafka napędza te doświadczenia poprzez przesyłanie interakcji użytkowników bezpośrednio do silników analitycznych i rekomendacyjnych.

Inne przypadki użycia Apache Kafka

Mikrousługi

Kafka ułatwia komunikację między mikrousługami poprzez umożliwienie asynchronicznej komunikacji opartej na zdarzeniach. Ta funkcja pozwala usługom wyzwalać akcje w innych usługach bez ścisłego sprzężenia, wspierając skalowalne i rozłączone architektury systemów.

Konteneryzowane środowiska cloud-native

Kafka integruje się bezproblemowo z platformami cloud-native używającymi Docker do konteneryzacji i Kubernetes do orkiestracji kontenerów. Ta konfiguracja wspiera skalowalną, odporną na awarie komunikację opartą na zdarzeniach, minimalizując potrzebę ręcznego zarządzania infrastrukturą.

Data lakes i hurtownie danych

Kafka działa jako potok danych w czasie rzeczywistym między źródłami danych a platformami przechowywania, takimi jak data lakes czy hurtownie danych. Ta funkcja umożliwia przesyłanie strumieniowe dużych wolumenów danych dla czasowej ingesti i analizy, co jest niezbędne dla nowoczesnych przepływów analitycznych i business intelligence.

Obsługa danych IoT (Internet of Things)

Kafka jest dobrze dostosowany do przetwarzania ciągłych strumieni danych z urządzeń IoT, umożliwiając routing w czasie rzeczywistym danych o wysokiej przepustowości i niskich opóźnieniach do miejsc docelowych takich jak bazy danych, silniki analityczne czy narzędzia monitoringu.

Ekosystem Apache Kafka

Kafka integruje się z kilkoma innymi technologiami, z których wiele jest częścią Apache Software Foundation (ASF). Organizacje typowo używają tych technologii w większych architekturach opartych na zdarzeniach, przetwarzaniu strumieni lub rozwiązaniach big data analytics.

Ekosystem Apache Kafka obejmuje:

  • Apache Spark

  • Apache NiFi

  • Apache Flink

  • Apache Hadoop

  • Apache Camel

  • Apache Cassandra

Apache Spark

Apache Spark to silnik analityczny do przetwarzania danych na dużą skalę. Możesz używać Spark do wykonywania analityki na strumieniach dostarczanych przez Apache Kafka i do tworzenia aplikacji przetwarzania strumieni w czasie rzeczywistym, takich jak analiza clickstream.

Apache Flink

Apache Flink to silnik do wykonywania obliczeń na dużą skalę na strumieniach zdarzeń z konsystentnie wysoką prędkością i niskimi opóźnieniami. Flink może pobierać strumienie jako konsument Kafka, wykonywać operacje w czasie rzeczywistym oparte na tych strumieniach i publikować wyniki dla Kafka lub innej aplikacji.

Apache Hadoop

Apache Hadoop to rozproszony framework oprogramowania, który pozwala przechowywać masowe ilości danych w klastrze komputerów do użytku w big data analytics, machine learning, data mining i innych aplikacjach opartych na danych, które przetwarzają dane strukturalne i niestrukturalne.

Apache Cassandra

Apache Cassandra to wysoce skalowalna baza danych NoSQL zaprojektowana do obsługi dużych ilości danych na wielu serwerach bez pojedynczego punktu awarii. Kafka jest powszechnie używany do przesyłania strumieniowego danych do Cassandra dla ingesti danych w czasie rzeczywistym i budowania skalowalnych, odpornych na awarie aplikacji.

Kafka vs. RabbitMQ

RabbitMQ to popularny broker komunikatów open-source, który umożliwia aplikacjom, systemom i usługom komunikację poprzez tłumaczenie protokołów komunikacyjnych. Ponieważ Kafka rozpoczął jako broker komunikatów (i nadal może być używany jako taki), a RabbitMQ wspiera model komunikacji publish/subscribe (między innymi), Kafka i RabbitMQ są często porównywane jako alternatywy.

Jednak służą różnym celom i są zaprojektowane do różnych rodzajów przypadków użycia. Na przykład:

  • Tematy Kafka mogą mieć wielu subskrybentów

  • Każda wiadomość RabbitMQ może mieć tylko jednego konsumenta

  • Tematy Kafka są trwałe

  • Wiadomości RabbitMQ są usuwane po konsumpcji

Przy wyborze między nimi istotne jest rozważenie specyficznych potrzeb aplikacji, takich jak przepustowość, trwałość wiadomości i opóźnienia.

Kafka jest dobrze dostosowany do strumieniowania zdarzeń na dużą skalę, podczas gdy RabbitMQ doskonale sprawdza się w scenariuszach wymagających elastycznego routingu wiadomości i przetwarzania o niskich opóźnieniach.

Apache Kafka i open-source AI

Integracja Apache Kafka i open-source AI transformuje sposób, w jaki organizacje obsługują dane w czasie rzeczywistym i sztuczną inteligencję. W połączeniu z narzędziami open-source AI, Kafka umożliwia aplikację pre-trenowanych modeli AI do żywych danych, wspierając podejmowanie decyzji w czasie rzeczywistym i automatyzację.

Open-source AI uczyniło sztuczną inteligencję bardziej dostępną, a Kafka zapewnia infrastrukturę potrzebną do przetwarzania danych w czasie rzeczywistym. Ta konfiguracja eliminuje potrzebę przetwarzania wsadowego, pozwalając biznesom działać na danych natychmiast po ich wyprodukowaniu.

Na przykład firma e-commerce może używać Kafka do przesyłania strumieniowego interakcji klientów, takich jak kliknięcia czy przeglądanie produktów, w momencie ich wystąpienia. Pre-trenowane modele AI następnie przetwarzają te dane w czasie rzeczywistym, dostarczając spersonalizowane rekomendacje lub targeted oferty.

Korzyści Apache Kafka

Przetwarzanie danych w czasie rzeczywistym

Kafka umożliwia potoki danych w czasie rzeczywistym i aplikacje strumieniowe. Pozwala systemom publikować, subskrybować i przetwarzać strumienie rekordów w momencie ich wystąpienia, wspierając przypadki użycia takie jak monitoring, alerty i analityka.

Wysoka wydajność i skalowalność

Tematy Kafka są partycjonowane i replikowane w taki sposób, że mogą skalować się do obsługi wysokich wolumenów równoczesnych konsumentów bez wpływu na wydajność.

Bezpieczeństwo i zgodność

Apache Kafka wspiera szyfrowanie danych zarówno w tranzycie, jak i w spoczynku, wraz z konfigurowalnymi kontrolami dostępu. Te funkcje pomagają organizacjom chronić wrażliwe dane i dostosować się do branżowych standardów zgodności.

Wysoka dostępność

Kafka zapewnia wysoką dostępność poprzez replikację danych między wieloma brokerami. Wiadomości pozostają dostępne nawet w przypadku awarii węzła, a system kontynuuje działanie bez utraty danych lub przestoju.

Uproszczone zarządzanie

Kafka zawiera narzędzia monitoringu, konfiguracji i automatyzacji, które pomagają zmniejszyć obciążenie operacyjne. Dobrze integruje się z platformami orkiestracji i zarządzania, czyniąc wdrażanie i skalowanie bardziej zarządzalnym.

Kafka także udostępnia szczegółowe metryki wydajności i zdrowia przez JMX (Java Management Extensions), pozwalając zespołom śledzić przepustowość, opóźnienia, zdrowie brokerów i opóźnienia konsumentów, które są kluczowe dla skutecznego monitoringu i planowania pojemności.

Szeroka integracja

Dzięki szerokiej gamie łączników i klienckich API, Kafka łatwo integruje się z bazami danych, systemami plików i usługami chmurowymi. Na przykład Kafka Connect ułatwia bezproblemowe przenoszenie danych między systemami, podczas gdy Kafka Streams umożliwia przetwarzanie strumieni w czasie rzeczywistym, dodatkowo wzmacniając możliwości integracji.