Das Betreiben von Apps, Web-Services, Ser­ver­an­wen­dun­gen und Co. stellt die Ver­ant­wort­li­chen vor eine Vielzahl an Her­aus­for­de­run­gen. Eine der häu­figs­ten besteht bei­spiels­wei­se darin, den rei­bungs­lo­sen Transport sowie eine möglichst schnelle und ef­fi­zi­en­te Ver­ar­bei­tung von Da­ten­strö­men zu ge­währ­leis­ten. Eine Software, die beides erheblich ver­ein­facht, ist die Messaging- und Streaming-Anwendung Apache Kafka. Ur­sprüng­lich als Nach­rich­ten-War­te­schlan­gen­dienst für die Plattform LinkedIn ent­wi­ckelt, liefert die Open-Source-Lösung mitt­ler­wei­le ein Kom­plett­pa­ket für die Spei­che­rung, Über­tra­gung und Wei­ter­ver­ar­bei­tung von Daten.

Was ist Apache Kafka?

Die Software Apache Kafka ist eine platt­form­un­ab­hän­gi­ge Open-Source-Anwendung der Apache Software Foun­da­ti­on, deren Fokus auf der Ver­ar­bei­tung von Da­ten­strö­men liegt. Das Projekt wurde ur­sprüng­lich im Jahr 2011 von LinkedIn, dem Un­ter­neh­men hinter dem gleich­na­mi­gen Business-Netzwerk, ins Leben gerufen. Dabei stand die Ent­wick­lung einer Nach­rich­ten-Queue (dt. Nach­rich­ten­war­te­schlan­ge) im Vor­der­grund. Seit der Ver­öf­fent­li­chung unter freier Lizenz (Apache 2.0) wurde die Software stark erweitert, sodass aus der einfachen Queue-Anwendung eine leis­tungs­star­ke Streaming-Plattform mit großem Funk­ti­ons­um­fang geworden ist, die auch von bekannten Un­ter­neh­men wie Netflix, Microsoft oder Airbnb genutzt wird.

2014 gründeten die ur­sprüng­li­chen Ent­wick­ler aus dem LinkedIn-Team die Firma Confluent, die seitdem mit Confluent Platform die um­fang­reichs­te Version von Apache Kafka anbietet. Diese ergänzt das Programm um zu­sätz­li­che Funk­tio­nen, die teils ebenfalls Open Source, teils kom­mer­zi­ell sind.

Welche Grund­funk­tio­nen bietet Apache Kafka?

Apache Kafka ist vor allem darauf ausgelegt, die Über­tra­gung und Ver­ar­bei­tung von Da­ten­strö­men zu op­ti­mie­ren, die per Di­rekt­ver­bin­dung zwischen Da­ten­emp­fän­ger und Da­ten­quel­le aus­ge­tauscht werden. Kafka agiert dabei als Messaging-Instanz zwischen Sender und Empfänger und bietet Lösungen für die typischen Schwie­rig­kei­ten, die mit einer solchen Ver­bin­dung ein­her­ge­hen:

So löst die Apache-Plattform unter anderem das Problem, dass ein Zwi­schen­spei­chern von Daten bzw. Nach­rich­ten unmöglich ist, wenn der Empfänger (bei­spiels­wei­se aufgrund von Netz­werk­pro­ble­men) nicht verfügbar ist. Zudem ver­hin­dert eine gut ein­ge­rich­te­te Kafka-Queue, dass der Sender den Empfänger über­las­tet. Das ist immer dann der Fall, wenn die In­for­ma­tio­nen bei der Di­rekt­ver­bin­dung schneller gesendet werden, als diese empfangen und ver­ar­bei­tet werden können. Schließ­lich ist die Kafka-Software auch für solche Szenarios geeignet, in denen das Ziel­sys­tem die Nachricht zwar erhält, während des Ver­ar­bei­tungs­pro­zes­ses jedoch abstürzt. Während der Sender nor­ma­ler­wei­se trotz des Absturzes davon ausgehen würde, dass die Ver­ar­bei­tung erfolgt ist, erhält er durch Apache Kafka Rück­mel­dung über den Fehl­schlag.

Im Gegensatz zu reinen Nach­rich­ten­war­te­schlan­gen-Diensten wie in Da­ten­ban­ken arbeitet Apache Kafka feh­ler­to­le­rant, wodurch die Software die Vor­aus­set­zung für eine kon­ti­nu­ier­li­che Ver­ar­bei­tung von Nach­rich­ten bzw. Daten schafft. In Kom­bi­na­ti­on mit der hohen Ska­lier­bar­keit und der Mög­lich­keit, trans­por­tier­te In­for­ma­tio­nen auf beliebig viele Systeme zu verteilen (ver­teil­tes Trans­ak­ti­ons-Log) macht dieser Umstand Apache Kafka zu einer ex­zel­len­ten Lösung für alle Dienste, die eine schnelle Spei­che­rung und Ver­ar­bei­tung von Daten sowie eine hohe Ver­füg­bar­keit ge­währ­leis­ten sollen.

Die Apache-Kafka-Ar­chi­tek­tur im Überblick

Apache Kafka wird als Cluster (Rech­ner­ver­bund) auf einem oder mehreren Servern, die ver­schie­de­ne Re­chen­zen­tren umfassen können, aus­ge­führt. Die einzelnen Knoten des Clusters, die man als Broker be­zeich­net, speichern und ka­te­go­ri­sie­ren ein­ge­hen­de Da­ten­strö­me in so­ge­nann­te Topics. Dabei werden die Daten in Par­ti­tio­nen auf­ge­teilt und im Cluster re­pli­ziert und verteilt sowie mit einem Zeit­stem­pel versehen. Auf diese Weise sorgt die Streaming-Plattform für eine hohe Ver­füg­bar­keit und einen schnellen Le­se­zu­griff. Die Topics dif­fe­ren­ziert Apache Kafka in „Normal Topics“ und „Compacted Topics“. In Normal Topics kann Kafka die Nach­rich­ten löschen, sobald Spei­cher­zeit­raum oder Spei­cher­li­mit überzogen wurden, während die Einträge in Compacted Topics weder einer Zeit- noch einer Platz­li­mi­tie­rung un­ter­lie­gen.

An­wen­dun­gen, die Daten in einen Kafka-Rech­ner­ver­bund schreiben, werden als Producer be­zeich­net, während alle An­wen­dun­gen, die Daten eines Kafka-Clusters lesen, die Be­zeich­nung Consumer tragen. Die zentrale Kom­po­nen­te, auf die Producer und Consumer bei der Ver­ar­bei­tung von Da­ten­strö­men zugreifen, ist eine Java-Bi­blio­thek mit dem Namen Kafka Streams. Die Un­ter­stüt­zung von trans­ak­tio­na­lem Schreiben ga­ran­tiert dabei, dass Nach­rich­ten immer nur ein einziges Mal (ohne Doppelung) über­tra­gen werden, was auch als „exactly-once delivery“ (dt. „genau einmal“-Lieferung) be­zeich­net wird.

Hinweis

Die Java-Bi­blio­thek Kafka Streams ist zwar die emp­foh­le­ne Stan­dard­lö­sung für die Da­ten­ver­ar­bei­tung in Kafka-Clustern. Sie können Apache Kafka aber auch mit anderen Systemen zur Stream-Ver­ar­bei­tung nutzen!

Tech­ni­sche Grund­la­gen: Die Kafka-Schnitt­stel­len

Um An­wen­dun­gen den Zugriff auf Apache Kafka zu gewähren, bietet die Software fünf ver­schie­de­ne Kern-Schnitt­stel­len an:

  • Kafka Producer: Das Producer-API er­mög­licht An­wen­dun­gen, Da­ten­strö­me an den bzw. die Broker eines Apache-Cluster zu senden, um diese zu ka­te­go­ri­sie­ren und zu speichern (in den bereits erwähnten Topics).
  • Kafka Consumer: Über die Consumer-API erhalten Apache-Kafka-Consumer Le­se­zu­griff auf Daten, die in den Topics des Clusters ge­spei­chert sind.
  • Kafka Streams: Das Streams-API erlaubt es einer Anwendung, als Stream-Prozessor zu fungieren, um ein­ge­hen­de Da­ten­strö­me in aus­ge­hen­de Da­ten­strö­me um­zu­wan­deln.
  • Kafka Connect: Dank des Connect-API ist es möglich, wie­der­ver­wend­ba­re Producer und Consumer ein­zu­rich­ten, die Kafka-Topics mit exis­tie­ren­den Ap­pli­ka­tio­nen oder Da­ten­bank­sys­te­men verbinden.
  • Kafka Ad­min­Cli­ent: Die Schnitt­stel­le „Ad­min­Cli­ent“ dient der einfachen Ad­mi­nis­tra­ti­on und In­spek­ti­on des Kafka-Clusters.

Die Kom­mu­ni­ka­ti­on zwischen Cli­ent­an­wen­dun­gen und einzelnen Servern des Apache-Clusters erfolgt über ein simples, leis­tungs­star­kes und spra­chen­un­ab­hän­gi­ges Protokoll auf Grundlage von TCP. Stan­dard­mä­ßig stellen die Ent­wick­ler einen Java-Client für Apache Kafka zur Verfügung – es exis­tie­ren aber auch Clients in ver­schie­de­nen anderen Sprachen wie PHP, Python, C/C++, Ruby, Perl oder Go.

Ein­satz­sze­na­ri­os für Apache Kafka

Apache Kafka ist von Beginn an für einen hohen Schreib- und Le­se­durch­satz kon­zi­piert worden. In Kom­bi­na­ti­on mit den auf­ge­zähl­ten APIs sowie der hohen Fle­xi­bi­li­tät, Ska­lier­bar­keit und Feh­ler­to­le­ranz macht dies die Open-Source-Software für die ver­schie­dens­ten An­wen­dungs­fäl­le in­ter­es­sant. Dabei eignet sich Apache Kafka ins­be­son­de­re für folgende Bereiche:

  • Da­ten­strö­me ver­öf­fent­li­chen und abon­nie­ren: Damit, Apache Kafka als Messaging-System zu nutzen, hat die Ge­schich­te des Open-Source-Projekts begonnen. Auch nach der Er­wei­te­rung der Software ist diese bestens für die direkte Nach­rich­ten­über­tra­gung via War­te­schlan­gen­sys­tem, aber auch für Broadcast-Nach­rich­ten­aus­sendung geeignet.
  • Da­ten­strö­me wei­ter­ver­ar­bei­ten: Ap­pli­ka­tio­nen, die in Echtzeit auf bestimmte Events reagieren sollen und zu diesem Zweck möglichst schnell und effektiv Da­ten­strö­me wei­ter­ver­ar­bei­ten müssen, finden in Apache Kafka dank der Stream-API einen leis­tungs­star­ken Partner.
  • Da­ten­strö­me speichern: Auch als ver­teil­tes, feh­ler­to­le­ran­tes Spei­cher­sys­tem lässt sich Apache Kafka einsetzen. Dabei spielt es keine Rolle, ob Sie 50 Kilobyte oder 50 Terabyte an kon­sis­ten­ten Daten auf dem bzw. den Servern speichern wollen.

Alle auf­ge­zeig­ten Elemente lassen sich natürlich beliebig kom­bi­nie­ren, sodass Apache Kafka bei­spiels­wei­se als komplexe Streaming-Plattform Daten nicht nur speichert und jederzeit verfügbar macht, sondern auch in Echtzeit ver­ar­bei­tet und mit allen ge­wünsch­ten An­wen­dun­gen und Systemen verknüpft.

Typische Use Cases für Apache Kafka im Überblick:

  • Messaging-System
  • Web-Analytics
  • Spei­cher­sys­tem
  • Stream-Prozessor
  • Event Sourcing
  • Logfile-Analyse/-Ma­nage­ment
  • Mo­ni­to­ring-Lösungen
  • Trans­ak­ti­ons-Log
Zum Hauptmenü