{"id":37567,"date":"2019-10-31T22:18:22","date_gmt":"2019-10-31T19:18:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike\/"},"modified":"2019-10-31T22:18:22","modified_gmt":"2019-10-31T19:18:22","slug":"apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","title":{"rendered":"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Einf\u00fchrung<\/h3>\n<p><\/p>\n<p>Es kam so, dass ich an meinem aktuellen Arbeitsplatz mit dieser Technologie vertraut gemacht wurde. Ich beginne mit einer kleinen Vorgeschichte. Bei einem weiteren Treffen wurde unserem Team mitgeteilt, dass wir eine Integration mit <em>einem bekannten System<\/em>. Unter der Integration verstand man, dass dieses bekannte System uns \u00fcber HTTP Anfragen an einen bestimmten Endpunkt sendet und wir, wie seltsam das auch erscheinen mag, Antworten in Form einer SOAP-Nachricht zur\u00fccksenden. Das scheint alles einfach und trivial zu sein. Daraus folgt, dass wir\u2026<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3>Aufgabe<\/h3>\n<p><\/p>\n<p>drei Dienste erstellen m\u00fcssen. Der erste davon ist der Dienst zur Aktualisierung der Datenbank. Dieser Dienst aktualisiert die Daten in der Datenbank, wenn neue Daten aus einem externen System eintreffen, und generiert eine Datei im CSV-Format, um sie an das n\u00e4chste System zu \u00fcbergeben. Der Endpunkt des zweiten Dienstes \u2014 dem FTP-Transportdienst \u2014 wird aufgerufen, der die \u00fcbergebene Datei erh\u00e4lt, sie validiert und sie \u00fcber FTP in den Dateispeicher ablegt. Der dritte Dienst \u2014 der Daten\u00fcbertragungsdienst an den Verbraucher \u2014 arbeitet asynchron mit den ersten beiden. Er nimmt eine Anfrage von einem externen System zur Verf\u00fcgungstellung der oben erw\u00e4hnten Datei entgegen, nimmt die vorbereitete Antwortdatei, modifiziert sie (aktualisiert die Felder id, description, linkToFile) und sendet die Antwort in Form einer SOAP-Nachricht. Insgesamt sieht das Bild folgenderma\u00dfen aus: Die ersten beiden Dienste beginnen ihre Arbeit nur, wenn Daten zur Aktualisierung eingegangen sind. Der dritte Dienst l\u00e4uft st\u00e4ndig, da es viele Verbraucher von Informationen gibt \u2014 etwa 1000 Anfragen zur Datenbeschaffung pro Minute. Die Dienste sind konstant verf\u00fcgbar und ihre Instanzen befinden sich in verschiedenen Umgebungen wie Test, Demo, Preprod und Prod. Im Folgenden wird das Schema der Funktionsweise dieser Dienste dargestellt. Ich m\u00f6chte gleich klarstellen, dass einige Details vereinfacht wurden, um unn\u00f6tige Komplexit\u00e4t zu vermeiden.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten\" src=\"\/wp-content\/uploads\/2019\/08\/1edca5d5e917d8ac55ac96e892e816dd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"tehnicheskoe-uglublenie\">Technisches Tiefenverst\u00e4ndnis<\/h3>\n<p><\/p>\n<p>Bei der Planung der Aufgabenl\u00f6sung entschieden wir uns zun\u00e4chst, eine Anwendung in Java unter Verwendung des Spring-Frameworks, mit einem Lastenausgleich durch Nginx, einer PostgreSQL-Datenbank und anderen technischen und weniger technischen Werkzeugen zu erstellen. Da die Zeit, um die technische L\u00f6sung zu erarbeiten, es erlaubte, andere Ans\u00e4tze zur L\u00f6sung dieser Aufgabe zu pr\u00fcfen, fiel unser Blick auf die in bestimmten Kreisen angesagte Technologie Apache NIFI. Ich m\u00f6chte gleich darauf hinweisen, dass diese Technologie uns die M\u00f6glichkeit gegeben hat, diese 3 Dienste zu erkennen. In diesem Artikel wird die Entwicklung des Datei\u00fcbertragungsdienstes und des Datentransferdienstes an den Verbraucher beschrieben. Wenn der Artikel gut ankommt, werde ich \u00fcber den Dienst zur Aktualisierung der Daten in der Datenbank schreiben.<\/p>\n<p><\/p>\n<h3 id=\"chto-eto-takoe\">Was ist das?<\/h3>\n<p><\/p>\n<p>NIFI ist eine verteilte Architektur zur schnellen parallelen Daten\u00fcbertragung und -verarbeitung, mit einer gro\u00dfen Anzahl von Plugins f\u00fcr Datenquellen und -transformierungen, Konfigurationsversionierung und vielem mehr. Ein angenehmer Bonus ist, dass es sehr einfach zu bedienen ist. Triviale Prozesse wie getFile, sendHttpRequest und andere k\u00f6nnen als Quadrate dargestellt werden. Jedes Quadrat stellt einen bestimmten Prozess dar, dessen Interaktionen im Bild unten sichtbar sind. Eine detaillierte Dokumentation zur Interaktion und Einstellung von Prozessen ist verfasst <noindex><a rel=\"nofollow\" href=\"https:\/\/nifi.apache.org\/docs.html\">hier<\/a><\/noindex> , f\u00fcr diejenigen, die auf Russisch sind \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.arenadata.io\/ads\/UserNIFI\/index.html\">hier<\/a><\/noindex>. In der Dokumentation wird genau erkl\u00e4rt, wie man NIFI entpackt und startet sowie wie man Prozesse erstellt, die ebenfalls Quadrate sind.<br \/>\nDie Idee, einen Artikel zu schreiben, entstand nach langen Suchen und der Strukturierung der gesammelten Informationen in etwas Verst\u00e4ndliches, sowie dem Wunsch, es zuk\u00fcnftigen Entwicklern etwas zu erleichtern.<\/p>\n<p><\/p>\n<h3 id=\"primer\">Beispiel<\/h3>\n<p><\/p>\n<p>Es wurde ein Beispiel betrachtet, wie Quadrate miteinander interagieren. Das Gesamtschema ist ganz einfach: Wir erhalten eine HTTP-Anfrage (theoretisch mit einer Datei im Anfragek\u00f6rper. Zur Demonstration der M\u00f6glichkeiten von NIFI startet in diesem Beispiel die Anfrage den Prozess des Abrufs einer Datei aus einem lokalen Speicherort), dann senden wir zur\u00fcck, dass die Anfrage empfangen wurde, w\u00e4hrend gleichzeitig der Prozess zum Abruf der Datei aus dem Speicherort und der anschlie\u00dfende Prozess des Transfers \u00fcber FTP in den Speicherort gestartet wird. Es ist zu erkl\u00e4ren, dass die Prozesse durch das sogenannte flowFile miteinander verbunden sind. Dies ist die grundlegende Entit\u00e4t in NIFI, die Attribute und Inhalte speichert. Der Inhalt sind die Daten, die als Datei im Fluss dargestellt werden. Das hei\u00dft grob gesagt, wenn Sie eine Datei aus einem Quadrat erhalten und sie an ein anderes weitergeben, besteht der Inhalt aus Ihrer Datei.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten\" src=\"\/wp-content\/uploads\/2019\/08\/2649a29dcc9155ae7734db44fc6d3f9a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie Sie sehen k\u00f6nnen, zeigt dieses Bild den allgemeinen Prozess. HandleHttpRequest \u2013 empf\u00e4ngt Anfragen, ReplaceText \u2013 generiert den Antwortinhalt, HandleHttpResponse \u2013 gibt die Antwort zur\u00fcck. FetchFile \u2013 erh\u00e4lt eine Datei aus dem Dateispeicher und \u00fcbertr\u00e4gt sie an das Quadrat PutSftp \u2013 legt diese Datei an dem angegebenen Ort auf FTP ab. Jetzt schauen wir uns diesen Prozess genauer an. <\/p>\n<p><\/p>\n<p>In diesem Fall ist die Anfrage der Anfang von allem. Lassen Sie uns die Konfigurationsparameter betrachten. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten\" src=\"\/wp-content\/uploads\/2019\/08\/cf93a09a10ed9aebaae2c10b93619658.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nHier ist alles ziemlich trivial, mit Ausnahme von StandartHttpContextMap \u2013 dies ist eine Art Dienst, der das Senden und Empfangen von Anfragen erm\u00f6glicht. Genauer und sogar mit Beispielen kann man schauen \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/ddewaele.github.io\/http-communication-with-apache-nifi\/\">hier<\/a><\/noindex><\/p>\n<p>Als n\u00e4chstes betrachten wir die Konfigurationsparameter des quadratischen ReplaceText. Hier ist es wichtig auf ReplacementValue zu achten \u2013 das ist der Inhalt, der dem Benutzer als Antwort zur\u00fcckgegeben wird. In den Einstellungen kann das Log-Level geregelt werden, die Logs k\u00f6nnen betrachtet werden {wo nifi entpackt wurde}\/nifi-1.9.2\/logs, dort gibt es auch die Parameter failure\/success \u2013 basierend auf diesen Parametern kann der Prozess insgesamt reguliert werden. Das hei\u00dft, im Falle einer erfolgreichen Textverarbeitung wird der Prozess zur Zustellung der Antwort an den Benutzer ausgel\u00f6st, und in einem anderen Fall protokollieren wir einfach den misslungenen Prozess. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten\" src=\"\/wp-content\/uploads\/2019\/08\/97341fd7f6ea34a219a16c2c732a8062.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In den Eigenschaften von HandleHttpResponse gibt es au\u00dfer dem Status bei erfolgreicher Erstellung der Antwort nicht viel Interessantes. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten\" src=\"\/wp-content\/uploads\/2019\/08\/6082c84f81274927fdfbd20378cc252c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mit der Anfrage und der Antwort sind wir jetzt durch \u2013 gehen wir weiter zum Abruf der Datei und deren \u00dcbertragung auf den FTP-Server. FetchFile \u2013 erh\u00e4lt die Datei aus dem im Setup angegebenen Pfad und leitet sie an den n\u00e4chsten Prozess weiter. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten\" src=\"\/wp-content\/uploads\/2019\/08\/d1368879e13a223404a53ab623ae4079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der PutSftp-Block speichert die Datei im Dateispeicher. Die Konfigurationsparameter k\u00f6nnen wir unten sehen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten\" src=\"\/wp-content\/uploads\/2019\/08\/c22648f39bb0ad4e7209911e614d3edf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es ist wichtig zu beachten, dass jeder Block ein separater Prozess ist, der gestartet werden muss. Wir haben das einfachste Beispiel betrachtet, das keine komplizierte Anpassung erfordert. Lassen Sie uns nun einen etwas komplizierteren Prozess betrachten, bei dem wir ein wenig in Groovy schreiben werden. <\/p>\n<p><\/p>\n<h3 id=\"bolee-slozhnyy-primer\">Ein komplexeres Beispiel<\/h3>\n<p><\/p>\n<p>Der Daten\u00fcbertragungsdienst an den Verbraucher ist etwas komplexer geworden, aufgrund des Modifikationsprozesses der SOAP-Nachricht. Der gesamte Prozess ist im Bild unten dargestellt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten\" src=\"\/wp-content\/uploads\/2019\/08\/c48aa08c030cc252f9e53ce877329701.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier ist die Idee ebenfalls nicht besonders kompliziert: Wir haben eine Anfrage vom Verbraucher erhalten, dass er Daten ben\u00f6tigt, haben eine Antwort gesendet, dass die Nachricht eingegangen ist, den Prozess zum Abrufen der Antwortdatei gestartet, diese mit einer bestimmten Logik bearbeitet und die Datei dann dem Verbraucher in Form einer SOAP-Nachricht auf dem Server \u00fcbermittelt. <\/p>\n<p><\/p>\n<p>Ich denke, es ist nicht notwendig, die bereits gesehenen Bl\u00f6cke erneut zu beschreiben \u2013 lassen Sie uns sofort zu neuen \u00fcbergehen. Wenn Sie eine Datei bearbeiten m\u00fcssen und einfache Bl\u00f6cke wie ReplaceText nicht ausreichen, m\u00fcssen Sie Ihr eigenes Skript schreiben. Dies kann mit dem Block ExecuteGroovyScript erfolgen. Die Einstellungen daf\u00fcr sind unten dargestellt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten\" src=\"\/wp-content\/uploads\/2019\/08\/42d6691cf608b1620774426eae7b7027.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es gibt zwei M\u00f6glichkeiten, ein Skript in dieses Quadrat zu laden. Die erste besteht darin, die Skriptdatei hochzuladen. Die zweite besteht darin, das Skript in `scriptBody` einzuf\u00fcgen. Soweit ich wei\u00df, unterst\u00fctzt das Quadrat `executeScript` mehrere Programmiersprachen \u2014 eine davon ist Groovy. Ich entt\u00e4usche die Java-Entwickler \u2014 Skripte k\u00f6nnen in solchen Quadraten nicht in Java geschrieben werden. F\u00fcr diejenigen, die es wirklich m\u00f6chten \u2014 es muss ein benutzerdefiniertes Quadrat erstellt und ins NIFI-System eingef\u00fcgt werden. Dieser gesamte Vorgang ist mit ziemlich langwierigen T\u00e4nzen mit dem Tamburin verbunden, mit denen wir uns im Rahmen dieses Artikels nicht besch\u00e4ftigen werden. Ich habe die Sprache Groovy gew\u00e4hlt. Unten ist ein Testskript dargestellt, das einfach die ID in der SOAP-Nachricht inkrementell aktualisiert. Es ist wichtig zu beachten: Sie nehmen die Datei aus `flowFile`, aktualisieren sie, und es ist nicht zu vergessen, dass sie die aktualisierte Datei wieder zur\u00fccklegen m\u00fcssen. Au\u00dferdem ist zu beachten, dass nicht alle Bibliotheken eingebunden sind. Es kann sein, dass Sie eine der Bibliotheken importieren m\u00fcssen. Ein weiterer Nachteil ist, dass das Skript in diesem Quadrat ziemlich schwer zu debuggen ist. Es gibt einen Weg, sich mit der JVM von NIFI zu verbinden und den Debugging-Prozess zu starten. Pers\u00f6nlich habe ich bei mir eine lokale Anwendung gestartet und den Empfang der Datei aus der Sitzung simuliert. Das Debugging habe ich ebenfalls lokal gemacht. Fehler, die beim Laden des Skripts auftreten, lassen sich relativ leicht googeln und werden von NIFI selbst im Log vermerkt.<\/p>\n<p><\/p>\n<pre><code class=\"java\">import org.apache.commons.io.IOUtils\nimport groovy.xml.XmlUtil\nimport java.nio.charset.*\nimport groovy.xml.StreamingMarkupBuilder\n\ndef flowFile = session.get()\nif (!flowFile) return\ntry {\n    flowFile = session.write(flowFile, { inputStream, outputStream -&gt;\n        String result = IOUtils.toString(inputStream, \"UTF-8\");\n        def recordIn = new XmlSlurper().parseText(result)\n        def element = recordIn.depthFirst().find {\n            it.name() == 'id'\n        }\n\n        def newId = Integer.parseInt(element.toString()) + 1\n        def recordOut = new XmlSlurper().parseText(result)\n        recordOut.Body.ClientMessage.RequestMessage.RequestContent.content.MessagePrimaryContent.ResponseBody.id = newId\n\n        def res = new StreamingMarkupBuilder().bind { mkp.yield recordOut }.toString()\n        outputStream.write(res.getBytes(StandardCharsets.UTF_8))\n} as StreamCallback)\n     session.transfer(flowFile, REL_SUCCESS)\n}\ncatch(Exception e) {\n    log.error(\"Error during processing of validate.groovy\", e)\n    session.transfer(flowFile, REL_FAILURE)\n}<\/code><\/pre>\n<p><\/p>\n<p>Damit endet die Anpassung des Quadrats. Die aktualisierte Datei wird dann an das Quadrat \u00fcbergeben, das sich mit dem Versand der Datei an den Server besch\u00e4ftigt. Unten sind die Einstellungen dieses Quadrats dargestellt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten\" src=\"\/wp-content\/uploads\/2019\/08\/706c53d8deaf3d1ef47bd337e639197a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir beschreiben die Methode, mit der die SOAP-Nachricht \u00fcbermittelt wird. Wir geben an, wohin. Au\u00dferdem muss angegeben werden, dass dies wirklich SOAP ist.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kurz \u00dcberblick \u00fcber die praktischen M\u00f6glichkeiten\" src=\"\/wp-content\/uploads\/2019\/08\/7206bc2a1c66a0204c0589daf35fd328.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir f\u00fcgen mehrere Eigenschaften wie Host und Action (soapAction) hinzu. Speichern, \u00fcberpr\u00fcfen. Ausf\u00fchrlichere Informationen zum Versenden von SOAP-Anfragen finden Sie hier. <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/49457764\/nifi-how-to-use-invokehttp-processor-with-soap\/49565048\">hier<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Wir haben mehrere Einsatzm\u00f6glichkeiten von NIFI-Prozessen betrachtet. Wie sie interagieren und welchen echten Nutzen sie bringen. Die betrachteten Beispiele sind Testf\u00e4lle und unterscheiden sich etwas von dem, was real im Einsatz ist. Ich hoffe, dieser Artikel wird f\u00fcr Entwickler von Nutzen sein. Vielen Dank f\u00fcr Ihre Aufmerksamkeit. Bei Fragen schreiben Sie mir bitte. Ich werde mich bem\u00fchen, zu antworten.<\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/465299\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439. \u041d\u0430\u0447\u043d\u0443 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438. \u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043c\u0438\u0442\u0438\u043d\u0433\u0435, \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u041f\u043e\u0434 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0435\u0439 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043c \u0441\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0447\u0435\u0440\u0435\u0437 HTTP \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0435\u043d\u0434\u043f\u043e\u0438\u043d\u0442, \u0430 \u043c\u044b, \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0441\u043b\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28196,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-37567","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439. \u041d\u0430\u0447\u043d\u0443 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Apache NIFI \u2014 \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439. \u041d\u0430\u0447\u043d\u0443 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:18:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:18:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Apache NIFI \u2013 Eine kurze \u00dcbersicht der M\u00f6glichkeiten in der Praxis | ProHoster","description":"Einf\u00fchrung Es hat sich so ergeben, dass ich an meinem aktuellen Arbeitsplatz mit dieser Technologie vertraut wurde. Ich beginne mit einer kurzen Vorgeschichte.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Apache NIFI \u2014 \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439. \u041d\u0430\u0447\u043d\u0443 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438.","og:url":"https:\/\/prohoster.info\/de\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:18:22+00:00","article:modified_time":"2019-10-31T19:18:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37567","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 18:24:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:24:24","updated":"2026-01-23 18:24:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/37567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=37567"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/37567\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/28196"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=37567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=37567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=37567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}