Behandeln von Problemen mit dem Prüfpunktspeicher

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

Probleme bei der Verwendung von Blob Storage als Prüfpunktspeicher

Es können Probleme auftreten, wenn Sie ein Blob-Speicherkonto als Prüfpunktspeicher verwenden. Diese Probleme können Verzögerungen bei der Verarbeitung oder Fehler beim Erstellen von Prüfpunkten bei Verwendung des SDK umfassen.

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 das Speicherkonto nicht für andere Elemente.
  • Verwenden Sie den Container nicht für andere Elemente.
  • Erstellen Sie das Speicherkonto in derselben Region wie die bereitgestellte Anwendung. 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 des Blob Storage-Prüfpunktspeichers im 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 die, die normalerweise in Azure verfügbar sind, müssen Sie Code verwenden, um die Speicherdienst-API-Version in die spezifische Version zu ändern, die von dieser Umgebung unterstützt wird. Wenn Sie beispielsweise Event Hubs auf 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 die Speicherdienst-API-Version auf 2017-11-09 festzulegen. Ein Beispiel für das Ziel einer bestimmten Speicher-API-Version finden Sie in den folgenden Beispielen auf GitHub:

Wenn Sie Event Hubs-Empfänger ausführen, der Blob Storage als Prüfpunktspeicher verwendet, ohne auf die von Azure Stack Hub unterstützte Version abzielen, 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. Die Methode receive() löst jedoch keine Ausnahme aus. print(error) druckt die folgenden Ausnahmeinformationen:

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

Der Logger 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

Um mehr über das Partitionieren und das Setzen von Prüfpunkten zu erfahren, lesen Sie den folgenden Artikel: Ausgleich der Partitionslast über mehrere Instanzen Ihrer Anwendung