Java 版 Fluentd サーバ、Influent の新バージョンをリリースしました。
更新内容
主な変更内容一覧です。
- EventTime サポート
- Fluentd 0.14 で追加された、時刻をナノ秒精度で表現する EventTime に対応
- マルチスレッドサポート
- ワーカーをマルチスレッド化し、サーバの処理性能を向上
- 約100バイトのログを秒間約1600万レコード処理可能
次のバージョンに向けて
やりたいこと一覧です。
他システムとのインテグレーション実装
Influent を使って、Fluentd と様々なシステムをつなぐ橋を架けたいと思っています。
先日 GitHub 上で fluent/kafka-connect-fluentd という、Kafka Connect の Fluentd コネクタを実装するプロジェクトが公開されました。
Kafka Connect は Kafka と他システム間のデータコピーを実装するためのコンポーネントで、「Fluentd -> Kafka」方向のコピーを実現するために Influent が(今のところ)使われています。
個人的にも Spark Streaming とのインテグレーションを試している最中で、また Akpakka のようなライブラリとの連携も実現したいと思っています。
幸い私は Kafka を C++ で実装してみたり、分散 Erlang を Akka で実装してみたり する程度には Kafka や Akka、Scala に詳しいので、この辺のインテグレーションにも貢献していきたいところです。
基本プロトコルの実装
Kafka Connect 関連で「TLS サポートが欲しい」という issue が作成されたりなど、基本機能の実装をサボっていたツケが回りつつあるので頑張りたいです。
洗練された API の提供
イベントデータ構造を見直し、より使いやすい API を提供するために試行錯誤しています。
https://github.com/okumin/influent/issues/14
送信クライアントの実装
Influent は Forward プロトコルのサーバ実装ですが、クライアント実装も一緒に提供するとよいのでは?と考えています。
Java の送信クライアント実装としては、Fluent Logger for Java や Fluency がすでに存在します。
そのため、当初クライアント実装は Influent のスコープ外でした。
とはいえいざ利用シチュエーションを考えてみると、Kafka Connect や Alpakka のような「Fluentd <-> 他システム」双方向の通信を実装しなきゃいけないケースが多い予感がしています。
Influent(多分そのときは fluent4j みたいな名前になっていると思いますが)が送受信両方に対応すると次のようなメリットを享受できます。
- 送受信で同じ API を利用できる
- イベントを表現するクラスなど
- Non-Blocking なクライアントを提供可能
- Alpakka なんかはおそらくブロックしない実装の方が作成が楽
- イベントループを共有できるため、イベントの転送などを高速に実現可能
ただ前述の通り、Fluentd エコシステムにはすでに Java クライアントが存在するので、それらとの住み分けどうしよう……という問題を抱えています。