以前の記事では Event Hubs のクイックスタートにて、Event Hubs と Spring Boot アプリケーションをつなげる方法について調べた。 Event Hubs と Kafka アプリケーションを繋げるにはこちらのクイックスタートを使用すればパラメータを設定するだけで簡単にできた。 ただし Event Hubs のレベルは kafka プロトコルに対応したい場合だと Basic では動かないため、Standard にする必要がある

その際に、Event Hubs <-> Kafka アプリケーション間で発生するイベントをキャプチャすることができるようだったので設定してみた。(Azure Blob Storage で行った) なお、操作は IntelliJ 上で行っているが、アプリの実行はターミナルで実施した。

キャプチャが保存されたことを確認する

前提

  • 当該リポジトリを clone 済みであり、適切なパラメータが設定済みであること
  • リポジトリの README.md に記載のある条件をクリアしていること

TestProducer を起動する

producer のルートディレクトリで以下を実行する

1
2
mvn clean package
mvn exec:java -Dexec.mainClass="TestProducer"

起動すると以下のようなログがターミナルに出力される。 startedTestProducer.png デフォルトでは起動時に100メッセージが送られるような設定となっているため、送信が完了した場合は以下のようなログが出力される。 testProducer.png

TestConsumer を起動する

consumer のルートディレクトリで以下を実行する

1
2
mvn clean package
mvn exec:java -Dexec.mainClass="TestConsumer"

今回は100メッセージを同時に送っており、下記ログによって受信したことがわかる。 testConsumer.png

Blob を確認する

設定しておいたストレージアカウントの指定コンテナに以下のように保存されることが確認できた。デフォルトでは日時別に保存されている。 blob.png

終わりに

ファイル内をみるには この辺りを使う必要がありそう 8/19 追記:試したが Avro ファイルは開けず別の対応が必要みたい。要調査

8/28 補足 Avro ファイルの中身を見る方法

サポートに問い合わせを行い確認したので追記。

  • 簡単なのは Apache の Avro Tools jar を使用すること
  • 中身を簡単に見たい時は Portal からでもオブジェクトの「編集」タブを押すことで見ることができたので以下の通り共有しておく

sample

なお、肝心の中身については以下のように表示された。確かに一部文字化けしているが使用には困らない。

1
Objavro.codecnullavro.schema�{"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","null"]}},{"name":"Body","type":["null","bytes"]}]}�'���^'A�%��=7y�'���^'A�%��=7y

References