『C++11/14 コア言語』を読んで C++ に惹かれ、使ってみたくなったので、Apache Kafka を実装してみました。
作ったもの
C++ を書くならせっかくだしミドルウェアを作ってみよう、というわけで比較的構造がシンプルな Apache Kafka を移植しました。
とはいっても習作であり、プロダクトとして利用できるレベルではないです。 Produce API, Fetch API あたりしか実装していません。 分散周りが未実装で、無数のバグがあり、かつパフォーマンスも出ないであろうという状態です。
C++ 感想
C++ は想像していたより先進的な機能が多く、自分のようなモダンプログラマでも楽しめる言語でした。 テンプレートやラムダ式を駆使すれば表現力に定評のある Scala に負けないくらい、パワフルな記述が可能です。
例えばテンプレート特殊化を使えば型クラスっぽい多相を実現できます。ネットワーク IO ライブラリ Boost.Asio はラムダを使ってハイレベルで使いやすい抽象化に成功していると感じました。
今後
Kafka のソースコードを読んで、データ構造、ディスク IO 周りをアーキテクチャレベルで見直せばよくなる余地があると直感しています。
なので暇があればその辺を作り直して、API も揃えて、本物の Kafka とベンチマーク結果を比較したいという気持ちが若干あります。 そこまで行くと Kafka とはかなり違ったものになるので、一から新しいものを作ることになるかもしれませんが……