Azure Event Hubsのイングレスとエグレス

少し宣伝させてください!Azureの試験対策本を執筆しました。

Azure Event Hubsのドキュメントを読んでいると「イングレス(Ingress)」や「エグレス(Egress)」といった言葉をよく目にします。これらはデータの流れを理解するうえで非常に重要な概念です。この記事では、これらの用語を具体例を交えながら分かりやすく解説しつつ、「エグレスクォータ」についても触れていきます。

こちらも参考にしてください。

https://learn.microsoft.com/ja-jp/azure/event-hubs/event-hubs-features?WT.mc_id=Portal-fx#partitions

イングレスとエグレスの関係

Event Hubsは、**データの「取り込み」と「配信」**を行うハブの役割を果たします。
たとえば:

  • IoTセンサーが温度データを送信する → イングレス
  • 分析システムがそのデータを受け取る → エグレス

これがEvent Hubsの基本的なデータフローです。

なぜ「イングレス」「エグレス」と呼ぶの?

ちょっと気になるのがこの用語の由来です。これらはラテン語がもとになっています。

  • Ingress: 「入ること」や「入り口」
  • Egress: 「出ること」や「出口」

シンプルに「入力」「出力」とも言えますが、技術者間ではこの言葉の方が「データの方向性」を明確に伝えられるとのことです。

AWSやGoogle Cloudなど、他のクラウドプラットフォームでも同じ用語が使われています。これにより、異なるサービスを扱う際にも混乱が少ないのかも?

イングレス(Ingress)って何?

まずは「イングレス」について。簡単に言うと、Event Hubsにデータが「入ってくる」プロセスを指します。

IoTデバイスやアプリが生成したデータをEvent Hubに送信する流れが「イングレス」です。たとえば、スマートホームの温度センサーが室温データをクラウドに送るとき、データはEvent Hubに「入る」わけです。

指標として重要なのは?

  • スループットユニット(Throughput Units, TU)
    1つのTUで、1秒間に最大1MBのデータを受け取ることができます。データ量が多い場合は、TUを追加することで処理能力を上げられます。
  • コストに影響
    イングレスしたデータ量が課金に直接影響します。送信データが多いほどコストも上がるので、効率的なデータ送信を意識することが大切です。

エグレス(Egress)って何?

一方で、「エグレス」はEvent Hubsからデータが「出ていく」プロセスを指します。

具体的には

  • アプリやクライアントがEvent Hubsからデータを受信(コンシューム)する場合
    コンシューマー(たとえば、Stream AnalyticsやSparkジョブなど)がEvent Hubsからデータを取得する際、このプロセスがエグレスに該当します。
  • Event Hubs Capture機能を使ってデータをAzure Blob StorageやData Lake Storageに保存する場合
    Event Hubs Captureは内部ストレージからデータを直接コピーする仕組みのため、エグレスクォータには含まれません。その結果、Captureを利用することで、他のコンシューマー(アプリケーションや処理ジョブ)に必要なエグレスリソースを節約することが可能です。

公式ドキュメントにも記載されています。

Event Hubs Capture は内部 Event Hubs ストレージからデータを直接コピーするため、スループット単位のエグレス クォータを回避でき、他の処理リーダー (Stream Analytics や Spark など) のためにエグレスを節約できます。

エグレスクォータ(Egress Quota)とは?

エグレスクォータとは、Azure Event Hubsから出力されるデータ量に設けられた上限のことを指します。これは、共有インフラストラクチャ上でサービスを提供するAzureが、全ユーザーに公平なリソース利用機会を提供し、システム全体の安定性を維持するための重要な仕組みです。

制限の背景

Azure Event Hubsは、複数のユーザーが同じインフラストラクチャを共有する形で運用されています。このような共有環境では、あるユーザーが大量のエグレス(データ出力)を行うと、他のユーザーの利用可能なリソースが圧迫され、全体のパフォーマンスが低下するリスクがあります。これを防ぐために、エグレスクォータが設けられています。

この仕組みにより、特定のユーザーやアプリケーションが過剰にリソースを利用することを抑制し、全ユーザーが安定して高品質なサービスを利用できる環境を確保しています。また、これによりサービスの公平性が保たれ、予期しない性能低下や障害を未然に防ぐことが可能です。

制限を超えるとどうなる?

エグレスクォータを超過した場合、Event Hubsはデータ転送を一時的にスローダウンさせる可能性があります。これにより、システム全体の負荷を緩和し、他のユーザーに影響が及ばないよう調整が行われます。ただし、この結果として特定のユーザーのエグレス処理が遅延する場合があります。

対応策

  1. スループットユニット(Throughput Units, TU)の追加
    エグレスデータ量が増加する場合、スループットユニットを追加することで制限に対応可能です。スループットユニットを増やすことで、データ転送能力を向上させ、クォータの影響を回避できます。
  2. データ取得頻度の調整
    クライアント側でデータを取得する頻度を適切に調整し、必要以上のデータ転送を防ぐことで、効率的なリソース利用を実現できます。

Event Hubsを使う上でのヒント

最後に、イングレスとエグレスを最適化するためのヒントをいくつか。

  1. データの頻度と量を計画的に管理
    IoTデバイスなどのデータ送信間隔を調整することで、無駄なコストを抑えられます。
  2. エグレスを効率化
    分析システム側で必要なデータだけを取得するように設計すれば、エグレスの負担を軽減できます。
  3. Event Hubs Captureを活用
    イングレスしたデータを自動でストレージに保存できるので、後からバッチ処理する場合に便利です。