fluentdのv0.12.19から,buffer_queue_full_action
というパラメータを追加したので,その説明をします.
目的
fluentdのバッファはキューが全部埋まってデータをもう入れられない場合,Inputプラグイン側にBufferQueueLimitError
を返します.これによって,in_forward
であれば送信側にエラーを返せるなど,リトライ/フォールバックがやりやすくなってます.
その一方in_tail
のような場合には,どうせキューが空かないと次のデータを読み込んでもまたエラーになるので,ブロックして待って欲しいこともあります.
ということで,この二つを選べるようにしました.
v0.14でプラグインやバッファ周りのAPI改善を考えており,そこでback-pressure相当の機能を考えています.もし入るのであれば上の機能はいらなくなる予定ですが,そもそも入るのか,入るとしてもどの段階で入るか,はまだ未定なので,暫定的にbuffer_queue_full_action
をサポートしたという流れです.
使い方
バッファ用の設定なので,BufferedOutput系のプラグインで指定することになります.
buffer_queue_full_action exception # default
buffer_queue_full_action block # バッファのキューが空くまでInputがブロック
たとえばin_tail
からout_elasticsearch
に投げる場合などは,大抵Elasticsearch側が詰まってひたすらInput側にエラーが返ることになります.こういう場合にはblock
が有効です.
一方,in_forward
からの入力を受け付けるOutputでこれを使うと,in_forward
から送信元のout_forward
にレスポンスが返らなくなるので,block
を使うべきではありません.
block
はある意味最終手段とかミニバッチ用として,本当に使って良いか検討してから使ってください.
今後
重要ではないOutput向けにデータを捨てるdrop_last
もサポートしようかと思いましたが,あまり需要が無さそうだったので,今回は見送りました.何か問題がありましたら,issueにでも報告してもらえると助かります.