Introduction

このセクションでは、Apache Kafka® の Streams API について簡単に紹介します。

Kafka Streams API の概要

Apache Kafka® の Streams API は Java ライブラリを通じて提供され、拡張性と弾力性に優れた フォールトトレラントな分散アプリケーションやマイクロサービス を構築できます。何よりもまず、Kafka Streams API を使用すると、コアビジネスを強力に支援するリアルタイムアプリケーションを作成 できます。Streams API は、Kafka データを処理するための高機能なテクノロジでありながら、非常に簡単に使用することができます。アプリケーション状態の効率的な管理、高速で能率的な集約と結合、イベント時刻と処理時刻の適切な区別、順序外のデータ のシームレスな処理など、ストリーム処理に関する重要な Streams の概念 に基づいて設計されています。

Kafka Streams API に固有の特徴として、これを使用して構築したアプリケーションは 通常の Java アプリケーション になります。これらのアプリケーションは、他の Java アプリケーションと同じようにパッケージ化、デプロイ、監視が可能です。別個の処理クラスターや、類似した特定用途の高額なインフラストラクチャを導入する必要はありません

../_images/streams-introduction-your-app.ja.png

Kafka Streams API を使用するアプリケーションは通常の Java アプリケーションです。他の Java アプリケーションと同じようにパッケージ化、デプロイ、監視することができます。それに加えて、構築したアプリケーションでは、高い拡張性と弾力性、フォールトトレラントが実現されます。

使用事例

Kafka Streams API は、さまざまな業界のさまざまな使用事例に適用できます。

  • 旅行会社では、Kafka Streams API を使用してリアルタイムの意思決定を行うアプリケーションを構築することで、個々の顧客に合わせた最適な料金を提示したり、追加サービスをセットにして販売したり、予約を処理したりできます。
  • 金融業界では、データソースを集約するアプリケーションを構築して、潜在的エクスポージャーのリアルタイムビューを生成したり、不正取引を検出して最小限に抑えたりできます。
  • 物流会社では、荷物を迅速かつ確実にリアルタイムで追跡するアプリケーションを構築できます。
  • 小売業者では、次善の提案、個人に合わせたプロモーション、価格設定、在庫管理をリアルタイムで決定するアプリケーションを構築できます。
  • 自動車会社や製造会社では、生産ラインを最適に稼働させるためのアプリケーションを構築して、サプライチェーンに関するリアルタイムのインサイトを取得したり、コネクテッドカーから送られるテレメトリデータを監視して点検が必要かどうかを判断したりできます。
  • 他にも多くの使用事例があります。

詳しい紹介

Streams の概念Streams のアーキテクチャKafka Streams Quick Start へと進む前に、もう少し詳しく概要を見ていきましょう。

Kafka Streams API の主な目的は、ビッグデータに欠かせないストリーム処理をメインストリームアプリケーション開発の世界に取り入れ、シンプルで簡単なストリーム処理を実現 して、開発者や運用のエクスペリエンスを根本的に改善することにあります。Kafka Streams API を使用すると、標準の Java アプリケーションを実装して、大小規模のストリーム処理のニーズを解決できます。これらのアプリケーションは、Kafka クラスターの境界にあるクライアントコンピューターで実行できます。アプリケーションは弾力性に優れ、アプリケーションの複数のインスタンスを実行すると、互いのインスタンスを自動的に検出してデータを協調的に処理します。また、アプリケーションはフォールトトレラントでもあり、いずれかのインスタンスが停止すると、残りのインスタンスが自動的に処理を引き継ぎます。このとき、データが失われることはありません。Java アプリケーションを展開するテクノロジは、デプロイ全体で自由に選択できます。このようなテクノロジには Puppet、Chef、Ansible、Docker、Mesos、YARN、Kubernetes があり、これら以外も使用できます。この Kafka Streams API の軽量で統合的なアプローチは、「インフラストラクチャではなくアプリケーションを構築する」という目的を体現したもので、他のストリーム処理ツールとはきわめて対照的です。他のツールでは、別個の処理クラスターや、類似した大がかりなインフラストラクチャをインストールして運用する必要があり、その使用方法と対話方法に関しても独自の特殊なルールセットが定義されています。

Kafka Streams API は、マイクロサービス、イベント駆動型システム、リアクティブアプリケーション、継続的なクエリや変換といった使用事例に対する有力な選択肢です。次の一覧に、その根拠となる 主な機能と特長 を紹介します。

高機能
  • アプリケーションに高い拡張性、弾力性、分散性をもたらし、フォールトトレラントを実現
  • "厳密に 1 回" の処理セマンティクスをサポート
  • ステートフル処理とステートレス処理
  • ウィンドウ、結合、集約を使用したイベント時処理
  • ストリームとデータベースの世界を 1 つにする Kafka Streams の対話型クエリ をサポート
  • 宣言型で関数型の API と、下位レベルの 命令型の API を選択でき、高い制御性と柔軟性を実現
軽量
  • 導入へのハードルが低い
  • 小規模、中規模、大規模、特大規模のいずれの事例にも対応
  • ローカル開発環境から大規模な本稼働環境にスムーズに移行
  • 処理クラスターが不要
  • Kafka 以外の外部依存関係がない
完全な統合
  • Kafka 0.11.0 および 1.0.0 に完全に対応
  • 既存のアプリケーションやマイクロサービスに簡単に統合
  • アプリケーションのパッケージ化、デプロイ、監視に関する人為的なルールがない
  • オンプレミス、パブリッククラウド、プライベートクラウド、コンテナーなど、あらゆる環境で動作
  • Kafka Connect によって実行される継続的な変更データキャプチャー(CDC)を通じてデータベースと統合
リアルタイム
  • 処理の遅延時間はミリ秒単位
  • レコード単位の処理(マイクロバッチ処理なし)
  • 順序外のデータをシームレスに処理
  • 高いスループット
セキュリティ

このように、Kafka Streams API は、ミッションクリティカルなストリーム処理アプリケーションやマイクロサービスを構築するための有力な選択肢です。実際に試して、まずは Hello World アプリケーション を実行してみてください。次に続く「Kafka Streams Quick Start」、「Streams の概念」、「Streams のアーキテクチャ」、「Streams 開発者ガイド」の各セクションで、さらに詳しく説明していきます。

ちなみに

学習のヒント: Kafka Streams API を作成するに至った当初の目的に興味がある場合は、Confluent ブログの記事「Introducing Kafka Streams: Stream Processing Made Simple」をお読みください。

要件

Kafka

次のバージョンがサポートされます。

 
Kafka ブローカー(列)
Streams API(行)
3.0.x / 0.10.0.x
3.1.x / 0.10.1.x および
3.2.x / 0.10.2.x
3.3.x / 0.11.0.x および
4.0.x / 1.0.x および
4.1.x / 1.1.x および
5.0.x / 2.0.x および
5.1.x / 2.1.x および
5.2.x / 2.2.x および
5.3.x / 2.3.x および
5.4.x / 2.4.x および
5.5.x / 2.5.x および
6.0.x / 2.6.x
3.0.x / 0.10.0.x
互換性あり
互換性あり
互換性あり
3.1.x / 0.10.1.x および
3.2.x / 0.10.2.x
 
互換性あり
互換性あり
3.3.x / 0.11.0.x
 
"厳密に 1 回" がオフの場合に
互換性あり(ブローカーバージョン
Confluent Platform 3.3.x 以降が必要)
互換性あり
4.0.x / 1.0.x および
4.1.x / 1.1.x および
5.0.x / 2.0.x および
5.1.x / 2.1.x および
5.2.0 / 2.2.0 および
5.2.1 / 2.2.0
 
"厳密に 1 回" がオフの場合に
互換性あり(ブローカーバージョン
Confluent Platform 3.3.x 以降が必要)。
メッセージフォーマット 0.10 以降が必要。
メッセージヘッダーはサポート外
(ブローカーバージョン Confluent
Platform 3.3.x 以降およびメッセージ
フォーマット 0.11 以降が必要)
互換性あり。
メッセージフォーマットは
0.10 以降であることが必要。
メッセージヘッダーが
使用される場合、メッセージフォーマット
0.11 以降が必要
5.2.2 / 2.2.1 および
5.3.x / 2.3.x および
5.4.x / 2.4.x および
5.5.x / 2.5.x および
6.0.x / 2.6.x
   
互換性あり。
メッセージフォーマットは
0.11 以降が必要。
"厳密に 1 回" の v2 には
Confluent Platform
5.4.x 以降が必要

Streams API は、以前のバージョンの Kafka (0.7、0.8、0.9)を実行している Kafka クラスターとは互換性がありません。

Confluent

注釈

このウェブサイトには、Apache License v2 の条件に基づいて Apache Software Foundation で開発されたコンテンツが含まれています。