Apache Kafka

Apache Kafka to jedno z najbardziej popularnych narzędzi do przetwarzania strumieni danych i integracji systemów opartych na mikroserwisach. Często wykorzystywana w architekturach rozproszonych, doskonale sprawdza się w tworzeniu aplikacji, które wymagają szybkiej wymiany dużej ilości danych w czasie rzeczywistym. W tym artykule zapoznamy się z podstawowymi pojęciami dotyczącymi Apache Kafka, prześledzimy architekturę i omówimy instalację oraz konfigurację krok po kroku.

1. Wprowadzenie do Apache Kafka

Czym jest Apache Kafka?

Apache Kafka to rozproszona platforma do przetwarzania strumieniowego, która działa jako system kolejkowy. Opracowana przez LinkedIn, a później przekazana fundacji Apache Software Foundation, Kafka służy do przesyłania, przetwarzania i magazynowania danych w czasie rzeczywistym.

Jej główne zastosowania obejmują:

  • Integrację mikroserwisów – systemy rozproszone mogą wymieniać dane w sposób asynchroniczny, co pozwala na łatwe skalowanie aplikacji.
  • Przetwarzanie strumieniowe – idealne narzędzie do śledzenia logów, analiz w czasie rzeczywistym oraz zbierania danych telemetrycznych.
  • Systemy publish-subscribe – Kafka działa jako serwer pośredniczący pomiędzy producentami (publisherami) i konsumentami wiadomości.

Architektura Apache Kafka

Aby zrozumieć, jak działa Kafka, musimy zrozumieć kilka kluczowych pojęć:

  • Brokerzy (Brokers): Broker to jednostka, która zarządza przechowywaniem i dostarczaniem wiadomości. Apache Kafka może składać się z wielu brokerów, tworząc tzw. klaster. Brokerzy współpracują ze sobą, aby zapewnić replikację danych oraz wysoką dostępność.
  • Producent (Producer): Producent to aplikacja, która wysyła wiadomości do tematów w Kafce. Producent może wysyłać dane do konkretnej partycji danego tematu.
  • Konsument (Consumer): Konsument to aplikacja, która odbiera wiadomości z tematów. Konsumenci mogą należeć do grup konsumentów, co ułatwia równomierne rozdzielenie pracy.
  • Tematy (Topics): Wiadomości w Kafce są grupowane w tematy. Każdy temat może być podzielony na partycje, które pozwalają na równoległe przetwarzanie wiadomości.
  • Partycje (Partitions): Tematy są dzielone na partycje, które pozwalają na dystrybucję wiadomości oraz replikację. Partycje umożliwiają równoczesne przetwarzanie danych przez różnych konsumentów.

Kiedy warto używać Kafki?

Kafka to potężne narzędzie, które doskonale sprawdza się w sytuacjach wymagających:

  • Wysokiej przepustowości: Obsługa dużej liczby zdarzeń w krótkim czasie.
  • Elastyczności: Wsparcie dla wielu konsumentów przetwarzających dane równolegle.
  • Odporności na awarie: Replikacja i rozproszone przetwarzanie danych.

2. Architektura Apache Kafka

Szczegółowa architektura

Kafka to potężny system rozproszony, który opiera się na kilku kluczowych elementach:

Brokery i Klastry

Brokery Apache Kafka to serwery, które zarządzają danymi. Klaster Kafki może składać się z wielu brokerów, co zapewnia niezawodność i dostępność. Producent przesyła wiadomości do jednego z brokerów, który jest odpowiedzialny za temat. Broker następnie replikuje te wiadomości do innych brokerów w klastrze.

Replikacja i Skalowalność

Kafka zapewnia replikację partycji, co oznacza, że każda partycja tematu jest przechowywana na więcej niż jednym brokerze. Dzięki temu, nawet w przypadku awarii jednego z brokerów, dane są dostępne z innej repliki. Skalowalność jest osiągana poprzez dodawanie nowych brokerów i równomierne rozdzielanie partycji.

Zookeeper

Kafka korzysta z Apache Zookeepera do zarządzania metadanymi klastra, takimi jak informacje o brokerach czy partycjach. Zookeeper zapewnia konsensus w klastrze Kafki, co pozwala brokerom na synchronizację.

Kluczowe pojęcia: offsety, przetwarzanie strumieniowe
  • Offsety: Offset to numer przypisany do każdej wiadomości w partycji. Pozwala konsumentowi śledzić, które wiadomości zostały już przetworzone.
  • Przetwarzanie strumieniowe: Kafka Stream API pozwala na przetwarzanie danych w czasie rzeczywistym, umożliwiając tworzenie aplikacji strumieniowych bezpośrednio na danych w Kafce.

3. Instalacja i konfiguracja Apache Kafka

Aby korzystać z Kafki lokalnie, możemy zainstalować ją ręcznie lub użyć Dockera. Poniżej przedstawiam instrukcje dla obu metod.

Instalacja na lokalnym środowisku

  1. Pobierz i zainstaluj Kafkę i Zookeepera:
    • Kafka wymaga Zookeepera, dlatego należy uruchomić oba komponenty.
    • Pobierz Kafkę z oficjalnej strony Apache: https://kafka.apache.org/downloads.
    • Rozpakuj plik i uruchom Zookeepera:
				
					bin/zookeeper-server-start.sh config/zookeeper.properties

				
			
    • Następnie uruchom Kafkę:
				
					bin/kafka-server-start.sh config/server.properties

				
			
  1. Tworzenie tematu w Kafce:
    • Tematy są kluczowym elementem w Kafce, w którym przechowywane są wiadomości.
    • Aby utworzyć nowy temat, użyj polecenia:
				
					bin/kafka-topics.sh --create --topic moj-temat --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1

				
			
  1. Publikowanie wiadomości:
    • Producentem może być dowolna aplikacja, która wysyła dane do Kafki.
    • Aby przetestować publikowanie wiadomości, użyj:
				
					bin/kafka-console-producer.sh --topic moj-temat --bootstrap-server localhost:9092

				
			
    • Wprowadź kilka wiadomości i zakończ, naciskając CTRL+D.
  1. Konsumpcja wiadomości:
    • Aby odebrać wiadomości z tematu, uruchom konsumenta:
				
					bin/kafka-console-consumer.sh --topic moj-temat --from-beginning --bootstrap-server localhost:9092

				
			
    • Konsument odbierze wszystkie wiadomości z wybranego tematu.

Instalacja w Dockerze

Instalacja Apache Kafka za pomocą Dockera jest prostsza, szczególnie gdy korzystamy z docker-compose. Poniżej znajduje się przykładowy plik docker-compose.yml:

				
					
version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper:3.4.6
    ports:
     - "2181:2181"
  kafka:
    image: wurstmeister/kafka:latest
    ports:
     - "9092:9092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock

				
			

Aby uruchomić Kafkę, wystarczy wpisać:

				
					docker-compose up -d

				
			

Ćwiczenia praktyczne: Publikacja i konsumpcja wiadomości

  1. Uruchomienie brokera Kafka: Po skonfigurowaniu Dockera, Kafka i Zookeeper zostaną uruchomione automatycznie.

  2. Tworzenie tematu, publikacja i konsumpcja wiadomości: W Dockerze można połączyć się z Kafką używając polecenia docker exec, np.:

				
					docker exec -it kafka_kafka_1 kafka-topics.sh --create --topic moj-temat --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1

				
			
  1. Publikowanie i konsumpcja wiadomości odbywa się podobnie jak w przypadku instalacji lokalnej, z użyciem odpowiednich komend.

Podsumowanie

Apache Kafka to niezwykle wszechstronna platforma, która doskonale sprawdza się w aplikacjach rozproszonych, przetwarzaniu strumieniowym oraz integracji mikroserwisów. W artykule zapoznaliśmy się z podstawową architekturą Kafki, zrozumieliśmy jej kluczowe komponenty, a także przeprowadziliśmy instalację na lokalnym środowisku oraz przy użyciu Dockera. Kolejne kroki to integracja Kafki z frameworkiem Symfony, aby wykorzystać pełen potencjał Kafki w aplikacjach PHP. Kafka w połączeniu z Symfony pozwala na tworzenie skalowalnych aplikacji, które mogą wydajnie przetwarzać i analizować dane w czasie rzeczywistym.