Open-Source-Analyseplattform Das kann die Stream-Verarbeitungs-Engine Apache Heron

Von Thomas Joos

Apache Heron ist ein Open Source Tool, das ursprünglich von Twitter entwickelt wurde, um umfassende Datenmengen zu analysieren. Im Fokus stehen dabei vor allem große Datenmengen, die in kurzer Zeit analysiert werden sollen.

Anbieter zum Thema

Twitter nutzt Apache Heron beispielsweise dazu, Wörter in Tweets zu zählen oder Trends bei den Tweets zu erkennen.
Twitter nutzt Apache Heron beispielsweise dazu, Wörter in Tweets zu zählen oder Trends bei den Tweets zu erkennen.
(Bild: T. Joos)

Apache Heron ist ein Open Source Tool zur verteilten, fehlertoleranten Streaming-Verarbeitung in Echtzeit. Das Tool kommt vor allem bei der Verwaltung von Werbung, dem Monitoring für Real Time Trends und Machine Learning sowie für Real Time Business Intelligence zum Einsatz. Twitter nutzt Apache Heron beispielsweise dazu, Wörter in Tweets zu zählen oder Trends bei den Tweets zu erkennen. Für den Einsatz von Heron werden Java 11, Python 3.6 und Python 4.1.0 benötigt.

Heron als Ergänzung zu Storm bei Twitter, Microsoft und Google im Einsatz

Entwickelt wurde das Tool von Twitter, um Storm ersetzen oder ergänzen zu können. Nach kurzer Zeit hat Heron im Bereich des Streamings von Echtzeitdaten Storm bei Twitter abgelöst. Neben der besseren Leistung hat Heron einen weiteren Vorteil: Es benötigt sehr viel weniger CPU-Leistung und Arbeitsspeicher.

Aus diesem Grund unterstützt Heron auch die APIs von Storm, Apache Beam und anderen Lösungen. Heron ist erweiterbar und kann als Streaming-Engine für verschiedene Einsatzbereiche genutzt werden. Namhafte Unternehmen wie Google, Microsoft, die Standford University und andere setzen auf die Funktionen von Heron.

Seit 2016 steht es als Open Source unter der Apache-Lizenz zur Verfügung und hat den Inkubator-Status. Bei Twitter ist Heron bereits seit Jahren im produktiven Betrieb und hat seinen Nutzen unter Beweis gestellt. Heron zeichnet sich durch hohen Datendurchlauf und geringe Latenzen aus. Das ist bei der Verarbeitung von Echtzeitdaten im Petabyte-Bereich natürlich unerlässlich. Die einzelnen Komponenten dazu sind in C++ geschrieben.

Das sind die Ziele von Apache Heron

Apache Heron unterstützt verschiedene Programmiersprachen. Dazu gehören unter anderem auch C++, Java und auch Python. Einzelne Aufgaben, die zur Analyse genutzt werden, kann Heron voneinander isolieren. Dadurch lassen sich Profile und verschiedene Container nutzen, in den auch unterschiedliche Daten analysiert werden. In diesem Zusammenhang kann auch für den kompletten Betrieb von Heron auf Container gesetzt werden. Heron unterstützt in diesem Zusammenhang auch Kubernetes.

Die Architektur von Heron – Sprouts und Bolts

Im Zentrum der Architektur von Heron steht der Scheduler, der die einzelnen Topologien verwaltet, über die Heron seine Daten bezieht. Der Topology-Master im Master-Container verwaltet wiederum die einzelnen Daten-Container und auch die Berechtigungen für den Zugriff auf Heron. In einer Heron-Architektur tragen Streaming-Anwendungen die Bezeichnung „Topologie“. Dabei handelt es sich um einen azyklischen Graphen (DAG), dessen Knoten die Aufgabe haben, datenverarbeitende Elemente darzustellen und Datenströme zu erfassen.

Die Heron-Weboberfläche
Die Heron-Weboberfläche
(Bild: T. Joos)

Dabei kommen in Heron vor allem „Sprouts“ und „Bolts“ als Node (Knoten) zum Einsatz. Bei Sprouts handelt es sich um die Verbindungen zu den Datenquellen zum Einspeisen von Daten in die Datenströme. Die Bolts verarbeiten eingehende Daten und geben Daten auch weiter. Diese weitergegebenen Daten können wiederum von anderen Bolts weiterverarbeitet werden.

In einer Umgebung kann es mehrere Sprouts geben, die Datenquellen anzapfen und Datenströme erzeugen. Diese Datenströme erfassen wiederum die verschiedenen Bolts in der Infrastruktur. Dabei kann es auch komplexe Infrastrukturen mit zahlreichen Sprouts und Bolts geben. In einem solchen Szenario können mehrere Sprouts unterschiedliche Bolts mit Datenströmen versorgen, während wiederum die Bolts verschiedene Datenströme weiterleiten, die von einem weiteren Bolt verarbeitet werden. Das schafft natürlich sehr flexible Szenarien zur Verarbeitung von Streaming-Daten.

Komponenten von Heron parallel betreiben und gruppieren

Abhängig von den zu verarbeitenden Daten kommt es natürlich häufig vor, dass ein einzelner Sprout oder Bolt nicht ausreicht, um Datenströme effektiv zu verwalten. Selbst wenn ein Sprout dazu in der Lage ist, kann es passieren, dass der Node, auf dem der Sprout läuft, überlastet wird. Daher gibt es in Heron auch die Möglichkeit, mit einer intelligenten Topologie mehrere Prozesse aufzubauen, die parallel voneinander funktionieren.

Alle Knoten in einem Heron-Cluster erfasst die Anzahl an gleichzeitigen Instanzen, die auf dem System laufen. Dabei berücksichtigt das System Sprouts und Bolts gleichermaßen. Hier können Entwickler auch definieren, welche Parallelität zum Einsatz kommen soll. Dadurch bieten sich flexible Möglichkeiten die Leistung eines Heron-Clusters auf Basis der parallelen Prozesse zu steuern. Auf verschiedenen Knoten ist es daher möglich unterschiedliche Werte für parallele Prozesse zu definieren.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Wenn die Parallelität festgelegt ist, also die Anzahl an Instanzen von Sprouts und Bolts, die auf den Knoten eingesetzt werden können, muss auch noch festgelegt werden, wie Heron die Daten auf die Instanzen verteilen soll. Dazu kommt die Gruppierung zum Einsatz. Hierüber lässt sich steuern, welche Sprout-Instanz zu welcher Bolt-Instanz Datenströme senden soll.

Neben der Möglichkeit Daten, statisch zu senden, also genau festzulegen welche Sprout- und Bolt-Instanzen zusammenarbeiten, kann Heron die Daten natürlich auch nach dem Zufallsprinzip verteilen. Es lassen sich auch komplexe Szenarien abbilden und umfassende Regeln erstellen, auch im hybriden Betrieb.

Die Parallelität, Gruppierung und die damit verbundenen Regeln und Richtlinien lassen sich zu Containern zusammenfassen. Hier können Entwickler wiederum definieren, wie viel CPU-Ressourcen und Arbeitsspeicher zur Verfügung stehen sollen. Es lassen sich natürlich auch mehrere Container definieren. Wer keine verschiedenen Container einsetzen will, kann auch die ganze Struktur in einem einzelnen Container umsetzen. Das ist das Standardverhalten von Heron, wenn Entwickler keine Container definieren. Die Container werden wiederum an den bereits erwähnten Scheduler übermittelt, der die Ausführung der Container einplant.

(ID:48085419)