Cloud Native Wasm DayからKafkaの拡張にWasmを使うRedpandaのセッションを紹介
![](https://thinkit.co.jp/sites/default/files/styles/main_image_730x/public/main_images/22649_main.jpg?itok=4IklfGN_)
2023年11月6日に、KubeCon+CloudNativeCon North America 2023の併催イベントとして開催された、WebAssemblyに特化したミニカンファレンスCloud Native Wasm Dayから、Kafkaをリプレースするソリューションを展開するRedpanda DataのTyler Rockwood氏のセッションを紹介する。
Rockwood氏はまずRedpandaの概要を解説。ここでは高速なストリーミング処理エンジンとして紹介しているが、KafkaのAPI互換であるため、すでにKafkaで構築されているストリーミング処理アプリケーションを容易に置き換えが可能であることが最初に強調されている。ストリーミング処理のためにRaftを使ったコンセンサスシステムを採用しており、最低でも3つのプロセスが同時に処理を行い、データが失われることがないことを保証している。またシングルバイナリーであることで、依存関係による脆弱性が起こらないということも説明された。
Kafkaと同じAPIで処理を行うが、その構造は違うとして例を挙げて説明を行った。ここではECなどの売上データからのストリームを受けてトランザクション処理を行うアプリケーションが、そのデータを使って不正行為を発見するという別のアプリケーションにデータを受け渡す場合を解説している。
この例では、個人情報などが付随したデータを使って不正かどうかを判定するアプリが実行されるが、このデータを別のアプリが使おうとした場合にKafkaでは複雑な構成になることを示しているのが次のスライドだ。
その場合は、一旦、Apache Flinkを経由して個人情報を削除する処理をKafka内で実行した後に別のアプリ、この例では在庫補充のためのアプリにデータを引き渡すことになると解説した。
この例におけるKafkaの部分をRedpandaで置き換えた例が次のスライドだ。
この部分を拡大して解説したのが次のスライドだ。ここではストリーミングとして流れてくるデータをLogと称しているが、それが直接WebAssemblyを経由して別のLogとして処理が行われる様子が解説されている。
より詳細にはWebAssemblyの部分がブローカーとして動作し、ひとつのファンクションが3つに複製されそれぞれのCPUのコアを利用する形でプロセッサパワーと必要十分なメモリーを確保することで高速処理が実現されていると解説している。
それぞれがRaftの合意システムによってデータの保護を行っていることが大まかに解説されている。
そして「どうしてRedpandaがWebAssemblyを利用することにしたのか?」については、どのプログラミング言語でも実装できること、実行時間の制限を厳しく実装できること、そしてPOSIX互換のサンドボックス機能が存在することを挙げた。
実際にターミナルからRedpandaのCLIを使って変換を行うアプリケーションを作成する部分を解説。ここで登場する「rpk」というのがRedpandaによって開発されたモジュールで、プロジェクトの初期化からビルド、実装までが単一のアプリケーションで実行可能であることがわかる。
Redpandaが高速であるという部分については非同期処理とスレッドをCPUのコアに固定する機能が主な要因であると説明し、メモリーを共有しない構造、メッセージ処理の部分にメッシュ化したネットワークを利用していること、それを可能にしているのはC++20で書かれたSeastarフレームワークのお陰であると説明。SeastarはApache Cassandra互換のNoSQLデータベースで、Scyllaでも利用されている高速なライブラリーだ。
●参考:Seastar
ここから実際のプログラム内部のスタックがどのようにスイッチされるのかを解説している。
WebAssemblyの中でのメモリーの使い方などをより詳しく解説し、高速処理のためにはなるべくメモリー間のデータ移動を避ける、動的にメモリーを割り付けない、そしてプロセス間のコンテキストスイッチを減らすことなどが重要と説明した。
最後にサマリーとしてRedpandaがKafkaの処理をWebAssemblyによって高速化できること、シンプルなプログラミングモデルで実装できること、そしてスレッドをコアに専有させる処理がWebAssemblyに向いていることなどを説明してセッションを終えた。
これまで組み込み系やエッジでの処理にWebAssemblyを使うという例は多かったが、ストリーミング処理を高速化するためにKafkaの弱点を解消する形でWebAssemblyが利用可能であるという主張は、参加者にとっては新鮮だったのではないだろうか。この内容をより詳細に行ったのが2023年8月にThe Linux Foundationが公開したWebinarの内容である。その概要については以下の記事を参照して欲しい。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Wasmでストリーミングエンジンを実装したRedpandaを紹介
- KubeCon Europe 2024からWASMとeBPFを使ってストリーム処理を解説するセッションを紹介
- KubeCon+CloudNativeCon North America 2023のキーノートとショーケースを紹介
- RustとWASMで開発されKubernetesで実装されたデータストリームシステムFluvioを紹介
- Kafka on Kubernetesを実現するStrimziに特化したカンファレンスStrimziCon 2024からキーノートを紹介
- KubeCon+CloudNativeCon NA 2023の併催イベントCloud Native Wasm Dayのキーノートを紹介
- 「KubeCon NA 2022」のプレカンファレンスからCloudNative Wasm DAYを紹介
- Cloud Native Wasm DayからWebAssemblyのスケジューラーWADMを解説するセッションを紹介
- Cloud Native Wasm Dayから大規模言語モデルをWasmで実行するデモを解説するセッションを紹介
- ヨーロッパ最大のテックカンファレンスKubeCon Europe 2023の共催イベントのWASM Dayを紹介