Background
ListenSyslog, ListenTCP, and ListenUDPの仕組み
概要図
一つ Listening 系のprocessorが実行し始めると、独立な thread は起動され、 incoming network connectionsをListenする.
あるconnectionが入ったら、もう一つthreadが立ち上げられ、Connectionからデータを読み込む。我々はこれを channel readerと呼ぶ (最初の original thread は引き続き additional connectionsを監視).
Channel readerはなる早で connectionからデータを読み込む, そして受け取ったすべてのMessageをblocking queueに保存。
該当Blocking queueはProcessorに共有される。
毎回processor実行時、該当 queueから一つあるいは複数 messagesを取得し、 flow fileに書き込む。
ここで、2つ競合Activityが発生:
-
1)Data ProducerはSocket Bufferにデータを書き込む。同時に、Channel Readerは該当Socket Bufferのデータを読み込む。 もし、外部Data ProducerからSocket Bufferへの書き込む速度がNiFiの読み込み速度を越えたら、incoming data が紛失の可能性がある
-
2)channel readerはデータを message queueに保存し、processorが同時に messages queueからMessageを取得. もしmessages保存の速度がProcessorの読み込み速度より速い場合、Message Queueはだんだん最大キャパシティに達する、これで channel reader がブロック状態になり、 queueの中のSpaceを待つ. channel reader が blocking状態ですと、 connectionから読まないで、 socket bufferはだんだんいっぱいになり、データが紛失の可能性がある