LoginSignup
5
3

More than 5 years have passed since last update.

メモ:fluent-plugin-kinesisとバッファまわりの設定

Last updated at Posted at 2018-05-07

概要

fluent-plugin-kinesisを使っているが、バッファまわりの設定が気になって調べた。

fluent-plugin-kinesisに限定しない話が多い。

メモなのでバラバラ書いていく。

メモ

Fluentdのアーキテクチャ(バッファ)

チャンク、バッファ、キューの概念を抑えておく。

設定値について

fluent-plugin-kinesis

スループットを上げるための設定が上記のREADMEに書いてある。

  flush_interval 1
  chunk_limit_size 1m
  flush_thread_interval 0.1
  flush_thread_burst_interval 0.01
  flush_thread_count 15

前のバージョンのFluentdではこう。

  flush_interval 1
  buffer_chunk_limit 1m
  try_flush_interval 0.1
  queued_chunk_flush_interval 0.01
  num_threads 15

バッファとしてのメモリとファイル

Fluentdのデフォルトはメモリだが、ファイルに変更することもできる。fluent-kinesis-pluginは、BufferedOutputを継承しているため。

ファイルを使うようにするには、<match foo.bar></match>の中に、下記を入れる。

  buffer_type file
  buffer_path /path/to/buffer

バッファのサイズ

buffer_chunk_limit × buffer_queue_limit で計算できる。
たとえば、buffer_chunk_limitが2MBでbuffer_queue_limitが100ならば、200MBまでバッファに入れておける。

バッファタイプをファイルにした場合、指定したパスに2MBのファイルが100個できているはず。

よくわからなかった点

バッファの総量を超えるデータを流し込んだときに、データがどうなっているのか。(失われてしまう?)

実験としてバッファのサイズを大きく超えるデータを流し込んだ結果、ファイルとして作成されたバッファの数・サイズは変わらず、メモリ使用量にも変化がなかった。

そして、バッファに溜まったデータが少しずつ捌けていくと、新しくバッファのファイルが作成されていた。(この傾向は30分以上続いていた)

下記のワーニングは継続している出ている状態。

2018-05-07 15:24:24 +0000 [warn]: emit transaction failed: error_class=Fluent::BufferQueueLimitError error="queue size exceeds limit" tag="test"

このログの意味は下記。

fluentdのバッファはキューが全部埋まってデータをもう入れられない場合,Inputプラグイン側にBufferQueueLimitErrorを返します.
https://qiita.com/repeatedly/items/11f8f2eefc4ae1eea2f9

inputはin_tailを使っていたが、たしかに、長い時間がたっても読み込みは完了していない様子だった。

outputがこの例外をinput側に渡すことで、読み込み速度を調整しているのかもしれない。

参考

5
3
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
5
3