Kafka pod specjalnym nadzorem. Monitorowanie Apache Kafki w zarządzaniu Procesem… biznesowym
Flowee jest platformą zaprojektowaną z myślą o minimalizowaniu konieczności pisania kodu podczas wdrażania nowych procesów u klienta. Osiąga to dzięki rozbudowanym graficznym edytorom procesów i formularzy. Jeśli chcesz dowiedzieć się o niej więcej, zajrzyj NA STRONĘ.
1. Co to jest Apache Kafka?
2. Apache Kafka we Flowee
Flowee jest systemem rozproszonym złożonym z wielu mikrousług. Każda z nich odpowiada za mały, jasno zdefiniowany, fragment logiki całego systemu. Jak w każdej tego typu architekturze – kluczowe jest zapewnienie niezawodnego i efektywnego mechanizmu komunikacji. Tworząc Flowee do realizacji tego celu wybraliśmy właśnie system Apache Kafka.
3. Dlaczego monitorowanie klastra Kafki jest kluczowe?
Monitorowanie Apache Kafka w środowisku produkcyjnym jest kluczowe z wielu powodów, zarówno pod kątem zapewnienia niezawodności i wydajności systemu, jak i minimalizowania czasu przestoju w razie problemów. Wyróżnić wśród nich możemy przede wszystkim następujące kwestie:
- Wydajność i optymalizacja zasobów:
Monitorowanie pomaga zrozumieć, jak wykorzystywane są zasoby Kafki i gdzie mogą występować wąskie gardła. Pozwala to na optymalizację wydajności i zarządzanie zasobami w sposób bardziej efektywny.
- Wykrywanie i rozwiązywanie problemów:
Wczesne wykrywanie problemów, takich jak opóźnienia w przetwarzaniu, przeciążenie brokerów Kafki czy problemy z siecią, jest kluczowe dla utrzymania ciągłości działania systemu. Szybkie identyfikowanie i rozwiązywanie problemów minimalizuje negatywny wpływ na działalność biznesową.
- Skalowalność:
Monitorowanie pozwala na zrozumienie wzorców użytkowania i przepustowości systemu, co jest niezbędne przy planowaniu skalowania. Informacje te pomagają w podejmowaniu decyzji o rozbudowie lub modyfikacji infrastruktury w celu obsługi większego obciążenia.
- Bezpieczeństwo:
Monitorowanie może pomóc w wykrywaniu nietypowych wzorców działania, które mogą wskazywać na problemy z bezpieczeństwem (np. ataki DDoS czy próby nieautoryzowanego dostępu).
- Zgodność z wymaganiami SLA (Service Level Agreement):
Wiele organizacji musi spełniać określone wymagania dotyczące dostępności i wydajności swoich usług. Monitorowanie pomaga w zapewnieniu, że usługi Kafka oraz aplikacje z niej korzystające spełniają te wymagania.
- Optymalizacja przepływu danych:
W środowiskach produkcyjnych, gdzie przetwarzane są duże wolumeny danych, ważne jest, aby przepływ danych przez Kafkę był jak najbardziej efektywny. Monitorowanie pozwala na identyfikację i eliminację wąskich gardeł w przepływie danych.
4. Jak monitorujemy Kafkę we Flowee?
Monitoring we Flowee jest zrealizowany przez użycie dwóch narzędzi: Prometheus i Grafana. Pierwsze z nich odpowiada za zbieranie bieżących pomiarów ze zdefiniowanych źródeł, którymi mogą być np. poszczególne mikrousługi lub brokery Kafki. Grafana zaś pozwala na wizualizację w postaci wykresów gromadzonych przez Prometheus pomiarów.
Tutaj znajdziecie dostępne repozytorium z gotową do uruchomienia konfiguracją docker compose demonstrującą działanie opisywanych w artykule konfiguracji.
Po sklonowaniu repozytorium, aby uruchomić przykładowe środowisko, należy użyć polecenia:
docker compose -f compose.yaml up -d
Po ich uruchomieniu w przeglądarce dostępne są dwa panele:
Grafana: http://localhost:3000/dashboards
Kafka UI: http://localhost:8080 (hasło admin:admin)
4.1 Monitoring brokerów Kafki
Poszczególne części składowe klastra Kafki, czyli brokery, monitorujemy przez zainstalowanie w nich biblioteki jmx_exporter (https://github.com/prometheus/jmx_exporter). Dzięki temu poszczególne procesy udostępniają przez endpoint na porcie 8888 aktualne pomiary monitorowanych parametrów. Zmierzone wartości są następnie cyklicznie pobierane przez serwer Prometheus.
Przykładowe parametry, które możemy monitorować dzięki jmx_exporter to m.in.: liczba aktywnych brokerów, liczba aktywnych partycji, partycje o niedostatecznej replikacji, liczba komunikatów na sekundę, obciążenie procesora, ilość danych przesyłanych z każdego i do każdego brokera, ilość danych przechowywanych na dysku przez poszczególne brokery, statystki producentów i konsumentów wiadomości, statystki dotyczące wewnętrznej replikacji danych między brokerami Kafki, oraz wiele innych.
Konfiguracja jmx_exporter w brokerach Kafki polega na uruchomieniu procesu Java z tzw. agentem Java (przełącznik -javaagent):
KAFKA_OPTS: '-javaagent:/bitnami/kafka/libs/jmx_prometheus_javaagent-0.20.0.jar=8888:/bitnami/kafka/libs/kafka_broker.yml'
Natomiast konfiguracja Prometheus zaczytująca wartości udostępniane przez jmx_exporter wygląda następująco:
- job_name: "kafka-broker"
static_configs:
- targets:
- kafka-1:8888
- kafka-2:8888
- kafka-3:8888
labels:
env: "dev"
relabel_configs:
- source_labels: [__address__]
target_label: hostname
regex: '([^:]+)(:[0-9]+)?'
replacement: '${1}'
4.2. Monitoring opóźnień w konsumpcji wiadomości przez konsumentów
kafka-lag-exporter:
image: seglo/kafka-lag-exporter:0.8.2
volumes:
- ${PWD}/kafka-lag-exporter:/opt/docker/conf
Natomiast w katalogu kafka-lag-exporter/application.conf znajduje się konfiguracja dla tej aplikacji:
kafka-lag-exporter {
port = 9999
client-group-id = "kafkaLagExporter"
lookup-table-size = 120
poll-interval = 60
clusters = [
{
name = "dev-cluster"
bootstrap-brokers = "kafka-1:29092,kafka-2:29092,kafka-3:29092"
admin-client-properties = {
client.id = "admin-client-id"
security.protocol = "PLAINTEXT"
}
consumer-properties = {
client.id = "consumer-client-id"
security.protocol = "PLAINTEXT"
}
}
]
}
Panel Grafana dla kafka-lag-exporter znajduje się w pliku: Kafka Lag Exporter.yaml. Jest on automatycznie wczytywany przy starcie przykładowego środowiska i jest dostępny pod adresem: http://localhost:3000/dashboards
4.3. Kafka UI
Ostatnim demonstrowanym narzędziem jest Kafka UI: https://github.com/provectus/kafka-ui. Za jego pomocą można sprawdzić stan klastra, jego konfigurację oraz przeglądać i wyszukiwać zapisane w brokerach Kafki wiadomości. Jest to nieodzowne podczas prac programistycznych oraz analizy incydentów w środowisku produkcyjnym.
W naszym demonstracyjnym środowisku Kafka UI jest dostępna pod adresem: http://localhost:8080 (hasło i login admin:admin)
I tym samym – wiecie już, jak monitorować Kafkę niczym Wielki Brat! 😉
- Jeśli chcesz wypróbować Flowee, w którym wykorzystujemy te technologię, by zarządzać biznesowymi procesami, skontaktuj się z nami.
- A może poszukujesz specjalistów biegłych w rozproszonych architekturach, którzy napiszą Ci kod równie sprawnie jak Franz Kafka pisał opowiadania, listy i powieści? Odezwij się do nas.
- A może… po prostu też chcesz robić takie rzeczy i dołączyć do naszego zespołu? Zapraszamy.
- [1] Franz Kafka Proces, tłum. Bruno Schulz
Jay Kreps lubi twórczość pisarza i uważa, że – ponieważ system jest zoptymalizowany do pisania – powinien przyjąć nazwę właśnie od kogoś parającego się pisaniem w naturalnym języku.