🐡

🐡🐡🐡Benthos触ってみた🐡🐡🐡

2022/12/15に公開

気にはなってるけど触ってないビッグデータ系のツール・サービスを触る Advent Calendar 2022の#14です。

Benthosとは

公式サイト曰く、

Benthos is a declarative data streaming service that solves a wide range of data engineering problems with simple, chained, stateless processing steps.

です。 Ashley Jeffs さんが主に開発を行っているGoで書かれたデータ処理エンジンです。YAML(+DSL)で処理を定義します。


(Benthos公式サイトから)

VectorApache Nifi、Logstashやfluentdに近いプロダクトだと思います。Vectorについては特に比較の説明があり、

  • Vectorはデータの転送を重視
  • それに比べてBenthosはデータの処理に重きを置いている

とのことです(どちらに重きを置くかの話で、Vectorでデータ処理もBenthosでデータ転送も可能)。

Webサイトでは事例は(多分)公開されていませんが、いくつかスポンサー企業がついており、その中では使われているのかなーと思っています。

機能

入出力

logstashやfluentd同様に、入力出力ともに、

  • ファイル(オブジェクトストレージやローカルファイル)
  • データベース
  • キュー
  • ネットワーク(HTTP等)

等をサポートしています。紹介に「Streaming」とありますが、ファイルとかBatch的な入力も処理できるのですね。

サポートされていない入出力の場合は、Go言語でプラグインを書けます。

Processing

多分Benthosのメイン機能で、受け取ったデータを出力するまでの間に、何らかの処理を行うことができます。例えば、

  • テキスト処理(jqやawk、後述のbloblangの呼び出し)
  • 入力データを使って、外部リソースを呼び出しデータの拡充(いわゆるenrichment)
  • ファイルの形式に応じたパース・解凍
  • 分岐やループといった制御

などを行ことができます。

Bloblang

公式サイト曰

Bloblang, or blobl for short, is a language designed for mapping data of a wide variety of forms. It's a safe, fast, and powerful way to perform document mapping within Benthos.

です。Benthosの中での処理を記載するDSLで、awkやjqが近いかもしれません。

Bloblangを使うことで、入力(典型的にはJSON?)に対し

といった処理を行うことができます。

その他の機能

といった、大規模に使う上で便利そうな機能もあります。

触ってみる

Getting Started

Getting Startedでは、

  • インストール
  • ひな形の設定ファイルの作成
  • 標準入力から受け取ったデータを、Bloblangで処理(大文字小文字やハッシュ化)し、標準出力に出力

する例が紹介されています。

Bloblang Walkthrough

Bloblang WalkthroughはBloblangに特化したチュートリアルです。

Bloblangを試すWebUI(benthos blob server)を開き、Bloblangの機能を試していきます。WebUI(benthos blob server)では、左上に入力、下にBloblangを入力すると、右上に出力が表示されます。

このチュートリアルでは、具体的には

  • JSONの要素を増やす
  • 大文字にする
  • 置換
  • 削除
  • 変数
  • 条件分岐
  • エラーハンドル
    • catchでエラー時の戻り値を記載
  • バリデーション
    • チェックしてダメだったら例外を発生させる
  • filter
  • map
  • unit test

といったBloblangの機能を試していきます。

なお、ドキュメントではDockerコンテナでWebUI(benthos blob server)を起動していますが、Getting Startedでインストールしたbenthosコマンド経由( benthos blobl server --host 0.0.0.0)でも動作可能です。

感想

面白そうだと思った点

  • 外部依存が少なく(JVMやRubyが不要)静的なバイナリだけで動くので、動かしやすい・試しやすい
  • Processingの機能が豊富

気になった点

  • 同じカテゴリーの製品(fluentdやLogstash)との使いわけ・比較
  • ドキュメントでは「exactly-once」を謳っている箇所がありますが、その方法や制約
  • 分散処理
    • データが多い時はどうするか。単一マシンで処理できるデータがスコープなのか、Nifiの用にクラスタを組んだりできるのか

ロゴ

ブロブフィッシュ(ニュウドウカジカ)です。

あまりにも可愛いので、ステッカーが販売されています

Discussion