チェックポイント ストアの問題のトラブルシューティング

この記事では、Blob Storage をチェックポイント ストアとして使用する場合の問題について説明します。

Blob Storage をチェックポイント ストアとして使用する際の問題

BLOB ストレージ アカウントをチェックポイント ストアとして使用すると、処理の遅延や SDK の使用時のチェックポイント作成の失敗などに関連する問題が発生する場合があります。

チェックポイント ストアとして Azure Blob Storage を使用する場合は、次の推奨事項に従ってください。

  • コンシューマー グループごとに個別のコンテナーを使用します。 同じストレージ アカウントを使用できますが、各グループごとに 1 つのコンテナーを使用します。
  • コンテナーを他の何かに使用しないでください。また、ストレージ アカウントも他の何かに使用しないでください。
  • ストレージ アカウントは、デプロイされたアプリケーションが配置されているのと同じリージョンに存在する必要があります。 アプリケーションがオンプレミスの場合は、可能な中で最も近いリージョンを選択することを試みてください。

Azure portal の [ストレージ アカウント] ページの [Blob service] セクションで、次の設定が無効になっていることを確認してください。

  • 階層型名前空間
  • BLOB の論理的な削除
  • バージョン管理

Azure Stack Hub での Blob Storage チェックポイント ストアの使用

Azure で一般的に使用できるものとは異なるバージョンの Storage Blob SDK をサポートする環境で、チェックポイント ストアとして Azure Blob Storage を使用している場合は、コードを使用して、Storage サービスの API バージョンをその環境でサポートされている特定のバージョンに変更する必要があります。 たとえば、Azure Stack Hub バージョン 2002 上で Event Hubs を実行している場合、Storage Service で利用可能な最も高いバージョンは 2017-11-09 です。 この場合は、コードを使用して、対象にする Storage Service API のバージョンを 2017-11-09 にする必要があります。 特定の Storage API バージョンを対象にする方法の例については、次の GitHub のサンプルを参照してください。

Azure Stack Hub がサポートしているバージョンを対象とせずに、Blob Storage をチェックポイント ストアとして使用する Event Hubs レシーバーを実行すると、次のエラー メッセージが表示されます。

The value for one of the HTTP headers is not in the correct format

Python におけるサンプルのエラー メッセージ

Python の場合、azure.core.exceptions.HttpResponseError のエラーは EventHubConsumerClient.receive()on_error(partition_context, error) エラー ハンドラーに渡されます。 ただし、メソッド receive() は例外を発生させません。 print(error) は次の例外情報を表示します。

The value for one of the HTTP headers is not in the correct format.

RequestId:f048aee8-a90c-08ba-4ce1-e69dba759297
Time:2020-03-17T22:04:13.3559296Z
ErrorCode:InvalidHeaderValue
Error:None
HeaderName:x-ms-version
HeaderValue:2019-07-07

ロガーは、次のような 2 つの警告をログに記録します。

WARNING:azure.eventhub.extensions.checkpointstoreblobaio._blobstoragecsaio: 
An exception occurred during list_ownership for namespace '<namespace-name>.eventhub.<region>.azurestack.corp.microsoft.com' eventhub 'python-eh-test' consumer group '$Default'. 

Exception is HttpResponseError('The value for one of the HTTP headers is not in the correct format.\nRequestId:f048aee8-a90c-08ba-4ce1-e69dba759297\nTime:2020-03-17T22:04:13.3559296Z\nErrorCode:InvalidHeaderValue\nError:None\nHeaderName:x-ms-version\nHeaderValue:2019-07-07')

WARNING:azure.eventhub.aio._eventprocessor.event_processor:EventProcessor instance '26d84102-45b2-48a9-b7f4-da8916f68214' of eventhub 'python-eh-test' consumer group '$Default'. An error occurred while load-balancing and claiming ownership. 

The exception is HttpResponseError('The value for one of the HTTP headers is not in the correct format.\nRequestId:f048aee8-a90c-08ba-4ce1-e69dba759297\nTime:2020-03-17T22:04:13.3559296Z\nErrorCode:InvalidHeaderValue\nError:None\nHeaderName:x-ms-version\nHeaderValue:2019-07-07'). Retrying after 71.45254944090853 seconds

次のステップ

パーティション分割およびチェックポイント処理については、次の記事を参照してください。アプリケーションの複数のインスタンス間でパーティション負荷のバランスを取る