Vorwort zur ersten Ausgabe

Es ist eine aufregende Zeit für Apache Kafka. Kafka wird von Zehntausenden von Organisationen genutzt, darunter mehr als ein Drittel der Fortune-500-Unternehmen. Es ist eines der am schnellsten wachsenden Open-Source-Projekte und hat ein riesiges Ökosystem um sich herum geschaffen. Es ist das Herzstück einer Bewegung, die sich mit der Verwaltung und Verarbeitung von Datenströmen beschäftigt.

Woher kommt Kafka? Warum haben wir es gebaut? Und was genau ist es?

Kafka entstand als internes Infrastruktursystem, das wir bei LinkedIn aufgebaut haben. Unsere Beobachtung war ganz einfach: Es gab viele Datenbanken und andere Systeme zur Datenspeicherung, aber in unserer Architektur fehlte etwas, das uns helfen würde, den kontinuierlichen Datenfluss zu bewältigen. Bevor wir Kafka entwickelt haben, haben wir mit allen möglichen Standardoptionen experimentiert, von Messaging-Systemen bis hin zu Log-Aggregations- und ETL-Tools, aber keine von ihnen bot uns, was wir wollten.

Schließlich beschlossen wir, etwas von Grund auf neu zu bauen. Unsere Idee war, dass wir uns nicht auf die Speicherung von Datenstapeln konzentrieren, wie unsere relationalen Datenbanken, Key-Value-Stores, Suchindizes oder Caches, sondern dass wir Daten als einen sich ständig entwickelnden und wachsenden Strom betrachten und ein Datensystem - und eine Datenarchitektur - aufbauen, die auf dieser Idee basiert.

Diese Idee erwies sich als noch breiter anwendbar, als wir erwartet hatten. Obwohl Kafka ursprünglich für Echtzeitanwendungen und den Datenfluss hinter den Kulissen eines sozialen Netzwerks entwickelt wurde, ist es heute das Herzstück von Architekturen der nächsten Generation in jeder erdenklichen Branche. Große Einzelhandelsunternehmen stellen ihre grundlegenden Geschäftsprozesse auf kontinuierliche Datenströme um, Autofirmen sammeln und verarbeiten Echtzeitdatenströme von mit dem Internet verbundenen Autos und auch Banken stellen ihre grundlegenden Prozesse und Systeme auf Kafka um.

Was hat es also mit Kafka auf sich? Wie unterscheidet es sich von den Systemen, die du bereits kennst und nutzt?

Wir haben Kafka als Streaming-Plattform kennengelernt: ein System, mit dem du Datenströme veröffentlichen und abonnieren, speichern und verarbeiten kannst. Die Gewöhnung an diese Art, über Daten zu denken, mag ein wenig anders sein, als du es gewohnt bist, aber sie erweist sich als unglaublich leistungsfähige Abstraktion für die Entwicklung von Anwendungen und Architekturen. Kafka wird oft mit einigen bestehenden Technologiekategorien verglichen: Enterprise Messaging Systeme, Big Data Systeme wie Hadoop und Datenintegrations- oder ETL-Tools. Jeder dieser Vergleiche hat seine Berechtigung, greift aber auch ein wenig zu kurz.

Kafka ist wie ein Messaging-System, mit dem du Nachrichtenströme veröffentlichen und abonnieren kannst. Auf diese Weise ähnelt es Produkten wie ActiveMQ, RabbitMQ, IBMs MQSeries und anderen Produkten. Aber trotz dieser Ähnlichkeiten hat Kafka eine Reihe von Unterschieden zu traditionellen Messaging-Systemen, die es zu einem ganz anderen Tier machen. Hier sind die drei wichtigsten Unterschiede: Erstens arbeitet es als modernes verteiltes System, das als Cluster läuft und so skaliert werden kann, dass es alle Anwendungen selbst in den größten Unternehmen verarbeiten kann. Anstatt Dutzende von einzelnen Messaging-Brokern zu betreiben, die mit verschiedenen Anwendungen verkabelt sind, kannst du eine zentrale Plattform nutzen, die elastisch skaliert werden kann, um alle Datenströme in einem Unternehmen zu verarbeiten. Zweitens ist Kafka ein echtes Speichersystem, das Daten so lange speichern kann, wie du willst. Das hat enorme Vorteile bei der Verwendung als Verbindungsschicht, da es echte Liefergarantien bietet - die Daten werden repliziert, sind beständig und können so lange gespeichert werden, wie du willst. Schließlich erhöht die Welt der Stream-Verarbeitung die Abstraktionsebene ganz erheblich. Messaging-Systeme geben meist nur Nachrichten aus. Mit den Stream-Processing-Funktionen in Kafka kannst du mit viel weniger Code dynamisch abgeleitete Streams und Datensätze aus deinen Streams berechnen. Diese Unterschiede machen Kafka so eigenständig, dass es keinen Sinn macht, es als "eine weitere Warteschlange" zu bezeichnen.

Eine andere Sichtweise auf Kafka - und eine unserer Motivationen bei der Entwicklung und dem Aufbau von Kafka - ist, dass wir es als eine Art Echtzeitversion von Hadoop betrachten. Mit Hadoop kannst du Dateidaten in einem sehr großen Maßstab speichern und regelmäßig verarbeiten. Mit Kafka kannst du Datenströme speichern und kontinuierlich verarbeiten, ebenfalls in großem Maßstab. Auf technischer Ebene gibt es durchaus Ähnlichkeiten, und viele sehen den aufstrebenden Bereich der Stream-Verarbeitung als eine Art Obermenge der Stapelverarbeitung, die mit Hadoop und seinen verschiedenen Verarbeitungsschichten durchgeführt wurde. Was bei diesem Vergleich übersehen wird, ist, dass die Anwendungsfälle, die eine kontinuierliche Verarbeitung mit niedriger Latenz ermöglicht, ganz anders sind als die, für die ein Stapelverarbeitungssystem in Frage kommt. Während Hadoop und Big Data auf Analyseanwendungen, oft im Bereich Data Warehousing, ausgerichtet sind, eignet sich Kafka aufgrund seiner geringen Latenz für die Kernanwendungen, die ein Unternehmen direkt antreiben. Das macht Sinn: Ereignisse in einem Unternehmen passieren ständig, und die Möglichkeit, auf sie zu reagieren, sobald sie eintreten, macht es viel einfacher, Dienste zu entwickeln, die den Betrieb des Unternehmens direkt unterstützen, auf Kundenerfahrungen zurückgreifen und so weiter.

Der letzte Bereich, mit dem Kafka verglichen wird, sind ETL- oder Datenintegrationstools. Schließlich verschieben diese Tools Daten, und Kafka verschiebt Daten. Das hat auch seine Berechtigung, aber ich denke, der Hauptunterschied ist, dass Kafka das Problem umgedreht hat. Kafka ist kein Tool, mit dem man Daten aus einem System auslesen und in ein anderes einfügen kann, sondern eine Plattform, die auf Echtzeit-Ereignisströme ausgerichtet ist. Das bedeutet, dass sie nicht nur Standardanwendungen und -datensysteme miteinander verbinden kann, sondern auch benutzerdefinierte Anwendungen, die mit denselben Datenströmen arbeiten. Wir denken, dass diese Architektur, die sich auf Ereignisströme konzentriert, eine wirklich wichtige Sache ist. In gewisser Weise sind diese Datenströme der wichtigste Aspekt eines modernen digitalen Unternehmens, genauso wichtig wie die Geldströme, die du in einem Jahresabschluss siehst.

Die Fähigkeit, diese drei Bereiche miteinander zu verbinden - also alle Datenströme für alle Anwendungsfälle zusammenzuführen - macht die Idee einer Streaming-Plattform so attraktiv für die Menschen.

Dennoch ist das alles ein bisschen anders, und wenn du aus der Welt der Request/Response-Anwendungen und relationalen Datenbanken kommst, ist es eine ziemliche Umstellung zu lernen, wie man Anwendungen für kontinuierliche Datenströme denkt und baut. Dieses Buch ist der beste Weg, um etwas über Kafka zu lernen, von den Interna bis zu den APIs, geschrieben von einigen der Leute, die es am besten kennen. Ich hoffe, du hast genauso viel Spaß beim Lesen wie ich!

Get Kafka: The Definitive Guide, 2. Auflage now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.