Behandeln von Problemen mit dem Prüfpunktspeicher

In diesem Artikel werden Probleme bei der Verwendung von Blob Storage als Prüfpunktspeicher erläutert.

Probleme bei der Verwendung von Blob Storage als Prüfpunktspeicher

Bei der Verwendung eines Blob-Speicherkontos als Prüfpunktspeicher können Probleme auftreten, die mit Verzögerungen bei der Verarbeitung oder Fehlern beim Erstellen von Prüfpunkten bei der Verwendung des SDK usw. zusammenhängen.

Befolgen Sie diese Empfehlungen, wenn Sie Azure Blob Storage als Prüfpunktspeicher verwenden:

  • Verwenden Sie einen separaten Container für jede Consumergruppe. Sie können dasselbe Speicherkonto verwenden, aber verwenden Sie für jede Gruppe einen eigenen Container.
  • Verwenden Sie weder den Container noch das Speicherkonto für andere Zwecke.
  • Das Speicherkonto sollte sich in derselben Region befinden, in der sich die bereitgestellte Anwendung befindet. Wenn die Anwendung lokal ist, versuchen Sie, die nächstgelegene Region auszuwählen.

Stellen Sie auf der Seite Speicherkonto im Azure-Portal im Abschnitt Blobdienst sicher, dass die folgenden Einstellungen deaktiviert sind.

  • Hierarchischer Namespace
  • Vorläufiges Löschen von Blobs
  • Versionsverwaltung

Verwenden von Blob Storage-Prüfpunktspeicher in Azure Stack Hub

Wenn Sie Azure Blob Storage als Prüfpunktspeicher in einer Umgebung verwenden, die eine andere Version des Storage Blob-SDK unterstützt als diejenigen, die normalerweise in Azure verfügbar sind, müssen Sie Code verwenden, um die Version der Storage-Dienst-API in die spezifische Version zu ändern, die von dieser Umgebung unterstützt wird. Wenn Sie z. B. Event Hubs mit einer Azure Stack Hub-Version 2002 ausführen, ist die höchste verfügbare Version für den Speicherdienst Version 2017-11-09. In diesem Fall müssen Sie Code verwenden, um Version 2017-11-09 der Storage Service-API als Ziel zu nutzen. Ein Beispiel dafür, wie Sie eine bestimmte Storage-API-Version ansteuern können, finden Sie in diesen Beispielen auf GitHub:

Wenn Sie den Event Hubs-Empfänger ausführen, der Blob Storage als Prüfpunktspeicher verwendet, ohne die Version anzusteuern, die Azure Stack Hub unterstützt, erhalten Sie die folgende Fehlermeldung:

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

Beispielfehlermeldung in Python

Für Python wird der Fehler azure.core.exceptions.HttpResponseError an den Fehlerhandler on_error(partition_context, error) von EventHubConsumerClient.receive() übergeben. Allerdings wird von der Methode receive() keine Ausnahme ausgelöst. print(error) gibt die folgenden Ausnahmeinformationen aus:

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

Die Protokollierung protokolliert zwei Warnungen wie die folgenden:

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

Nächste Schritte

Informationen zur Partitionierung und Prüfpunktausführung finden Sie im folgenden Artikel: Ausgleichen der Partitionsauslastung über mehrere Instanzen der Anwendung hinweg