Azure Event Hubs で Azure Blob Storage または Azure Data Lake Storage にイベントをキャプチャするCapture events through Azure Event Hubs in Azure Blob Storage or Azure Data Lake Storage

Azure Event Hubs を利用すると、Event Hubs のストリーミング データをご自分で選択した Azure Blob Storage または Azure Data Lake Storage アカウントに自動的に配信できます。その際、時間やサイズの間隔を柔軟に指定できます。Azure Event Hubs enables you to automatically capture the streaming data in Event Hubs in an Azure Blob storage or Azure Data Lake Storage account of your choice, with the added flexibility of specifying a time or size interval. Capture の設定は手軽で、実行に伴う管理コストは生じません。また、Event Hubs のスループット単位に応じて自動的にスケールします。Setting up Capture is fast, there are no administrative costs to run it, and it scales automatically with Event Hubs throughput units. Event Hubs Capture はストリーミング データを Azure に読み込む最も簡単な方法であり、これを利用すれば、データのキャプチャではなくデータの処理に注力できるようになります。Event Hubs Capture is the easiest way to load streaming data into Azure, and enables you to focus on data processing rather than on data capture.

Event Hubs Capture を利用すると、リアルタイムおよびバッチベースのパイプラインを同じストリームで処理できます。Event Hubs Capture enables you to process real-time and batch-based pipelines on the same stream. すなわち、変化するニーズに合わせて拡大可能なソリューションを構築できます。This means you can build solutions that grow with your needs over time. 将来のリアルタイム処理を視野に入れてバッチベースのシステムを構築している場合も、既存のリアルタイム ソリューションに効率的なコールド パスを追加したいと考えている場合も、Event Hubs Capture ならストリーミング データの操作が容易です。Whether you're building batch-based systems today with an eye towards future real-time processing, or you want to add an efficient cold path to an existing real-time solution, Event Hubs Capture makes working with streaming data easier.

Event Hubs Capture の仕組みHow Event Hubs Capture works

Event Hubs は分散ログに似た、テレメトリの受信のための持続的バッファーです。Event Hubs is a time-retention durable buffer for telemetry ingress, similar to a distributed log. Event Hubs でのスケーリングの鍵となるのは、パーティション分割されたコンシューマー モデルです。The key to scaling in Event Hubs is the partitioned consumer model. 各パーティションは独立したデータのセグメントであり、個別に使用されます。Each partition is an independent segment of data and is consumed independently. このデータは、構成可能なリテンション期間に基づいて、所定のタイミングで破棄されます。Over time this data ages off, based on the configurable retention period. そのため、特定のイベント ハブが "いっぱい" になることはありません。As a result, a given event hub never gets "too full."

Event Hubs Capture を使用すると、キャプチャされたデータを格納するための独自の Azure Blob Storage アカウントとコンテナー、または Azure Data Lake Store アカウントを指定することができます。Event Hubs Capture enables you to specify your own Azure Blob storage account and container, or Azure Data Lake Store account, which are used to store the captured data. これらのアカウントのリージョンは、イベント ハブと同じであっても、別のリージョンであってもかまわないため、Event Hubs Capture 機能の柔軟性がさらに高まります。These accounts can be in the same region as your event hub or in another region, adding to the flexibility of the Event Hubs Capture feature.

キャプチャされたデータは Apache Avro 形式で書き込まれます。これはコンパクトで高速なバイナリ形式で、インライン スキーマを備えた便利なデータ構造になっています。Captured data is written in Apache Avro format: a compact, fast, binary format that provides rich data structures with inline schema. この形式は Hadoop エコシステム、Stream Analytics、Azure Data Factory で幅広く使用されています。This format is widely used in the Hadoop ecosystem, Stream Analytics, and Azure Data Factory. Avro の操作の詳細は、この記事の後半に記載してあります。More information about working with Avro is available later in this article.

キャプチャのウィンドウ化Capture windowing

Event Hubs Capture では、キャプチャを制御するウィンドウを設定できます。Event Hubs Capture enables you to set up a window to control capturing. このウィンドウは "先に来たものが優先されるポリシー" が適用される最小サイズと時間の構成です。つまり、先に生じたトリガーによってキャプチャ操作が行われます。This window is a minimum size and time configuration with a "first wins policy," meaning that the first trigger encountered causes a capture operation. 15 分/100 MB のキャプチャ ウィンドウを設定してあるときに 1 MB/秒で送信する場合は、サイズのウィンドウが時間のウィンドウよりも先にトリガーとなります。If you have a fifteen-minute, 100 MB capture window and send 1 MB per second, the size window triggers before the time window. 各パーティションのキャプチャは個別に行われ、完了したブロック BLOB がキャプチャ時に (キャプチャが実行されるタイミングとなったときに) 書き込まれます。Each partition captures independently and writes a completed block blob at the time of capture, named for the time at which the capture interval was encountered. ストレージの名前付け規則は次のとおりです。The storage naming convention is as follows:

{Namespace}/{EventHub}/{PartitionId}/{Year}/{Month}/{Day}/{Hour}/{Minute}/{Second}

日付の値がゼロ パディングされていることに注意してください。ファイル名の例は次のようになります。Note that the date values are padded with zeroes; an example filename might be:

https://mystorageaccount.blob.core.windows.net/mycontainer/mynamespace/myeventhub/0/2017/12/08/03/03/17.avro

Azure Storage Blob が一時的に利用できなくなった場合、Event Hubs Capture では、イベント ハブで構成されたデータ保持期間の間、データが保持され、ストレージ アカウントが再び利用可能になったら、データがバックフィルされます。In the event that your Azure storage blob is temporarily unavailable, Event Hubs Capture will retain your data for the data retention period configured on your event hub and back fill the data once your storage account is available again.

スループット単位へのスケーリングScaling to throughput units

Event Hubs のトラフィックは スループット単位で制御されます。Event Hubs traffic is controlled by throughput units. 受信の場合、1 スループット単位は最大 1 MB/秒または 1,000 イベント/秒となり、送信の場合はその倍となります。A single throughput unit allows 1 MB per second or 1000 events per second of ingress and twice that amount of egress. Standard Event Hubs は、1 から 20 のスループット ユニットで構成できます。クォータの引き上げのサポート リクエスト によってさらに購入することもできます。Standard Event Hubs can be configured with 1-20 throughput units, and you can purchase more with a quota increase support request. 購入済みのスループット単位を超えた使用分については、調整されます。Usage beyond your purchased throughput units is throttled. Event Hubs Capture は内部 Event Hubs ストレージからデータを直接コピーするため、スループット単位のエグレス クォータを回避でき、他の処理リーダー (Stream Analytics や Spark など) のためにエグレスを節約できます。Event Hubs Capture copies data directly from the internal Event Hubs storage, bypassing throughput unit egress quotas and saving your egress for other processing readers, such as Stream Analytics or Spark.

構成されると、Event Hubs Capture は最初のイベント送信時に自動的に実行され、そのまま実行を継続します。Once configured, Event Hubs Capture runs automatically when you send your first event, and continues running. ダウンストリーム処理で処理が行われていることを把握しやすいように、Event Hubs はデータがないときは空のファイルを書き込みます。To make it easier for your downstream processing to know that the process is working, Event Hubs writes empty files when there is no data. このプロセスにより、バッチ プロセッサに提供可能な、予測しやすいパターンとマーカーが得られます。This process provides a predictable cadence and marker that can feed your batch processors.

Event Hubs Capture の設定Setting up Event Hubs Capture

Azure Portal または Azure Resource Manager テンプレートを使用して、イベント ハブの作成時に Capture を構成できます。You can configure Capture at the event hub creation time using the Azure portal, or using Azure Resource Manager templates. 詳細については、次の記事を参照してください。For more information, see the following articles:

キャプチャしたファイルの確認と Avro の操作Exploring the captured files and working with Avro

Event Hubs Capture では、構成された時間枠で指定された Avro 形式のファイルが作成されます。Event Hubs Capture creates files in Avro format, as specified on the configured time window. これらのファイルは、 Azure ストレージ エクスプローラーなどの任意のツールを使用して確認できます。You can view these files in any tool such as Azure Storage Explorer. また、ローカルにダウンロードして操作することができます。You can download the files locally to work on them.

Event Hubs Capture によって生成されたファイルには、次の Avro スキーマがあります。The files produced by Event Hubs Capture have the following Avro schema:

Avro スキーマ

Avro ファイルを調べるには、Apache の Avro Tools jar を使うと簡単です。An easy way to explore Avro files is by using the Avro Tools jar from Apache. また、軽量 SQL 主導のエクスペリエンス向けの Apache Drill または Apache Spark を使用して、取り込まれたデータに対する複雑な分散処理を実行することもできます。You can also use Apache Drill for a lightweight SQL-driven experience or Apache Spark to perform complex distributed processing on the ingested data.

Apache Drill を使用するUse Apache Drill

Apache Drill は、任意の場所にある構造化および半構造化データのクエリを実行できる、"ビッグ データ探索のためのオープンソースの SQL クエリ エンジン" です。Apache Drill is an "open-source SQL query engine for Big Data exploration" that can query structured and semi-structured data wherever it is. このエンジンは、スタンドアロン ノードとして、またはパフォーマンスを向上させるために巨大なクラスターとして実行できます。The engine can run as a standalone node or as a huge cluster for great performance.

Azure Blob Storage へのネイティブ サポートを使用できるため、Avro ファイル内のデータにクエリを実行することが容易になります。次のドキュメントを参照してください。A native support to Azure Blob storage is available, which makes it easy to query data in an Avro file, as described in the documentation:

Apache Drill: Azure Blob Storage プラグインApache Drill: Azure Blob Storage Plugin

キャプチャされたファイルに簡単にクエリするには、コンテナーを使用して Apache Drill を有効にした状態で VM を作成および実行して Azure Blob Storage にアクセスできます。To easily query captured files, you can create and execute a VM with Apache Drill enabled via a container to access Azure Blob storage:

https://github.com/yorek/apache-drill-azure-blob

完全なエンド ツー エンドのサンプルを大規模なストリーミング リポジトリで入手できます。A full end-to-end sample is available in the Streaming at Scale repository:

大規模なストリーミング: Event Hubs CaptureStreaming at Scale: Event Hubs Capture

Apache Spark を使用するUse Apache Spark

Apache Spark は、"大規模なデータ処理のための統合された分析エンジン" です。Apache Spark is a "unified analytics engine for large-scale data processing." さまざまな言語 (SQL を含む) がサポートされ、Azure Blob Storage に容易にアクセスできます。It supports different languages, including SQL, and can easily access Azure Blob storage. Azure で Apache Spark を実行するには次の 2 つのオプションがあり、どちらも Azure Blob Storage への容易なアクセスが提供されます。There are two options to run Apache Spark in Azure, and both provide easy access to Azure Blob storage:

Avro ツールを使用するUse Avro Tools

Avro ツールは、jar パッケージとして入手できます。Avro Tools are available as a jar package. この jar ファイルをダウンロードしたら、次のコマンドを実行することによって、特定の Avro ファイルのスキーマを表示できます。After you download the jar file, you can see the schema of a specific Avro file by running the following command:

java -jar avro-tools-1.9.1.jar getschema <name of capture file>

このコマンドによって次の情報が返されます。This command returns

{

    "type":"record",
    "name":"EventData",
    "namespace":"Microsoft.ServiceBus.Messaging",
    "fields":[
                 {"name":"SequenceNumber","type":"long"},
                 {"name":"Offset","type":"string"},
                 {"name":"EnqueuedTimeUtc","type":"string"},
                 {"name":"SystemProperties","type":{"type":"map","values":["long","double","string","bytes"]}},
                 {"name":"Properties","type":{"type":"map","values":["long","double","string","bytes"]}},
                 {"name":"Body","type":["null","bytes"]}
             ]
}

また、Avro ツールを使用してファイルを JSON 形式に変換し、その他の処理を実行することもできます。You can also use Avro Tools to convert the file to JSON format and perform other processing.

より高度な処理を実行するには、お好みのプラットフォーム用の Avro をダウンロードしてインストールしてください。To perform more advanced processing, download and install Avro for your choice of platform. この記事の執筆時点では、C、C++、C#、Java、NodeJS、Perl、PHP、Python、Ruby 向けの実装があります。At the time of this writing, there are implementations available for C, C++, C#, Java, NodeJS, Perl, PHP, Python, and Ruby.

Apache Avro には、JavaPython 向けの完全な入門ガイドが用意されています。Apache Avro has complete Getting Started guides for Java and Python. Event Hubs Capture の概要に関する記事を読むこともできます。You can also read the Getting started with Event Hubs Capture article.

Event Hubs Capture に対する課金方法How Event Hubs Capture is charged

Event Hubs Capture の料金は、スループット単位と同様に時間単位で測定されます。Event Hubs Capture is metered similarly to throughput units: as an hourly charge. 料金は、その名前空間で購入されたスループット単位の数に正比例します。The charge is directly proportional to the number of throughput units purchased for the namespace. スループット単位が増減すると、Event Hubs Capture の測定もそれに応じたパフォーマンスを提供するために調整されます。As throughput units are increased and decreased, Event Hubs Capture meters increase and decrease to provide matching performance. 測定は連携して行われます。The meters occur in tandem. 料金の詳細については、「Event Hubs の価格」をご覧ください。For pricing details, see Event Hubs pricing.

エグレス クォータは別途請求されるため、Capture では消費されません。Note that Capture does not consume egress quota as it is billed separately.

Event Grid との統合Integration with Event Grid

Event Hubs 名前空間をソースとして Azure Event Grid サブスクリプションを作成できます。You can create an Azure Event Grid subscription with an Event Hubs namespace as its source. 以下のチュートリアルでは、イベント ハブをソースとして、また Azure Functions アプリをシンクとして使用して、Event Grid サブスクリプションを作成する方法を示します。Event Grid と Azure Functions を使用してキャプチャされた Event Hubs データを SQL Data Warehouse に移行するThe following tutorial shows you how to create an Event Grid subscription with an event hub as a source and an Azure Functions app as a sink: Process and migrate captured Event Hubs data to a SQL Data Warehouse using Event Grid and Azure Functions.

次の手順Next steps

Event Hubs Capture は Azure にデータを取得する最も簡単な方法です。Event Hubs Capture is the easiest way to get data into Azure. Azure Data Lake、Azure Data Factory、Azure HDInsight を利用することで、使い慣れたツールとプラットフォームを使用して、必要なスケールでバッチ処理やその他の分析を実行できます。Using Azure Data Lake, Azure Data Factory, and Azure HDInsight, you can perform batch processing and other analytics using familiar tools and platforms of your choosing, at any scale you need.

Event Hubs の詳細については、次のリンク先を参照してください:You can learn more about Event Hubs by visiting the following links: