© Excellent backgrounds/Shutterstock.com
Eine kurze Einführung

Reactive Streams mit Akka


Das Reaktive Manifest [1] definiert nicht blockierende, asynchrone Nachrichtenübermittlung als Grundlage für antwortbereite, elastische und widerstandsfähige – kurz: reaktive – Systeme. Reactive Streams [2] setzt darauf auf und definiert ­einen Standard für asynchrone Datenströme mit nicht blockierendem Rückdruck. Im Folgenden führen wir kurz anhand von Akka Streams, einer Implementierung von Reactive Streams, in das Thema ein.

Aktuelle Trends wie z. B. Real Time Analytics und Big Data lassen der Betrachtung von Daten als Datenströme eine gesteigerte Bedeutung zukommen. Gründe hierfür sind unter anderem, dass Daten genau auf diese Weise zwischen Systemen übertragen werden und insbesondere, dass die Gesamtheit der Daten oft zu groß ist, um lokal effektiv verarbeitet zu werden. Dabei ist es wichtig zu verstehen, dass es sich bei Datenströmen – anders als bei Collections – grundsätzlich um flüchtige und potenziell unbegrenzte Daten handelt: „Wer in dieselben Flüsse hinabsteigt, dem strömt stets anderes Wasser zu“ (Heraklit).

Bei Reactive Streams geht es im Kern um die Steuerung eines Datenstroms von einem Produzenten zu einem Konsumenten über eine asynchrone Grenze hinweg. Die Motivation für die Asynchronizität ergibt sich aus dem Reaktiven Manifest, insbesondere wegen Skalierbarkeit über Rechner und Rechnerkerne hinweg sowie wegen Widerstandsfähigkeit durch Kapselung und Isolation.

seeberger_akkastreams_1.tif_fmt1.jpgAbb. 1: Reactive-Streams-Flusskontrolle

Um zu vermeiden, dass ein schneller Produzent einen langsameren Konsumenten überlastet, setzt Reactive Streams auf eine besondere Form von Flusskontrolle: Nur wenn der Konsument Bedarf signalisiert, darf der Produzent dementsprechend Daten senden. Dieser Bedarf wird übrigens – wie die Daten – nicht blockierend und asynchron übertragen. Mit anderen Worten: Der Konsument übt einen Rückdruck auf den Produzenten aus (Abb. 1). Im Endeffekt führt das dynamisch zu einem Pull- oder Push-Verfahren, je nachdem welche Seite schneller ist.

Das Reactive-Streams-API ist nicht für Endbenutzer gedacht, sondern für Implementierungen wie Akka Streams [3] – zur Sicherstellung der Konformität mit der Reactive-Streams-Spezifikation [4] dient ein TCK [5].

Akka Streams

Akka Streams implementiert – wenig verwunderlich – Reactive Streams auf Basis von Akka-Aktoren. Allerdings ist das, genau wie das Reactive-Streams-API, quasi ein Implementierungsdetail: Akka Streams bietet ein eigenständiges API für Java und Scala zum Prozessieren von Datenflüssen.

Um Wiederverwen...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang