Das Thema „Big Data“ ist in aller Munde – und natürlich darf eine passende Lösung im Spring-Portfolio nicht fehlen. Im Mittelpunkt steht aber nicht das Speichern der Daten, sondern die Verarbeitung. Spring XD [1] steht für „Spring Extreme Data“ und basiert auf Lösungen wie Spring Integration, Spring Data und Spring Batch. Spring XD ergänzt sie um Support für einige Big-Data-Technologien, eine DSL für Konfigurationen – und eine Container-Architektur.
Meistens denkt man bei „Big Data“ an die Speicherung großer Datenmengen. Aber die Daten müssen auch verarbeitet werden. Schließlich gehen Daten mit Datenströmen einher – für den Import oder den Export in oder aus Big-Data-Speichern. Dabei können auch schon die ersten Verarbeitungsschritte stattfinden – beispielsweise das Zählen, Aufsummieren oder Verdichten der Werte. Eine Verarbeitung der Daten als Batch ist genauso denkbar wie die Onlineverarbeitung. Für solche Szenarien existieren schon die Frameworks Spring Batch und Spring Integration. Sie sind jedoch nicht miteinander integriert. Spring XD stellt eine solche Integration bereit und ergänzt sie um eine Ablaufumgebung ähnlich einem Application Server. Grundsätzlich verwendet Spring XD dazu folgende Elemente:
Jobs sind Batch-Verarbeitungen. Sie können mit Spring Batch als klassische Batches umgesetzt werden, wie sie von Großrechnern her bekannt sind. Eine Alternative ist die Implementierung als MapReduce-Job mithilfe von Spring for Apache Hadoop. Beiden Ansätzen ist gemeinsam, dass sie eine große Datenmenge von irgendwoher einlesen und dann verarbeiten. Jobs sind im aktuellen Stand des Codes noch nicht enthalten. Sie werden aber definitiv ein Teil von Spring XD werden.
Bei Streams werden im Gegensatz zu Jobs nicht alle Daten auf einmal übertragen. Stattdessen wird jeder einzelne Datensatz übertragen und verarbeitet. Streams transportieren Daten von einer Source zu einem Sink. Mögliche Sources sind HTTP, ein Tail auf eine Datei, eine Suche bei Twitter, eine Continuous Query im Gemfire Cache von Pivotal, Syslog Events oder Werte, die über TCP eingehen. Liegen in den Sources neue Werte vor, werden sie direkt an die Sinks geschickt. Sinks können ein Log über ein Logging-Framework, eine Datei im Dateisystem des Computers, eine Datei im Hadoop-Dateisystem HDFS, ein TCP-Port oder der GemFire-Server sein.
Außerdem gibt es Taps, mit denen die Verbindung zwischen einer Source und einem Sink „abgehört“ werden können. Neben der eigentlichen Verarbeitung können so noch weitere Verarbeitungen angestoßen werden.
Die Streams werden bereits im ersten Meilenstein [2], [3] unterstützt...