Apache NiFi の(とても)基本的な設計手順

# この記事は？
**Apache NiFi** と呼ばれる**データフローオーケストレーションツール**について、詳細は置いていてとりあえずエラーを出さずに試験的に設計をするところまでをまとめたものです。
**NiFi** の記事自体は少ないですが、基本的な知識は割と投稿されているので場合によっては他の記事等を見てみたほうが良いかもです。というわけで本記事は備忘録的な位置づけとなります（便利な言葉「備忘録」）

以下 Apache NiFi について解説している記事です。
**○[データフローオーケストレーションツールApache NiFiとは？](https://qiita.com/kimutansk/items/a083fc963fbe31068cf8)**
NiFi について解説している記事です。
@kimutansk さんは他にもいくつかの NiFi に関する記事を書いているので他の記事も参照してみると良いです。
投稿は 2015 年と少し古いですが、基本的な知識が多いですので現在とのギャップ等はなく参考にできると思います。

**○[Apache NiFiについて調べてみた](https://qiita.com/lethe2211/items/a180373c5c25839bb470)**
インストールから設計まで丁寧にスクショを用いて解説している記事です。
ぶっちゃけこの記事読めば本記事いらないんじゃ（ｒｙ

# 設計手順
流れとしては以下のようになります。
**1. Processor(プロセッサ)を設置する。
2. Processor が必要とする接続先を用意する。
3. 締めとなる Processor を用意する（もしくは設定する）**

一応既存の記事とは少し見方を変えた解説をしていこうと思います。

## Processor(プロセッサ)を設置する。
そもそも **Processor** とはなんぞや、というところですが要は関数のようなものと思っていただいて良いと思います。それぞれの **Processor** は違う処理を持っていて、したいことに合わせてこれをセットしていくことになります。それぞれの詳細については公式のドキュメントを参照していただけると良いと思います。
[Apache NiFi Document](https://nifi.apache.org/docs.html)

まずは画面を確認してみましょう。
<img width="1436" alt="スクリーンショット 2018-10-07 21.31.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/8626e19a-1f8c-9490-434f-d0a705639c67.png">
左上に表示が出ているのが **Processor** となります。
こちらをドラッグ＆ドロップすることにより以下の画面が表示されます。
<img width="1438" alt="スクリーンショット 2018-10-07 21.33.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/d1057051-5ef4-daf4-b7ee-6aece2a86be6.png">
画面中央に写っているものが各種 **Processor** となります。
右上のフィルタから検索をかけることも可能です。
とりあえず適当なものを置いてみましょう。
<img width="1437" alt="スクリーンショット 2018-10-07 21.43.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/395d7071-e49e-8aa1-124e-cbfc2b15b1e5.png">
はい、これで設置完了です。
今度はこれらを接続していきます。

## Processor が必要とする接続先を用意する。
接続の仕方はカーソルを **Processor** の上に置くと以下のようなマークが表示されるのでそれを別の **Processor** にドラッグ＆ドロップしてあげるだけです。
<img width="1440" alt="スクリーンショット 2018-10-07 21.49.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/aea57e97-4f09-d17a-8a5b-9b032ceccd80.png">
すると以下の画面が表示されます。
<img width="1440" alt="スクリーンショット 2018-10-07 21.52.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/314ecf38-c9d7-7faa-48f1-00fdb318d7c5.png">
画面中央のチェックボックスに何かしら入ってないと ADD ボタンが押せないようですのでとりあえず **Success** のみチェックして ADD を押してみます。
<img width="1440" alt="スクリーンショット 2018-10-07 21.54.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/59e47bea-c615-5bcf-fbc7-1b3d6a30a3c8.png">
するとこんなふうに **Processor** 同士が接続されます。ちゃんとチェックを入れたもので繋がれていますね。
ただここで気になるのは**[黄色い!マーク]**。実はこの状態だと動かすことができません。
一番上の **Processor** の場合いくつかの理由があるのですが今回は置いておいて、今度は試しに中央の **LogAttribute** から接続線を引いてみましょう。
<img width="1440" alt="スクリーンショット 2018-10-07 22.03.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/ef485e57-0914-8800-d958-76d73f15a224.png">
おや、先程と違って中央のチェックボックスが一つしかありませんね。
とりあえずこのまま ADD してみましょう。
<img width="1440" alt="スクリーンショット 2018-10-07 22.05.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/43c1666c-6751-89eb-912b-1e725d4bd25a.png">
先ほどと違って**停止マーク**が表示されていますね。これは**待機状態**で、正しく接続がされている状態であることを示しています。

では先程と何が違うのか。それは**接続時に設定されるチェックボックスに理由があります。**
試しにもう一つ **Processor** を置いて接続してみましょう。
<img width="1440" alt="スクリーンショット 2018-10-07 22.10.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/fe63e7bc-f895-0828-9f97-4f5c22056d06.png">
今度の **Processor** はチェックボックスが二つですね。今回は二つとも選択して ADD してみましょう。
<img width="1440" alt="スクリーンショット 2018-10-07 22.12.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/af04f3d8-f533-0125-7a71-ae1db9f5cf38.png">
お、今度は大丈夫そうですね。もうおわかりかと思います。

先程からチェックボックスがーと言っているものは **Relationship** と呼び、必ず設定されなけれればならない項目です。これを設定しないと一向にエラー(!マーク)は消えません。**Relationship** は **Processor** ごとにいくつかの種類があり、適切なものが用意されています。例えばわかりやすいのは二つ前の画像ですが、**Success** と **Failure** があるので**「成功時と失敗時の処理を用意する必要がある」**ってことですね。

もちろん前述したとおり、各 **Processor** は独自の処理を持っており、上記の通り **Relationship** を設定したとしても他に必要な要素があることもあるため注意が必要です（**ExecuteGroovyScript** なんかは実はこっそり他に設定をしています）

## 締めとなる Processor を用意する（もしくは設定する）
前項で **Relationship** を設定する必要があることは理解いただけたと思います。
そこで自然と行き着く考えは、**「じゃあ終わらせたい時どうするの？」**だと思います。
大丈夫です、もちろんそうした設定も存在します。以下を御覧ください。
<img width="1440" alt="スクリーンショット 2018-10-07 22.25.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/901d5929-00b3-5b7f-9c74-f1b0b7faeeb1.png">
先程末尾にあり、エラー状態となっていた **Processor** をダブルクリック（もしくは右クリ→Configure）すると表示される画面です。この右側に見覚えのある文字がありませんか？
もうおわかりですね。チェックして APPLY してみましょう。
<img width="1440" alt="スクリーンショット 2018-10-07 22.28.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/0ba540b1-ada2-2192-d008-6e148624217c.png">
はい、ということで先程の設定をすることで**接続先を用意しなくても良い**と捉えてくれるのでエラーが消えるわけです。これでエラーを出さずに動かすことができますね。

# 他注意点
ここまで読んでいただけばわかると思いますが、**投稿主は英語がまっったくできません。**というか他の記事見ていただける通り新人も新人でして、**簡単な単語の羅列を見ても経験が浅いこともあり何を言っているのかチンプンカンプンです(NiFi Document のリンクとかも貼ったけど日本語訳して読んでもわけわからん)**
ということで NiFi 使用時、甘えて chrome の翻訳機能を使って操作していたのですが…
<img width="1440" alt="スクリーンショット 2018-10-07 22.36.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/3285696c-d4d3-c5d1-d242-0429bde0bf43.png">
画面下の状態おかしいですよね？
実はこれ**日本語訳済みの状態で接続を行ったあとの状態**なのですが、仕組みはわかりませんがシステムが**日本語状態の項目のチェックを無効化しているのかなんかで、設定されている判定になっていない**ようなんです。
ちなみに他の設定項目などでもそうで、別タブなどが開かれるときは正しく表示がされなかったり…。
私のような英語のできない方はお気をつけください。

# 終わりに
**「いやわっけわっかんねー」**と脳内でつぶやきながら動かしております。少しずつやらなければならないことがわかってきて、多少なりとも前には進めているのですが**経験のナッシングな新人**にはフローチャート作成ツールの使い方の想像もできないですし、**何より日本語訳のドキュメントが無さすぎて正直不安しかありません。**
なので少しでもあとから続く方のためにと記事を投稿した次第です。
実際のところめちゃくちゃ素人向けの記事ではありますがそこはあくまで**「備忘録」**ということでご勘弁を（どっちだよ）
以上になります、ご覧頂きありがとうございました。