AzureのストリーミングデータサービスであるEvent Hubsを用いると、リアルタイムなデータ分析を行うためのデータパイプラインの構築が可能となります。
本記事ではEvent Hubsの入門編と題し、Event Hubsの基本的な知識についてご紹介します。
Azure Event Hubsとは
Azure Event Hubs の概要は下記の通りです。
- Azure の ストリーミングデータサービス(PaaS製品)
- 1秒あたり数百万件のイベントを処理することが可能
- ストリーミングデータを扱うことができるオープンソースのKafkaと互換性があるため、Kafkaとのデータ連携が可能
ストリーミングデータとは
これまでのデータ分析においては、バッチ処理がよく用いられてきました。
しかし、近年はIoTの普及やSNSの発達などもあり、データ分析の方式のひとつであるリアルタイムデータ分析が求められるケースが増えています。
そのリアルタイムデータ分析で利用されるのが、ストリーミングデータです。
ストリーミングデータ
ストリーミングデータとは下記のような特徴をもつデータのことを指します。
- 低レイテンシー処理で継続的に大量に送信されるデータ
- 主にメッセージやログデータなどの数バイトから数MB程度の小さいデータ
- ストリーミングデータを用いて、リアルタイムなデータ分析が可能
ストリーミング処理とバッチ処理
データの生成元であるデータソースから、データを貯めるデータストアにデータを格納する際のデータ連携方式には、主に下記2種類の処理方式が存在します。
- ストリーミング処理
- リアルタイムに生成されるデータを継続的に処理を行う
- 例:センサーデータ、ログデータ、メッセージetc. の収集
- バッチ処理
- ある一定の期間のまとまったデータを一度に処理
- 例:販売データ、売上データetc. の日次、月次処理
Event Hubs の基本用語
イベントハブ名前空間/イベントハブ
Event Hubsの主要コンポーネントは下記の2つです。
- イベントハブ名前空間
- イベントハブの管理、アクセス制御、ネットワークの統合管理 etc.を担当
- イベントハブ
- イベントハブ名前空間内で実際にメッセージの送受信先としての役割を担当
イベントハブのデータの流れ
Event Hubsにデータを送信したり、データを受信する対象をそれぞれプロデューサーとコンシューマーといいます。
- プロデューサー(Producer)
- データの送信元(イベントハブにデータを送信する)
- コンシューマー(Consumer)
- データの受信先(イベントハブに溜まっているデータを受信する)
Event Hubsとプロデューサー/コンシューマーの間のデータの流れは下記の通りです。
- プロデューサーがイベントハブにデータを送信
- イベントハブは受信したデータを一定期間保持
- イベントハブに格納されているデータを受信する
また、上記のデータの流れとEvent Hubs とプロデューサー/コンシューマーの関係性を図で表すとこのようになります。
イベントハブ名前空間の種類
イベントハブ名前空間 には4種類の価格レベルが存在します。
- Basic
- 最低限の機能しかない検証用レベル
- Standard
- Kafkaとの互換性、キャプチャ機能、最大保持期間が7日など利用できる機能が拡張された業務向けの基本性能を備える
- Premium
- より高い性能が求められるストリーミング処理向けに潤沢なリソースを利用することが可能
- Dedicated
- Premiumの機能に加えて、シングルテナントになるため他のテナントとのリソースの共有が発生しないため干渉を受けなくなる
イベントハブ名前空間の価格レベル別の比較表は下記の通りです。
Basic |
Standard |
Premium |
Dedicated |
|
容量 |
スループットユニットあたり $0.015/時間 |
スループットユニットあたり $0.03/時間 |
処理ユニット (PU) あたり $1.336/時間 |
容量ユニット (CU) あたり $6.849/時間 |
受信イベント |
$0.028/100 万イベント |
$0.028/100 万イベント |
無償 |
無償 |
キャプチャ |
利用不可 |
スループットユニットあたり $73/月 |
無償 |
無償 |
Apache Kafka |
利用不可 |
利用可能 |
利用可能 |
利用可能 |
最大保有期間 |
1 日 |
7 日 |
90 日 |
90 日 |
参照:https://azure.microsoft.com/ja-jp/pricing/details/event-hubs/#pricing
スループットユニット(TU) / 処理ユニット(PU)/キャパシティユニット(CU)
イベントハブには処理可能なイベント数およびデータ量を決定する指標(スループット容量)が存在します。
- 価格レベルごとに、スループットユニット(Basic,Standard)、処理ユニット(Premium)、容量ユニット(Dedicated) が存在
- 自動インフレ機能をオンにすると、動的にユニット数の調節が可能
- スループットユニット / 処理ユニット/ 容量ユニット の最大数
価格レベル |
最大ユニット数 |
|
TU |
Basic Standard |
40 |
PU |
Premium |
16 |
CU |
Dedicated |
20 |
1スループットユニットあたりの制限は下記の通りです。
- イングレス: 1 秒あたり最大で 1 MB または 1,000 イベント
- エグレス: 1 秒あたり最大で 2 MB または 4,096 イベント
パーティション
イベントハブにはパーティションという、ストリーミングデータを並列処理することが可能になる仕組みが存在します。
- パーティション数(1イベントハブあたり)
価格レベル
最大パーティション数
Basic
Standard
32
Premium
100
※ただしPUあたり200の上限あり
Dedicated
1024
※ただしPUあたり2000の上限あり
- パーティションあたり最大スループットは 1MB/s が推奨値
コンシューマグループ
コンシューマー(イベント受信先)はコンシューマーグループを介して、メッセージを受信することが可能になります。
- コンシューマーグループの最大数
価格レベル
最大数
Basic
1
Standard
20
Premium
100
Dedicated
1000
- コンシューマーグループ内の1つのパーティションごとに1つのコンシューマーが推奨
キャプチャ
キャプチャとはイベントハブが受信したメッセージを、Azure Blob Storage や Azure Data Lake Storageに自動的に保存することが可能な仕組みです。
キャプチャでは次の2種類のファイル形式でデータを保存することが可能です。
- Avro形式
- バイナリタイプのファイル形式
- Kafkaのメッセージ形式で利用される
- Parquet形式
- 列指向ファイル形式
- CSV、JSON形式よりも効率的なファイル形式とされている
- ビッグデータやクラウドストレージでよく利用される形式
Avro形式 の場合、キャプチャされたデータは下記の3通りのディレクトリ構造で格納されます。
- {Namespace}/{EventHub}/{PartitionId}/{Year}/{Month}/{Day}/{Hour}/{Minute}/{Second}
- {Year}/{Month}/{Day}/{Namespace}/{EventHub}/{PartitionId}/{Hour}/{Minute}/{Second}
- {Year}/{Month}/{Day}/{Hour}/{Namespace}/{EventHub}/{PartitionId}/{Minute}/{Second}
ユースケース
Event Hubsを他のAzureサービスと連携させることで、下記のようなデータパイプラインを構築することが可能になります。
- 工場、モバイル端末、アプリケーション(データソース) で生成されるログデータ、IoTデータ などの ストリーミングデータの集約
- SQLでのデータの加工が可能なStream Analytics や、Python などのコードを使ったデータの加工が可能なFunctionsと組み合わせた、収集したデータの加工
- Stream Analytics や Functions を経由した、Azureの各データベースサービスやAzure Data Lake Storage などのデータストアに対するデータ投入
- データストアに集約されたデータのPower BI などのBIツールでの可視化や、Cognitive Service 、Databricks によるデータ分析の実施
おわりに
今回の記事では、Event Hubs 入門編ということで、Event Hubsが扱うストリーミングデータおよびイベントハブの基本的な知識をご紹介させていただきました。
次回の記事では、Event Hubs 構築編と題しまして、イベントハブの具体的な構築の流れや、イベントハブへの接続方法についての内容を紹介させていただきます。
そちらの記事も合わせてご一読いただけますと幸いです。