Blog

NiFi Ingestion Blog Serie. TEIL I - Vorteile und Fallstricke der Lego-gesteuerten Entwicklung

Tomasz Nazarewicz

Aktualisiert Oktober 21, 2025
6 Minuten

Apache NiFi, eine Big Data Processing Engine mit grafischer WebUI, wurde entwickelt, um Nicht-Programmierern die Möglichkeit zu geben, Datenpipelines schnell und kodierungsfrei zu erstellen und sie von den schmutzigen, textbasierten Methoden der Implementierung zu befreien. Leider leben wir in einer Welt der Kompromisse, Funktionen haben ihren Preis. In unserer Blogserie möchten wir unsere Erfahrungen und Erkenntnisse aus der Arbeit mit produktiven NiFi-Pipelines vorstellen. Dies wird in den folgenden Artikeln geschehen:

Apache Nifi - warum lieben und hassen Dateningenieure es gleichzeitig?

Teil I - Schnelle Entwicklung, mühsame Pflege

Teil II - Wir haben bereitgestellt, aber zu welchem Preis... - CI/CD des NiFi-Flows

Teil III - Kein Programmieren, einfach ziehen und ablegen, was Sie brauchen, aber wenn es nicht da ist... - benutzerdefinierte Prozessoren, Skripte, externe Dienste

Teil IV - Ein Universum aus Flow-Dateien - NiFi-Architektur

Teil V - Es geht schnell und einfach, was kann da schon schiefgehen - ein Jahr Geschichte eines bestimmten NiFi-Flusses

Ich habe nur eine Regel und die lautet ... - Empfehlungen für die Verwendung von apache NiFi

Dieser Beitrag ist unsere kurze Zusammenfassung der Stärken und Schwächen von Apache NiFi aus der Sicht eines Flow-Entwicklers.


Schnelle Entwicklung

Gehen wir zunächst die Dinge durch, die zur Benutzererfahrung gehören: Stellen Sie sich vor, Sie sind Dateningenieur und Ihre Aufgabe ist es, einen Proof of Concept für eine einfache Dateneingabe in Data Lake zu erstellen. Gehen Sie davon aus, dass Sie mehrere Quellen haben, dass keine Transformationen oder Geschäftslogik erforderlich sind. Der Anwendungsfall ist lediglich das Verschieben von Daten von Punkt A nach Punkt B, mit etwas Protokollierung in der Mitte. NiFi scheint das richtige Tool für diese Aufgabe zu sein.

Der erste Teil, die Entwicklung. Sie würden gerne mit Ihrer Arbeit fertig sein und sich wichtigeren Dingen widmen, wie der Rettung der Welt oder diesem lustigen YouTube-Video. Zu Ihrem Glück verfügt NiFi über Hunderte von gebrauchsfertigen Prozessoren, die eine Vielzahl von Konnektoren zu Datenquellen und Datensenken enthalten. Alles, was Sie tun müssen, ist, sie per Drag & Drop von der oberen Leiste auf die Leinwand zu ziehen und zu konfigurieren. Wenn Sie Zweifel an den Eigenschaften oder der Komponente im Allgemeinen haben, können Sie mit der rechten Maustaste darauf klicken und die Dokumentation öffnen. Danach erstellen Sie Verbindungen zwischen den Prozessoren, um die Reihenfolge festzulegen, in der sie ausgeführt werden sollen. BAM, Sie sind so gut wie fertig. Da der von Ihnen erstellte Datenfluss seine eigene visuelle Darstellung hat, ist die Überprüfung, ob die Logik korrekt ist, eine triviale Aufgabe.

Der nächste Schritt ist das Testen, ob alles funktioniert. NiFi ermöglicht es Ihnen, jeden Prozessor separat zu starten und zu stoppen, so dass Sie steuern können, bis zu welchem Punkt Sie Ihren Ablauf ausführen oder von welchem Punkt aus Sie starten möchten. Sie können auch die Eingabe und Ausgabe für jede Verarbeitungsstufe überprüfen. Im Falle eines Fehlers erhalten Sie ein Bulletin mit einer Beschreibung des Vorfalls. Kombinieren Sie diese drei Funktionen und Sie erhalten einen hervorragenden Einblick in die genaue Funktionsweise des Ablaufs. Damit ist die Proof of Concept-Lösung fertig. Im Allgemeinen sind Sie beeindruckt von der Einfachheit und den Möglichkeiten Ihres neuen Tools.

Reifegrad der Entwicklung

Refactoring ist ein natürlicher Teil des Entwicklungsprozesses. Dazu gehört oft die Umstrukturierung des Ablaufs und das Verschieben von Prozessoren in eine andere Prozessgruppe. An diesem Punkt wird deutlich, dass jedes Element, das Daten enthält, nicht entfernt oder in eine andere Prozessgruppe verschoben werden kann. Dies scheint ein gültiger Punkt für die NiFi-Architektur zu sein, aber in vielen Fällen ist es ein Fallstrick, der Sie dazu zwingt, vor der Umstrukturierung von Prozessgruppen nach versteckten Flowfiles zu suchen. Sie müssen diese manuell finden, da es keine automatische Möglichkeit gibt, alle Daten innerhalb einer Prozessgruppe zu löschen.

Weil Sie in Gedanken versunken sind, löschen Sie die falsche Komponente... ja, Ihre Sorgen sind berechtigt, denn NiFi hat keine Schaltfläche "Rückgängig". Wenn Sie etwas tun, ist es in Stein gemeißelt. Aus Frustration suchen Sie nach einer Lösung für dieses Problem. Die einzige Möglichkeit ist die Speicherung einer Kopie der Prozessgruppe in NiFi Registry, einem Versionskontrollsystem für Abläufe, dessen Funktionalität zwar recht begrenzt ist, das aber ein Rollback zur letzten übertragenen Version ermöglicht.

In der IT sind die Dinge selten einfach. Selbst wenn sie anfangs so aussehen, ist das in der Regel nicht von Dauer. Meistens ist die Hauptfunktionalität, die als "glücklicher Weg" bezeichnet wird, nur ein kleiner Teil der tatsächlichen Arbeit. Früher oder später müssen andere Szenarien in Betracht gezogen werden: Wenn wir eine Verbindung zu einem externen Dienst herstellen, sind Wiederholungen erforderlich, Fehlerzustände müssen behandelt werden usw.

Die oben genannten Probleme sind nicht NiFi-spezifisch, sondern eher eine natürliche Folge der IT-Entwicklung. Aus diesem Grund haben die meisten der derzeit verwendeten Programmiersprachen Mechanismen, die speziell zu ihrer Entschärfung entwickelt wurden. In der objektorientierten Programmierung können wir, wenn eine Funktionalität mehrfach verwendet wird oder einfach nur komplex ist, bestimmte Schritte in verschiedene Methoden, Klassen oder Pakete auslagern. Da eine Methode oder ein Objekt explizit angegebene Parameter haben kann, die wir bereitstellen, ist es möglich, einen erheblichen Teil der Komplexität zu verbergen. Dieses Verhalten ist, zumindest derzeit (Juni 2020), in NiFi unmöglich zu erreichen. Alle Informationen in NiFi werden in den Attributen der Flowfiles gespeichert, die in allen Verarbeitungsschritten implizit weitergegeben werden. Es gibt keine Möglichkeit zu wissen, was genau benötigt wird, ohne die Einzelheiten des Mechanismus zu kennen (Abstraktionslecks). Das ist wie eine Programmierung, bei der alle Instanzvariablen global sind und auf die direkt zugegriffen wird. Als ob das noch nicht genug wäre, werfen innere Prozessgruppen keine Ausnahmen: Wenn der Fehler auftritt, muss er in allen übergeordneten Prozessgruppen behandelt werden.

Unit-Tests und Integrationstests sind wichtig. Sie helfen Ihnen dabei, den Code zu ändern, ihn sauberer zu machen und gleichzeitig sicherzustellen, dass sich die Geschäftsfunktionen vor und nach den Änderungen gleich verhalten. Erinnern Sie sich noch an die Zeit, als Sie ein kleines Kind waren und das Testen Ihres Codes im Wesentlichen darin bestand, ihn einmal mit einer Eingabe zu testen und zu hoffen, dass später nichts kaputt geht? Ja, NiFi hat kein Test-Framework, also keine automatisierten Tests, egal wie laut Sie schreien.

Zusammenfassung

Was uns gefallen hat: Die NiFi-Web-Benutzeroberfläche ermöglicht eine blitzschnelle Entwicklung.

Was wir gehasst haben: Es hat im Vergleich zu anderen Programmiersprachen erhebliche Einschränkungen.

Je mehr Sie die Technologie kennen, desto mehr ihrer Grenzen sind Ihnen bewusst. Würden wir NiFi für unsere früheren Projekte wählen, wenn wir das Wissen hätten, das wir jetzt haben? Die Antwort ist JA, aber in manchen Fällen könnten wir NiFi auf eine etwas andere Weise nutzen. Bleiben Sie dran für weitere Beiträge, um zu lesen, was wir damit meinen.

Vergessen Sie nicht, den vorherigen Blogbeitrag "Apache NiFi - warum Dateningenieure es lieben und gleichzeitig hassen" zu lesen.

Verfasst von

Tomasz Nazarewicz

Contact

Let’s discuss how we can support your journey.