fluent-plugin-bigqueryの負荷試験をしてみた

fluentd-plugin-bigqueryでBigQueryストリーミングインサートする際に実際に負荷を与えてみました

構成

FluentdをインストールしたEC2からそれぞれストリーミングインサートでBigQueryにログを送信します。Fluentdに送信するログはrubyで簡単なログを作るようにしました。

rubyで1分間に作成できるログが10万件程度だったので、それ以上の負荷はEC2の台数を増やして実施しました。

テスト結果

サーバー台数 flush_interval レコード数/分間 結果説明
1台1s60000OKほぼ遅延なしでBigQueryに想定件数のデータが作成された
1台 1s 90000NGデータの重複、APIのタイムアウトエラーによる欠損が発生
1台 5s 90000 OKほぼ遅延なしでBigQueryに想定件数のデータが作成された
2台 5s 180000OK ほぼ遅延なしでBigQueryに想定件数のデータが作成された
4台 5s 360000OK ほぼ遅延なしでBigQueryに想定件数のデータが作成された
flush_intervalの設定を最初は1秒にしていたのですが1分間に作成するレコード数90000にしたところBigQueryのAPIでタイムアウトが発生しているといったエラーが発生し、ログの欠損、重複が出てしまいました。
flush_intervalの設定を5秒にすることでタイムアウトの発生もなくなり想定通りのデータが作成されるようになりました。

まとめ

さすがに BigQuery側は負荷を上げても全く問題ない感じですね。
送信元のリクエスト数に注意してBigQueryへの送信間隔(flush_interval)、スレッド数(flush_thread_count)を調整してあげる必要があるかと思います。