Szkolenie Apache Kafka – Kafka Streams to praktyczny kurs przetwarzania strumieniowego w Java, który uczy projektowania i budowy skalowalnych aplikacji stream processing opartych wyłącznie na Apache Kafka. Obejmuje Kafka Streams DSL, KStream i KTable, okna czasowe, event-time, grace period, RocksDB, checkpointing, exactly-once, Kafka Connect oraz optymalizację rozwiązań produkcyjnych
Szkolenie przygotowuje do samodzielnego projektowania i implementowania aplikacji przetwarzania strumieni danych w języku Java z użyciem Apache Kafka Streams DSL, z wykorzystaniem topologii, agregacji, serializacji danych oraz integracji z tematami Apache Kafka
Szkolenie uczy budowania aplikacji opartych na modelu KStream i KTable, stosowania okien czasowych, event-time, własnych ekstraktorów znaczników czasu oraz obsługi danych nieuporządkowanych z użyciem grace period w rozwiązaniach stream processing
Szkolenie pokazuje, jak skalować aplikacje Kafka Streams przez uruchamianie wielu instancji, konfigurować zadania i wątki oraz analizować wpływ partycjonowania, Consumer Group Rebalance i rebalance na wydajność przetwarzania danych w czasie rzeczywistym
Szkolenie rozwija umiejętność monitorowania aplikacji strumieniowych z użyciem metryk JMX, diagnozowania utraty danych, doboru parametrów stanu oraz oceny wpływu watermarku i RocksDB na kompletność oraz opóźnienie przetwarzania
Szkolenie przygotowuje do wdrażania niezawodnych aplikacji produkcyjnych z wykorzystaniem changelogów, pliku .checkpoint, replik rezerwy, gwarancji exactly-once, Kafka Connect oraz mechanizmów ograniczających liczbę emisji wyników
Dla kogo?
Programiści Java z doświadczeniem w tworzeniu aplikacji, którzy chcą budować rozwiązania stream processing na Apache Kafka
Inżynierowie danych i architekci znający podstawy Apache Kafka: temat, partycja, offset, producent, konsument, grupy konsumentów
Specjaliści projektujący systemy czasu rzeczywistego, odpowiedzialni za integrację danych, skalowanie i niezawodność przetwarzania
Deweloperzy pracujący z Maven, mile widziana podstawowa praktyka z Dockerem oraz relacyjnym modelem danych i SQL
Efekty kształcenia
Uczestnik projektuje topologie Apache Kafka Streams dla przetwarzania danych w czasie rzeczywistym z wykorzystaniem KStream i KTable
Uczestnik implementuje agregacje, okna czasowe, event-time oraz obsługę danych nieuporządkowanych z użyciem grace period
Uczestnik konfiguruje serializację, stan aplikacji, RocksDB oraz integrację z systemami docelowymi przy użyciu Kafka Connect
Uczestnik analizuje metryki JMX oraz ocenia kompletność, wydajność i opóźnienie przetwarzania w aplikacjach stream processing
Uczestnik organizuje odtwarzanie stanu po awarii z użyciem changelogów, checkpointów oraz mechanizmów State Store
Uczestnik wdraża gwarancje exactly-once, optymalizuje emisję wyników okien oraz przygotowuje aplikacje Kafka Streams do środowisk produkcyjnych
Wymagania
Konieczna znajomość języka Java na poziomie umożliwiającym samodzielne pisanie klas i metod
Konieczna znajomość Apache Kafka w zakresie szkolenia Apache Kafka – wprowadzenie do architektury sterowanej zdarzeniami (KAFKA/BASICS) lub równoważnym: temat, partycja, offset, producent, konsument, grupa konsumentów, podstawy administracji klastra
Konieczna znajomość narzędzia Maven na poziomie budowania i pakowania projektów Java
Rekomendowana znajomość środowiska Docker na poziomie uruchamiania i zatrzymywania kontenerów
Rekomendowana znajomość relacyjnego modelu danych i podstawowych poleceń SQL
W cenie otrzymasz:
Materiały szkoleniowe
Certyfikat ukończenia szkolenia
W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki
Koszt watermarku – wpływ grace period na rozmiar stanu RocksDB: grace=1s → ~240 wpisów; grace=40s → ~750 wpisów (~3×)
Wyjaśnienie ~3× większego stanu: grace + windowSize = liczba jednocześnie aktywnych okien × liczba kluczy
Monitorowanie stanu: metryki num-entries-active-mem-table i bytes-written-total w jconsole
Trade-off: kompletność wyniku kontra koszt stanu, czas odtwarzania i opóźnienie w dostarczaniu wyników
Filozofia Kafka Streams: brak centralnego koordynatora – zadania autonomiczne (vs. JobManager Flink, StreamExecution Spark)
Trzy filary punktu kontrolnego: State Store (RocksDB na dysku lokalnym), Changelog Topic (rozproszony WAL w Kafce), plik .checkpoint (powiązanie między nimi)
Struktura katalogów na dysku: state.dir / app.id / task.id / store.name
Przełączenie ze standby: nadrabianie kilkunastu rekordów (sekundy) vs. pełny odczyt (minuty)
session.timeout.ms: domyślnie 45s – wpływ na czas reakcji na awarię; skrócenie do 10s i ryzyko fałszywych alarmów
Strategia StreamsPartitionAssignor: minimalizacja przeprowadzek partycji, priorytetyzacja instancji z lokalnym stanem
Identyfikacja aktorów w warsztacie: Changelog Topic (GUI, retencja, klucze z metadanymi okna), Local State Store (katalogi RocksDB, segmenty czasowe), plik .checkpoint (wartość -4 przed pierwszym zapisem)
Kafka Streams wyłącza WAL w RocksDB – rola changelog jako transakcyjnego logu
Zombie fencing: transactional.id generowany z application.id + numeru partycji, nowy producent unieważnia poprzedni
Temat __transaction_state: dziennik transakcji, stany (Ongoing, PrepareCommit, CompleteCommit), recovery koordynatora
Commit Markers: dodatkowe rekordy techniczne w tematach uczestniczących w transakcji; widoczne w GUI jako "nadmiarowe wiadomości"
isolation.level=read_committed: konsumenci widzą tylko zatwierdzone transakcje – wymagane dla Kafka Connect w trybie EOS
Konfiguracja klastra dla EOS: KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3, KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=2
Dynamiczna zmiana konfiguracji: kafka-configs.sh --alter --add-config min.insync.replicas=2
Problem natychmiastowych wyzwalaczy: ~14 zbędnych UPSERT na okno dla jednego klucza – koszt dla ujść i niekompatybilność z HDFS/S3/Parquet
Operator suppress(untilWindowCloses): warunek zamknięcia okna (watermark > end_w + grace), redukcja z ~14 do 1 emisji na okno
Nowy temat wewnętrzny KTABLE-SUPPRESS-STATE-STORE-changelog: bufor okien oczekujących na emisję, wiedza o tym co już wysłano
Porównanie liczby wiadomości w tematach: 100 wejściowych → ~150 aggregate-changelog → ~16 suppress-changelog → ~16+CM kafka-output
INSERT zamiast UPSERT przy suppress – kompatybilność z dowolnym typem ujść (HDFS, S3, Parquet, Delta Lake)
Budowanie fat JAR przy użyciu maven-shade-plugin: pakowanie z zależnościami, konfiguracja ManifestResourceTransformer
Uruchamianie aplikacji przez Docker Compose z osobnymi katalogami stanu dla każdej instancji
Autorem szkolenia jest Krzysztof Jankiewicz
Konsultant IT i wykładowca akademicki. Specjalista w zakresie ogólnie rozumianego przetwarzania danych. Począwszy od relacyjnych systemów baz danych, poprzez architekturę, utrzymanie i wykorzystywanie hurtowni danych, bazy danych NoSQL, systemy danych przestrzennych, po narzędzia i platformy Big Data. Od samego początku pracy zawodowej stara się jako konsultant znajdować czas na kontakty przemysłem, gdzie swoją wiedzę może konfrontować i rozwijać w oparciu o rzeczywiste przypadki. Począwszy od…
Wybrane opinie
Przeczytaj pozytywne opinie pochodzące z ankiet satysfakcji z naszych szkoleń wypełnianych wyłącznie przez ich uczestników po realizacji usługi