LoginSignup
4
4

More than 5 years have passed since last update.

buffer_queue_full_actionについて

Last updated at Posted at 2015-12-21

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にでも報告してもらえると助かります.

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4