2017-05-08 3 views
2

Ich bin dabei, Apache NiFi für den Einsatz in einem Projekt zu bewerten. Ich habe vier Instanzen von NiFi v1.1.2 läuft in der Cloud auf Ubuntu 14 Systeme. Drei der Instanzen agieren als Fernprozessgruppen (R1, R2 & R3) und die verbleibende Instanz (M1) wird verwendet, um den Fluss zwischen den RPGs zu verwalten. M1 generiert ein FlowFile, übergibt das FlowFile durch eine Pipeline, die aus den drei RPGs besteht, und protokolliert das FlowFile am Ende. Jedes RPG fügt einfach R{id} an ein Attribut ProcessedBy in der FlowFile an, damit die Reihenfolge, in der die Daten verarbeitet werden, leicht ersichtlich ist.Apache NiFi unregelmäßiger Datenfluss durch Remote Process Groups

Das Problem, das ich habe, ist die Bestellung ist nicht wie erwartet in 100% der Zeit. Ich benutze 2 Pipelines (P1 & P2), die die RPGs in der Reihenfolge R1->R2->R3 bzw. R2->R1->R3 durchqueren. Was ich sehe ist, dass ~ 50% der Zeit, die Flowfile in P1 nicht von R2 verarbeitet, während in P2 es Richtung tatsächlich umkehrt und wird von R2 zweimal so verarbeitet, dass die Strömung um R2->R1->R2->R3

bearbeiten wird: Hier

ist ein Bild meiner Strömung in M1NiFi Flow

+0

Können Sie ein Bild des Flusses teilen? Wie segmentieren Sie den Verkehr für P1 vs. P2? Haben Sie die Provenance-Ereignisse aus Beispiel-Flowfiles betrachtet, um ihre Pfade zu sehen? – James

+0

@James, um den Verkehr für 'P1' &' P2' zu trennen. Ich laufe entweder den einen oder den anderen. Ich schaue mir die Datenherkunfts-Ereignisse an, aber es gibt mir keine Informationen über die Ursache.Ich kann den Pfad des FlowFile sehen, der sich durch die Pipeline bewegt, aber ich kann nicht sehen, was den falschen Fluss verursacht. –

Antwort

2

ich glaube nicht, Remote Process Gruppen verhalten sich mit Art „Funktion Semantik“ Sie erwarten. Das ungerade Flowfile-Datenverkehrsmuster tritt auf, weil Flowfiles, die auf der linken Seite Ihres Datenflusses entstehen, aus RPG-Outputs auf der rechten Seite (und umgekehrt) hervorgehen, aber dies ist das richtige Verhalten für einen RPG-Output-Port.

Das Senden eines Flowfiles an einen Remote-Datenfluss von einem Eingangsport aus garantiert nicht, dass es über den Ausgangsport desselben RPG-Diagrammknotens "zurückkehrt". Mehrere Listener an einem Remote-Ausgabeport erhalten jeweils einen Anteil der Ausgaben. Das visuelle Verbinden einer RPG-Eingabe mit der Ausgabe ist typisch, empfehlenswert und wohl die selbsterklärendste Art, Ihren Fluss zu organisieren. Aber es ist nicht erforderlich.

Sie könnten verschiedene benannte Ports auf dem Remote-NiFis erstellen, um Ihnen weitere Remote-Eingabe-/Ausgabeoptionen zu geben.

Ich habe einen Beispielfluss mit nur zwei NiFi's gemacht, wobei node1.nifi an eine node2.nifi an eine Remote Process Group sendet und von dieser empfängt. Ich organisierte den Fluss, um die möglicherweise nicht verbundene Beziehung zwischen den RPG-Eingabe- und -Ausgabeports zu betonen.

NiFi Remote Process Groups

Die drei RPG Graphknoten alle Referenz die gleiche RPG auf node2.nifi, aber Ein- und Ausgänge getrennt sind. Die Ausgabe wird an zwei Orten empfangen, was zu einer leicht ungleichen Verteilung geführt hat.

+0

Dank @James Ich wusste nicht, dass die Ein-/Ausgänge auf diese Weise funktionieren, die Ergebnisse, die ich sehe, machen jetzt einen vollen Sinn. –

+0

Was ich versuche zu erreichen, ist ein RPG, das ohne Modifikation wiederverwendbar ist, d. H. Es kann gleichzeitig in vielen Pipelines verwendet werden und wird die verarbeiteten Daten jedes Mal an die sendende Pipeline zurückgeben. Gibt es einen "Best-Practice" -Ansatz, um dies zu erreichen? –

+0

Eine Option wäre ein HTTP-Service mit InvokeHttp auf dem Client und HandleHttpRequest ... HandleHttpResponse auf dem Server. Dies würde die beste Anpassung an das Anruf- und Antwortmuster liefern. – James