【かふかすとりーむず】

Kafka Streams とは?

💡 Kafkaという川の水を、別のサーバなしで川岸で加工できる
📌 このページのポイント
Kafka Streams:JVMアプリ内でストリーム処理 Input Topic 注文イベント JVMアプリ Kafka Streams ライブラリ filter(条件で絞り込み) map(フィールド変換) aggregate(集計) ローカルストア: RocksDB Output Topic 売上集計結果 Apache Kafka ブローカー(クラスタ)
Kafka StreamsはJVMアプリ内に組み込まれ、別クラスタなしでストリーム処理を実現する
ひよこ ひよこ

Kafka Streamsって、Kafkaと何が違うの?

ペンギン先生 ペンギン先生

Apache Kafkaはメッセージを「貯めて流す」基盤だよ。Kafka Streamsはそこに流れるデータをリアルタイムで加工・集計するためのライブラリだね

ひよこ ひよこ

加工って、たとえばどんなことができるの?

ペンギン先生 ペンギン先生

注文イベントが流れてきたら金額を合計して、1分ごとの売上合計をリアルタイムで別Topicに書き出す、みたいなことができるよ。フィルタリング・マッピング・結合・ウィンドウ集計も全部できるんだ

ひよこ ひよこ

似たものにSparkとかFlinkがあるって聞いたけど、Kafka Streamsとはどう違うの?

ペンギン先生 ペンギン先生

SparkやFlinkは独立したクラスタが必要で、運用コストが高いんだよ。Kafka Streamsは普通のJava/Kotlinライブラリだから、既存のSpringBootアプリにそのままimportして使えるんだ。Kafkaが既にある環境ならインフラ追加ゼロで始められるのが最大の利点だよ

ひよこ ひよこ

「ステートフルな集計」って難しそうだけど、どうやってるの?

ペンギン先生 ペンギン先生

集計の中間状態(例えば「今日の合計売上」)をローカルのRocksDB(組み込みKVストア)に保持してるんだよ。そのRocksDBの内容は定期的にKafkaのTopicにバックアップされるから、アプリが再起動しても状態が失われないんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Kafka Streams」って出てきたら「KafkaだけでできるJavaストリーム処理ライブラリ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Kafka Streams」 = Kafkaのストリーム処理ライブラリ
💬 Apache Kafkaのサブプロジェクトとして開発されたライブラリだよ。streams(流れ)という名の通り、データを流れとして連続処理するんだ
← 用語集にもどる