Fluentd -> Elasticsearch 大量データ転送でトラブル
上の記事にあるように,Elasticsearchに大量のデータを一気に流し込むと色々と問題が起きます. 元々検索エンジンはスケールさせるのが難しく,よく当たる問題だと思います.
また,Fluentdとかだとガンガンログを流し込むことも多く,この辺で詰まる云々はたまに聞きます.
で,Elasticsearch勉強会にFlorianという本家のエンジニアが来ていたので, 懇親会でこの辺どうすればいいのか聞いてみました. 実際Elasticsearchユーザの中でもちょくちょく問題になるらしく, 大きくわけて二つの方法(またはこの組み合わせ)で回避しているようです.
書き込み先のノードを増やす
1ノードへの書き込みで詰まるなら,もっとノードを増やせば良いというアプローチ. 今のfluent-plugin-elasticsearchにはラウンドロビンの機能はないんですが, out_roundrobinとかと組み合わせてやれば,書き込みを複数台に散らせることは出来そうです.
前段にキューを置く
書き込みをするノードの前にキューを置いて,そこでバッファリングしておくという方法.
Fluentdの場合はバッファがキューになっているので,そこのフラッシュ間隔を長めに調整するとか,
キュー系のプラグインがいくつかあるので,それを間に挟むという感じになるのかなと.
ただ,キューから値をポップする間隔が短いと結局詰まるので,この辺は少し工夫が必要そうです.
まとめ
Elasticsearchを真面目に運用したことがないので,どっちが現実的なのかよく分からないのが正直な所. この辺は高トラフィック環境で使っている人の話を聞きたい所です.