a mai adatfeldolgozó architektúrákban az Apache Kafkát gyakran használják az ingress szakaszban. Általában ez a lépés a bejövő üzenetadatok gazdagítására és szűrésére szolgál; azonban az adatfeldolgozási folyamat későbbi szakaszáig nem lehet interaktív lekérdezéseket készíteni. Ennek oka az, hogy bár a Kafka-téma minden üzenete alapértelmezés szerint megmarad, egyelőre nem áll rendelkezésre olyan mechanizmus, amely lehetővé tenné egy adott üzenet gyors keresését egy témában.
Mindazonáltal az új adatok lekérdezésének lehetősége a folyamat ezen korai szakaszában elkerülné a hagyományos feldolgozási folyamatok késedelmét, amelyek általában hosszú távú kötegelt előfeldolgozási lépéseket tartalmaznak, és a végfelhasználók számára szinte azonnali hozzáférést biztosítanának a bejövő adatokhoz.
az adatfeldolgozó alkalmazások Kafka-val történő felépítéséhez a Kafka Streams könyvtárat, amelyet a Kafka projekt részeként tartanak fenn, általánosan használják az adattranszformációk és elemzések meghatározására. A Kafka Stream egyik fontos jellemzője az állami áruházak, amelyek egy gyors helyi kulcs-érték tároló absztrakcióját kínálják, amely olvasható és írható, amikor az üzeneteket Kafka Stream-ekkel dolgozzák fel. Ezeket a kulcsérték-tárolókat folyamatosan meg lehet tölteni egy Kafka-téma új üzeneteivel egy megfelelő adatfolyam-processzor meghatározásával, így most már lehetséges az üzenetek gyors lekérése az alapul szolgáló témából.
ennek a Kafka Streams funkciónak a tetejére építve létrehozunk egy egységes REST API-t, amely egyetlen lekérdezési végpontot biztosít egy adott Kafka témához.
összefoglalva, a Kafka Streams processzorok állami tárolókkal és HTTP szerverekkel való kombinálása hatékonyan bármilyen Kafka témát gyorsan csak olvasható kulcs-érték tárolóvá változtathat.
A Kafka Streams könyvtárként épül fel, amely beágyazható egy önálló Java vagy Scala alkalmazásba. Lehetővé teszi a fejlesztők számára, hogy olyan adatfolyam-processzorokat határozzanak meg, amelyek adatátalakításokat vagy összesítéseket hajtanak végre a Kafka üzeneteken, biztosítva, hogy minden bemeneti üzenet pontosan egyszer kerüljön feldolgozásra. A Java Stream API által inspirált Kafka Streams DSL használatával a stream processzorok és az állami tárolók rugalmasan láncolhatók.
Továbbá, amikor egy Kafka stream-alapú alkalmazás több példányát indítja el, a folyamatok automatikusan egy terheléselosztó, nagy rendelkezésre állású feldolgozási klasztert alkotnak anélkül, hogy a Kafka-tól eltérő külső rendszerektől függnének.
az állami áruházakat alkalmazó Kafka Streams alkalmazás architektúrájának szemléltetésére képzelje el a következő forgatókönyvet: vasúttársaságként minden alkalommal, amikor egy ügyfél foglal egy utazást a weboldalunkon, egy új üzenet kerül beillesztésre az ügyfélazonosítóból és az időbélyegből a Kafka témájába. Pontosabban, egy vagy több Kafka gyártó beilleszti ezeket az üzeneteket egy kilenc partícióval rendelkező témába. Mivel az ügyfélazonosítót választják kulcsként minden üzenethez,az adott ügyfélhez tartozó adatok mindig a téma ugyanazon partíciójába kerülnek. Implicit módon a Kafka-gyártók a DefaultPartitioner parancsot használják üzenetek hozzárendelésére a partíciókhoz.
most tegyük fel, hogy van egy Kafka Streams alkalmazásunk, amely beolvassa a téma üzeneteit, és egy állami áruházban tartja őket. Mivel az egyes üzenetek kulcsa csak az ügyfélazonosítóból áll, az állami áruház megfelelő értéke mindig az ügyfél legutóbbi foglalásának időbélyege lesz. A párhuzamos feldolgozás maximális fokának elérése érdekében akár kilenc példányt is elindíthatunk a Kafka Streams alkalmazásból. Ebben az esetben minden alkalmazáspéldányhoz pontosan az egyik témakört kell hozzárendelni. Minden bemeneti partícióhoz a Kafka Streams külön állami tárolót hoz létre, amely viszont csak az adott partícióhoz tartozó ügyfelek adatait tárolja.
a kapott alkalmazás architektúrát az alábbi ábra szemlélteti.