この記事では、フル マネージド Azure データ サービスを使用するストリーミング ソリューションの例を示します。
アーキテクチャ
このアーキテクチャの [Visio ファイル][Visio バージョンのアーキテクチャ図] をダウンロードします。
ワークフロー
Apache Kafka 機能のイベント ハブは、Kafka プロデューサーからイベントをストリーミングします。
Apache Spark はイベントを消費します。 Azure Kubernetes Service (AKS) は、Apache Spark ジョブのマネージド環境を提供します。
Azure Cosmos DB for Apache Cassandra を使うアプリケーションで、Cassandra にイベントを書き込みます。 このデータベースは、イベントのストレージ プラットフォームとして機能します。 AKS は、Cassandra に書き込むマイクロサービスをホストします。
Azure Cosmos DB の変更フィード機能では、イベントがリアルタイムで処理されます。
スケジュールされたアプリケーションは、Cassandra に格納されているイベントに対してバッチ指向の処理を実行します。
参照データ エンリッチ イベント情報を保存します。 バッチ指向アプリケーションは、エンリッチされたイベント情報を PostgreSQL に書き込みます。 一般的な参照データ ストアは次のとおりです。
- [Azure Data Lake Storage][Azure Data Lake Storage Gen2 の概要]。[Parquet][Parquet] などのオープン形式でデータを格納できます。
- [PostgreSQL][Azure Database for PostgreSQL とは] のようなオープンソースのリレーショナル データ ストア と [MySQL][Azure Database for MySQL とは?] を参照してください。
バッチ指向アプリケーションでは、Cassandra データが処理されます。 そのアプリケーションは、処理したデータを Azure Database for PostgreSQL に保存します。 このリレーショナル データ ストアは、エンリッチされた情報が必要なダウンストリーム アプリケーションにデータを提供します。
レポート アプリケーションとツールは、PostgreSQL データベース データを分析します。 たとえば、[Power BI][Power BI とは何ですか? は、Azure Database for PostgreSQL コネクタを使用してデータベースに接続します。 このレポート サービスは、データを豊富な形式で表示します。
Azure Cache for Redis は、メモリ内キャッシュを提供します。 このソリューションでは、重要なイベントに関するデータがキャッシュに含まれます。 アプリケーションはデータをキャッシュに格納し、キャッシュからデータを取得します。
Web サイトや他のアプリケーションでは、キャッシュされたデータを使用して応答時間を向上させます。 キャッシュでデータを使用できない場合もあります。 このような場合、これらのアプリケーションでは、[キャッシュアサイド パターン][キャッシュアサイド パターン] または同様の戦略を使用して、Azure Cosmos DB の Cassandra からデータを取得します。
コンポーネント
Event Hubs は、毎秒数百万件のイベントを処理できるフルマネージドなストリーミング プラットフォームです。 Event Hubs には、広く使用されているオープンソースのストリーム処理プラットフォームである Apache Kafka 用の [エンドポイント][Apache Kafka アプリケーションから Azure Event Hubs を使用する] が用意されています。 エンドポイント機能を利用すれば、組織はストリーム処理用の Kafka クラスターを構築、維持する必要がありません。 その代わりに、Event Hubs が提供するフルマネージドの Kafka 実装を利用できます。
[Azure Cosmos DB][Azure Cosmos DB へようこそ] は、マルチマスター レプリケーションを提供するフル マネージドの NoSQL およびリレーショナル データベースです。 Azure Cosmos DB では、多くのデータベース、言語、プラットフォームのオープンソース API がサポートされています。 たとえば、次のようになります。
- Apache Cassandra。
- [Gremlin][Gremlin Graph トラバーサル マシンと言語]。
- [MongoDB][MongoDB]。
[Azure Cosmos DB for Apache Cassandra][Azure Cosmos DB for Apache Cassandra の概要]を使用すると、Apache Cassandra のツール、言語、ドライバーを使用して Azure Cosmos DB データにアクセスできます。 Apache Cassandra は、書き込み負荷の高いワークロードに適したオープンソースの NoSQL データベースです。
Azure Kubernetes service (AKS) は、可用性が高く、セキュリティ保護され、フル マネージド Kubernetes サービスです。 [Kubernetes][Kubernetes] は、コンテナー化されたワークロードを管理するための急速に進化するオープンソース プラットフォームです。 AKS は、Apache Spark などのオープンソースのビッグデータ処理エンジンをホストします。 AKS を使用すると、マネージド環境で大規模なストリーム処理ジョブを実行できます。
Azure Database for PostgreSQL は、フルマネージドのリレーショナル データベース サービスです。 [高可用性、エラスティック スケーリング、修正プログラムの適用、その他の管理機能][Azure Database for PostgreSQL とは何ですか?] PostgreSQL 用。 [PostgreSQL][PostgreSQL] は、広く採用されているオープンソースのリレーショナル データベース管理システムです。
Azure Cache for Redis は、Redis ソフトウェアをベースにしたメモリ内データストアを提供します。 [Redis][Redis] は、一般的なオープン ソースのメモリ内データ ストアです。 セッション ストア、コンテンツ キャッシュ、その他のストレージ コンポーネントは、パフォーマンスとスケーラビリティを向上させるために Redis を使用します。 Azure Cache for Redis は、オープンソースの Redis の機能をフルマネージドで提供します。
代替
このソリューションに含まれるオープンソース対応の製品やサービスを、他のものと置き換えることができます。 Azure で利用できるオープン ソース サービスの詳細については、「[Azure のオープン ソース][Azure 上のオープン ソース]」を参照してください。
シナリオの詳細
オープンソースのエンジンを搭載したフル マネージドの Azure データ サービスが、このストリーミング ソリューションを構成しています。
- Azure Event Hubs は、ストリーム インジェスト用の Kafka 実装を提供します。
- Azure Cosmos DB では、Cassandra でのイベント ストレージがサポートされます。
- ストリーム処理用の AKS ホスト [Kubernetes][Kubernetes] マイクロサービス。
- Azure Database for PostgreSQL は、[PostgreSQL][PostgreSQL] のリレーショナル データ ストレージを管理します。
- Azure Cache for Redis では、[Redis][Redis] のメモリ内データ ストアが管理されます。
オープンソース テクノロジには多くの利点があります。 たとえば、組織はオープンソース テクノロジを次の場合に使用できます。
- 既存ワークロードを移行する。
- 広範なオープンソース コミュニティを活用する。
- ベンダーのロックインを制限する。
オープンソース テクノロジへのアクセスを可能にすることで、Azure のツールとサービスは、組織がこれらの利点を活用し、選択したソリューションを開発するのに役立ちます。
このソリューションでは、フル マネージドの [サービスとしてのプラットフォーム (PaaS)][PaaS とは何ですか?] 特に当てはまります。 その結果、修正プログラムの適用、サービス レベル アグリーメント (SLA) のメンテナンス、その他の管理タスクが Microsoft によって処理されます。 もう 1 つの利点は、Azure のセキュリティ インフラストラクチャとのネイティブ統合です。
考えられるユース ケース
このソリューションは、さまざまなシナリオに適用されます。
- Azure PaaS サービスを使用して、オープンソース テクノロジを使用する最新のストリーミング ソリューションを構築する
- オープンソースのストリーム処理ソリューションを Azure に移行する
考慮事項
以降の考慮事項には、ワークロードの品質向上に使用できる一連の基本原則である Azure "Well-Architected Framework" の要素が組み込まれています。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。
ベスト プラクティスを念頭に置いて、各サービスを設計、実装します。 各サービスのガイドラインについては、Microsoft ドキュメント サイトを参照してください。 次のセクションの情報も確認してください。
パフォーマンス
[Azure Database for PostgreSQL の接続プール][Azure Database for PostgreSQL を使用するためのパフォーマンスのベスト プラクティス - 接続プール]を実装します。 アプリケーション内で接続プール ライブラリを使用できます。 または、[PgBouncer][PgBouncer] や [Pgpool][Pgpool Wiki] などの接続プーラーを使用できます。 PostgreSQL との接続の確立は、コストのかかる操作です。 接続プールを使用すると、アプリケーションのパフォーマンスの低下を回避できます。 PgBouncer は、Azure Database for PostgreSQL フレキシブル サーバーの [組み込み][Azure Database for PostgreSQL フレキシブル サーバーの PgBouncer] です。
適切な [パーティション分割戦略][Azure Cosmos DB for Apache Cassandra でのパーティション分割] を使用して、最適なパフォーマンスを得るための Azure Cosmos DB for Apache Cassandra を構成します。 テーブルをパーティション分割する際に、単一フィールドの主キー、複合主キー、またはコンポジット パーティション キーのいずれを使用するかを決定します。
スケーラビリティ
[Event Hubs レベル][Event Hubs 価格] を選択するときに、ストリーミング要件を考慮します。
- 120 MBps 未満の中間スループット要件については、[Premium レベル][Event Hubs Premium (プレビュー) の概要] を検討してください。 この階層では、ストリーミング要件を満たすために柔軟にスケーリングされます。
- ギガバイト単位のデータのイングレスを使用するハイエンド ストリーミング ワークロードの場合は、[専用レベル][Event Hubs Dedicated の概要] を検討してください。 この階層は、容量が保証されたシングルテナント オファリングです。 専用クラスターのスケール アップとスケール ダウンが可能です。
ワークロードが予測不可能でスパイク性がある場合は、Azure Cosmos DB の [自動スケール プロビジョニングスループット][自動スケール スループットを使用して Azure Cosmos コンテナーとデータベースを作成する] を検討してください。 Azure Cosmos DB では、手動でプロビジョニングされた、またはオートスケールでプロビジョニングされたスループットを使用するように設定できます。 自動スケーリングを使用すると、Azure は使用量に応じて 1 秒あたりの要求ユニット数を自動的に瞬時にスケーリングします。
セキュリティ
セキュリティは、重要なデータやシステムの意図的な攻撃や悪用に対する保証を提供します。 詳細については、「セキュリティの重要な要素の概要」を参照してください。
[Azure Private Link][Azure Private Link とは?] を使用する Azure サービスを仮想ネットワークの一部にします。 プライベート リンクを使用すると、サービスとのネットワーク間のトラフィックは、パブリック インターネットを経由することなく、Azure のバックボーン上を流れます。 このソリューションの Azure サービスは、一部の SKU でプライベート リンクをサポートしています。
組織のセキュリティ ポリシーを確認します。 Azure Cosmos DB for Apache Cassandra では、キーを使って、キー スペースやテーブルのようなリソースにアクセスできます。 Azure Cosmos DB インスタンスには、これらのキーが格納されます。 セキュリティ ポリシーでは、 Azure Key Vault などの [キー管理サービスにこれらのキーを伝達する][Azure Key Vault を使用して Azure Cosmos キーをセキュリティで保護するが必要になる場合があります。 また、組織のポリシーに従って[キーのローテーションと再生成]を必ず行ってください。
回復性
可用性ゾーンを使用して、ビジネス クリティカルなアプリケーションをデータセンターの障害から保護することを検討してください。 このソリューションのサービスは、 Availability ゾーンが有効なリージョンで、選択した SKU の可用性ゾーンをサポートします。 最新の情報は、可用性ゾーンをサポートするサービスの一覧を確認してください。
コスト最適化
コストの最適化とは、不要な費用を削減し、運用効率を向上させる方法を検討することです。 詳しくは、 コスト最適化の柱の概要に関する記事をご覧ください。
このソリューションのコストを見積もるには、Azure 料金計算ツールを使用してください。 また、次の点に留意してください。
[Event Hubs][Event Hubs の価格] は、Basic、Standard、Premium、Dedicated のレベルで利用できます。 Premium や Dedicated 階層は、大規模なストリーミング ワークロードに最適です。 スループットは拡張できますので、最初は小さく始めて、需要の増加に応じてスケールアップすることを検討してください。
Azure Cosmos DB には、2 つのモデルがあります。
- 負荷の高いワークロードに最適なプロビジョン スループット モデルです。 このモデルには、スタンダードとオートスケールの 2 つの容量管理が用意されています。
- 小規模でスパイクの多いワークロードの実行に適したサーバーレス モデルです。
AKS クラスターは、Azure で動作する一連のノード、または仮想マシン (VM) で構成されています。 クラスターの主なコストを構成するのは、コンピュート、ストレージ、ネットワークの各コンポーネントのコストです。
Azure Database for PostgreSQL は、単一サーバーおよびフレキシブル サーバーのサービス レベルで提供されています。 異なる階層は、予測可能なワークロード、バースト可能なワークロード、ハイパフォーマンスなワークロードなど、さまざまなシナリオに対応します。 コストは主に、コンピュート ノードの選択とストレージの容量に依存します。 新しいワークロードの場合は、フレキシブル サーバー層を選択することを検討してください。これは、単一サーバー層よりも幅広い [サポートされている機能][単一サーバーとフレキシブル サーバーの比較] があるためです。 また、単一サーバーは非推奨になる予定であることに注意してください。
Azure Cache for Redis は複数の階層で利用可能です。 これらの階層は、250 メガバイトから数テラバイトの容量のキャッシュに対応します。 容量に加え、他の要件も階層の選択に影響します。
- クラスタリング
- 永続化
- アクティブな地理的レプリケーション
このシナリオのデプロイ
このソリューションをデプロイする場合は、次の点に注意してください。
Kafka 用の Event Hubs をデプロイする場合は、「クイック スタート: Kafka プロトコルを使用した Event Hubs でのデータ ストリーミング][クイック スタート: Kafka プロトコルを使用した Event Hubs でのデータ ストリーミング」を参照してください。 この記事には以下の情報が含まれています。
- Event Hubs で Kafka を使ってメッセージを送受信する方法
- 発行アプリケーションのサンプル コード
- 既存の Kafka アプリケーションを、設定変更により Kafka の Event Hubs に切り替える方法
Apache Spark に関して
- 基本的な Spark アプリケーションの構築の詳細については、「Apache Spark アプリケーションを Azure Event Hubs に接続する][Apache Spark アプリケーションを Azure Event Hubs に接続する」を参照してください。
- AKS で Spark アプリケーションをホストするには、「AKS での Apache Spark ジョブの実行][AKS での Apache Spark ジョブの実行」を参照してください。
Java アプリケーションを使用して Cassandra にイベントを書き込む方法を検討してください。 詳細については、「クイック スタート: Azure Cosmos DB for Apache Cassandra データを管理するための Java アプリの構築 (v4 ドライバー)][クイック スタート: Azure Cosmos DB for Apache Cassandra データを管理するための Java アプリの構築 (v4 ドライバー)]」を参照してください。
[Azure Cosmos DB の変更フィード][Azure Cosmos DB の変更フィード] を使用する場合、次の情報については、「Azure Cosmos DB for Apache Cassandra の変更フィード][Azure Cosmos DB for Apache Cassandra の変更フィード」を参照してください。
- [Cassandra クエリ言語 (CQL)][Cassandra クエリ言語] でクエリ述語を使用して変更フィード API にクエリを実行する方法
- Java アプリケーションのサンプル コード
Cassandra に格納したイベントの処理については、「チュートリアル: Azure Cosmos DB for Apache Cassandra からのデータのクエリ][チュートリアル: Azure Cosmos DB for Apache Cassandra からのデータのクエリ」を参照してください。 このアーティクルには、CQL コマンドを使ってテーブルからデータを取得するためのサンプル Java コードも含まれています。
バッチ指向アプリケーションを使用して Azure Database for PostgreSQL にデータを書き込む方法については、「クイック スタート: Azure Database for PostgreSQL で Java と JDBC を使用する][クイック スタート: Azure Database for PostgreSQL で Java と JDBC を使用する」を参照してください。 このアーティクルには、データを保存するための Java コードのサンプルも含まれています。
Azure Cache for Redis でのデータストレージと取得の詳細については、「クイック スタート: Java での Azure Cache for Redis の使用][クイック スタート: Java での Azure Cache for Redis の使用」を参照してください。 このアーティクルには、キャッシュにアクセスするための Java コードのサンプルも含まれています。
共同作成者
この記事は、Microsoft によって更新および保守されています。 当初の寄稿者は以下のとおりです。
プリンシパル作成者:
- Ajit Ananthram |クラウド ソリューション アーキテクト
次の手順
- Azure Event Hubs のための Apache Kafka 開発者ガイド
- [Azure Cosmos DB for Apache Cassandra についてよく寄せられる質問][Azure Cosmos DB for Apache Cassandra についてよく寄せられる質問]
- Azure Database for PostgreSQL を使用してアプリケーションを構築するためのベスト プラクティス
- Azure Cache for Redis に関する FAQ
関連リソース
関連するソリューションの詳細は、次の情報を参照してください。
- 分析アーキテクチャ デザイン
- [Azure で分析データ ストアを選択する][Azure で分析データ ストアを選択する]
- [Azure でデータ分析テクノロジを選択する][Azure でデータ分析テクノロジを選択する]
- イベント ストリーム処理での Azure Kubernetes
- [AKS を使用したデータ ストリーミング][AKS を使用したデータ ストリーミング]
[キャッシュアサイド パターン]: ../../patterns/cache-aside.yml [Cassandra クエリ言語 (CQL)]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Cassandra クエリ言語]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Azure Cosmos DB の変更フィード]: /azure/cosmos-db/change-feed [Change feed in Azure Cosmos DB for Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-change-feed?tabs=java [Choose an analytical data store in Azure]: ../../data-guide/technology-choices/analytical-data-stores.md [Azure でのデータ分析テクノロジの選択]: ../../data-guide/technology-choices/analysis-visualizations-reporting.md [Apache Spark アプリケーションを Azure Event Hubs に接続する]: /azure/event-hubs/event-hubs-kafka-spark-tutorial [自動スケール スループットで Azure Cosmos コンテナーとデータベースを作成する]: /azure/cosmos-db/provision-throughput-autoscale [AKS を使用したデータ ストリーミング]: ../../solution-ideas/articles/data-streaming-scenario.yml [Event Hubs の価格]: https://azure.microsoft.com/pricing/details/event-hubs [Azure Cosmos DB for Apache Cassandra についてよく寄せられる質問]: /azure/cosmos-db/cassandra/cassandra-faq [Gremlin Graph Traversal [Machine and Language]: https://tinkerpop.apache.org/gremlin.html [Gremlin Graph Traversal Machine and Language]: https://tinkerpop.apache.org/gremlin.html [Introduction to Azure Cosmos DB for Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-introduction [Introduction to Azure Data Lake Storage Gen2]: /azure/storage/blobs/data-lake-storage-introduction [キーのローテーションと再生成]: /azure/cosmos-db/secure-access-to-data?tabs=using-primary-key#key-rotation [Kubernetes]: https://kubernetes.io [MongoDB]: https://www.mongodb.com [開く] source on Azure]: https://azure.microsoft.com/overview/open-source/ [Overview of Event Hubs Dedicated]: /azure/event-hubs/event-hubs-dedicated-overview [Overview of Event Hubs Premium (Preview)]: /azure/event-hubs/event-hubs-premium-overview [Parquet]: https://parquet.apache.org [Azure Cosmos DB for Apache Cassandra でのパーティション分割]: /azure/cosmos-db/cassandra/cassandra-partitioning [Azure Database for PostgreSQL を使用するためのパフォーマンスのベスト プラクティス – 接続プール]: https://azure.microsoft.com/blog/performance-best-practices-for-using-azure-database-for-postgresql-connection-pooling [PgBouncer]: https://www.pgbouncer.org [Pgpool Wiki]: https://www.pgpool.net/mediawiki/index.php/Main_Page [Postgre SQL]: https://www.postgresql.org [クイック スタート: Azure Cosmos DB for Apache Cassandra データを管理する Java アプリを構築する (v4 ドライバー)]: /azure/cosmos-db/cassandra/manage-data-java-v4-sdk [クイック スタート: Kafka プロトコルを使用した Event Hubs でのデータ ストリーミング]: /azure/event-hubs/event-hubs-quickstart-kafka-enabled-event-hubs [クイック スタート: Java で Azure Cache for Redis を使用する]: /azure/azure-cache-for-redis/cache-java-get-started [クイック スタート: Azure Database for PostgreSQL で Java と JDBC を使用する]: /azure/postgresql/flexible-server/connect-java?tabs=passwordless [Redis]: https://redis.io [AKS での Apache Spark ジョブの実行]: /azure/aks/spark-job [Azure Key Vault を使用した Azure Cosmos キーのセキュリティ保護]: /azure/cosmos-db/access-secrets-from-keyvault [チュートリアル: データのクエリfrom Azure Cosmos DB for Apache Cassandra]: /azure/cosmos-db/cassandra/query-data [Apache Kafka アプリケーションから Azure Event Hubs を使用する]: /azure/event-hubs/event-hubs-for-kafka-ecosystem-overview [Visio バージョンの アーキテクチャ図]: https://arch-center.azureedge.net/US-1874059-open-source-data-engine-stream-processing-architecture.vsdx [Azure Cosmos DB へようこそ]: /azure/cosmos-db/introduction [Azure Database for MySQL とは]:/azure/mysql/overview [Azure Database for PostgreSQL とは]:/azure/postgresql/overview [Azure Private Link とは]: /azure/private-link/private-link-overview [PaaS とは?]: https://azure.microsoft.com/overview/what-is-paas/ [Power BI とは]:/power-bi/fundamentals/power-bi-overview [単一サーバーとフレキシブル サーバーの比較]: /azure/postgresql/flexible-server/concepts-compare-single-server-flexible-server#comparison-table [Azure Database for PostgreSQL フレキシブル サーバーの PgBouncer]: /azure/postgresql/flexible-server/concepts-pgbouncer