Ereignisreplikationstasks und -Anwendungen mit Azure Functions
Tipp
Verwenden Sie für alle zustandsbehafteten Replikationstasks, bei denen Sie die Nutzlasten ihrer Ereignisse berücksichtigen und diese transformieren, aggregieren, anreichern oder reduzieren müssen, Azure Stream Analytics anstelle von Azure Functions.
Wie im Artikel Ereignisreplikation und regionsübergreifender Verbund erläutert wird, stützt sich die zustandslose Replikation von Ereignisdatenströmen zwischen Paaren von Event Hubs und zwischen Event Hubs und anderen Ereignis-Datenstromquellen und -zielen auf Azure Functions.
Azure Functions ist eine skalierbare und zuverlässige Ausführungsumgebung zum Konfigurieren und Ausführen serverloser Anwendungen, einschließlich Ereignisreplikation und Verbundtasks.
In dieser Übersicht erfahren Sie mehr über die integrierten Funktionen von Azure Functions für solche Anwendungen, über Codeblöcke, die Sie für Transformationsaufgaben übernehmen und ändern können, sowie darüber, wie Sie eine Azure Functions-Anwendung so konfigurieren, dass sie ideal in Event Hubs und andere Azure-Messagingdienste integriert werden kann. Bei vielen Details wird in diesem Artikel auf die Dokumentation von Azure Functions verwiesen.
Was ist eine Replikationsaufgabe?
Eine Replikationsaufgabe empfängt Ereignisse von einer Quelle und leitet Sie an ein Ziel weiter. Die meisten Replikationsaufgaben leiten Ereignisse unverändert weiter und führen höchstens eine Zuordnung zwischen Metadatenstrukturen aus, wenn sich die Quell- und Zielprotokolle unterscheiden.
Replikationsaufgaben sind in der Regel zustandslos, was bedeutet, dass sie keinen Status oder andere Nebeneffekte über sequenzielle oder parallele Ausführungen einer Aufgabe hinweg weitergeben. Dies trifft auch auf Batchverarbeitung und Verkettung zu, die beide auf Grundlage des vorhandenen Zustands eines Datenstroms implementiert werden können.
Dadurch unterscheiden sich Replikationsaufgaben von Aggregationsaufgaben, die im allgemeinen zustandsbehaftet sind und die Domäne von Analyseframeworks und -diensten wie Azure Stream Analytics sind.
Replikationsanwendungen und -aufgaben in Azure Functions
In Azure Functions wird eine Replikationsaufgabe mit einem Trigger implementiert, der Eingabemeldungen von einer konfigurierten Quelle erfasst, und eine Ausgabebindung, die von der Quelle kopierte Meldungen an ein konfiguriertes Ziel weiterleitet.
Replikationsaufgaben werden mithilfe derselben Bereitstellungsmethoden in der Replikationsanwendung bereitgestellt wie jede andere Azure Functions-Anwendung. Sie können mehrere Aufgaben in derselben Anwendung konfigurieren.
Mit Azure Functions Premium können mehrere Replikationsanwendungen denselben zugrunde liegenden Ressourcenpool gemeinsam nutzen, der als App Service Plan bezeichnet wird. Dies bedeutet, dass Sie in .NET geschriebene Replikationsaufgaben problemlos mit Replikationsaufgaben zusammenstellen können, die beispielsweise in Java geschrieben sind. Dies ist wichtig, wenn Sie bestimmte Bibliotheken, wie z. B. Apache Camel, nutzen möchten, die nur für Java verfügbar sind, und wenn diese die beste Option für einen bestimmten Integrationspfad darstellen, auch wenn Sie prinzipiell eine andere Sprache und Laufzeit für Ihre anderen Replikationsaufgaben bevorzugen würden.
Wann immer möglich, sollten Sie die batchorientierten Trigger den Triggern vorziehen, die einzelne Ereignisse oder Nachrichten übermitteln, und Sie sollten immer die gesamte Ereignis- oder Nachrichtenstruktur abrufen, anstatt sich auf die Parameterbindungsausdrücke der Azure-Funktion zu verlassen.
Der Name der Funktion sollte das Paar aus Quelle und Ziel widerspiegeln, mit dem Sie eine Verbindung herstellen, und Sie sollten Verweise auf Verbindungszeichenfolgen oder andere Konfigurationselemente in den Anwendungskonfigurationsdateien mit diesem Namen als Präfix angeben.
Zuordnung von Daten und Metadaten
Nachdem Sie sich für ein Paar aus Eingabetrigger und Ausgabebindung entschieden haben, müssen Sie eine Zuordnung zwischen den verschiedenen Ereignis- oder Nachrichtentypen durchführen, es sei denn, der Typ Ihres Triggers und die Ausgabe sind identisch.
Bei einfachen Replikationsaufgaben, die Nachrichten zwischen Event Hubs und Service Bus kopieren, müssen Sie keinen eigenen Code schreiben, sondern können eine Hilfsprogrammbibliothek verwenden, die zusammen mit den Replikationsbeispielen bereitgestellt wird.
Wiederholungsrichtlinie
Um Datenverluste während eines Verfügbarkeitsereignisses auf beiden Seiten einer Replikationsfunktion zu vermeiden, müssen Sie die Wiederholungsrichtlinie so konfigurieren, dass sie robust ist. Informationen zum Konfigurieren der Wiederholungsrichtlinie finden Sie in der Azure Functions-Dokumentation zu Wiederholungen.
Die für die Beispielprojekte im Beispielrepository gewählten Richtlinieneinstellungen konfigurieren eine exponentielle Backoff-Strategie mit Wiederholungsintervallen zwischen 5 Sekunden und 15 Minuten mit unendlichen Wiederholungen, um Datenverluste zu vermeiden.
Die allgemein verfügbare (GA) Version von Wiederholungsrichtlinien für Azure Functions unterstützt nur Event Hubs und Zeitgebertrigger. Der Vorschausupport für alle anderen Trigger wurde entfernt.
Einrichten eines Replikationsanwendungshosts
Eine Replikationsanwendung ist ein Ausführungshost für eine oder mehrere Replikationsaufgaben.
Es handelt sich um eine Azure Functions-Anwendung, die so konfiguriert ist, dass sie entweder im Verbrauchsplan oder in einem Premium-Plan für Azure Functions (empfohlen) ausgeführt wird. Alle Replikationsanwendungen müssen unter einer systemseitig oder benutzerseitig zugewiesenen verwalteten Identität ausgeführt werden.
Die verknüpften Azure Resource Manager-Vorlagen (ARM) erstellen und konfigurieren eine Replikationsanwendung mit:
- Einem Azure-Speicherkonto für die Nachverfolgung des Replikationsfortschritts und für Protokolle.
- Eine systemseitig zugewiesene verwaltete Identität.
- Azure Monitor und Application Insights-Integration zur Überwachung.
Replikationsanwendungen, die auf Event Hubs zugreifen müssen, die an ein virtuelles Azure-Netzwerk (VNet) gebunden sind, müssen den Premium-Plan für Azure Functions verwenden und so konfiguriert sein, dass sie demselben VNet angefügt werden, das ebenfalls eine der verfügbaren Optionen ist.
Bereitstellen | Visualisieren | |
---|---|---|
Azure Functions-Nutzungsplan | ||
Premium-Plan | ||
Premium-Plan für Azure Functions mit VNet |
Beispiele
Das Repository mit Beispielen enthält mehrere Beispiele für Replikationsaufgaben, die Ereignisse zwischen Event Hubs und/oder zwischen Service Bus-Entitäten kopieren.
Zum Kopieren von Ereignisdaten zwischen Event Hubs verwenden Sie einen Event Hub-Trigger mit einer Event Hubs-Ausgabebindung:
[FunctionName("telemetry")]
[ExponentialBackoffRetry(-1, "00:00:05", "00:05:00")]
public static Task Telemetry(
[EventHubTrigger("telemetry", ConsumerGroup = "$USER_FUNCTIONS_APP_NAME.telemetry", Connection = "telemetry-source-connection")] EventData[] input,
[EventHub("telemetry-copy", Connection = "telemetry-target-connection")] EventHubClient outputClient,
ILogger log)
{
return EventHubReplicationTasks.ForwardToEventHub(input, outputClient, log);
}
Zum Kopieren von Nachrichten zwischen Service Bus-Entitäten verwenden Sie den Service Bus-Trigger und eine Service Bus-Ausgabebindung:
[FunctionName("jobs-transfer")]
[ExponentialBackoffRetry(-1, "00:00:05", "00:05:00")]
public static Task JobsTransfer(
[ServiceBusTrigger("jobs-transfer", Connection = "jobs-transfer-source-connection")] Message[] input,
[ServiceBus("jobs", Connection = "jobs-target-connection")] IAsyncCollector<Message> output,
ILogger log)
{
return ServiceBusReplicationTasks.ForwardToServiceBus(input, output, log);
}
Die Hilfsmethoden können die Replikation zwischen Event Hubs und Service Bus vereinfachen:
`Source` | Ziel | Einstiegspunkt |
---|---|---|
Event Hubs | Event Hubs | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToEventHub |
Event Hubs | Service Bus | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToServiceBus |
Service Bus | Event Hubs | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToEventHub |
Service Bus | Service Bus | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToServiceBus |
Überwachung
Informationen dazu, wie Sie Ihre Replikations-App überwachen können, finden Sie im Abschnitt „Überwachung“ der Azure Functions-Dokumentation.
Ein besonders nützliches visuelles Tool für die Überwachung von Replikationsaufgaben ist die Anwendungsübersicht von Application Insights, die automatisch aus den erfassten Überwachungsinformationen generiert wird und das Untersuchen der Zuverlässigkeit und Leistung der Übertragungen zwischen Replikationsaufgabenquelle und -Ziel ermöglicht.
Für sofortige Diagnoseerkenntnise können Sie mit dem Portaltool Livemetriken arbeiten, das Visualisierung von Protokolldetails mit geringen Wartezeiten bereitstellt.