2016-05-04 3 views
0

Wir verwenden die EventHubSender.Send- und EventHubSender.SendBatch-API-Methoden zum Senden von Datenpaketen auf Azure Event Hub. Jedes Datenpaket hat typischerweise eine Größe von 6 KB und es gibt 13 derartige Datenpakete jede Sekunde von 13 verschiedenen Client-Rechnern (jede Maschine sendet pro Sekunde ein Datenpaket). Wir haben zwei Ereignis-Hubs in einem einzigen Namespace mit jeweils [6 KB * 13] Paketen als Ingress und Egress. Da der gesamte Ein- und Ausgang viel niedriger ist als die Kapazität einer Durchsatzeinheit, wird keine Drosselung beobachtet.Inkonsistente Send- und SendBatch-Latenz für den Ereignishub-Sender

Die Sendelatenz bleibt jedoch für Pakete, die jede Sekunde gesendet werden, nicht konsistent. Manchmal dauert die Sende-Latenz 3 bis 4 Sekunden. Dieses Verhalten wurde sowohl für lokale Clientcomputer als auch für Clientcomputer im Azure-Rechenzentrum getestet (nur zu Testzwecken).

Client-Initialisierung Code-Schnipsel:

var factory = MessagingFactory.CreateFromConnectionString(EventHubConnectionString); 
EventHubClient eventHubClient = this.factory.CreateEventHubClient(EventHubName); 
this.eventHubSender = eventHubClient.CreatePartitionedSender(EventHubPartitionId); 

Der Absender Code-Schnipsel:

using (EventData eventData = CreateEventDataPacket(data, settings)) 
{ 
     this.eventHubSender.Send(eventData); 
} 

Bitte beachten Sie: Die eventHubSender Instanz wird für jeden weiteren Sendeauftrag wiederverwendet werden und die Art Transport in EventHubConnectionString verwendet wird AMQP.

Bitte schlagen Sie vor, ob die Latenz für Send- und SendBatch-Methoden reduziert und konsistent gemacht werden kann.

Antwort

0

Sie erstellen PartitionedSender, die das Ereignis an eine bestimmte Partition sendet. Auf der Serviceseite bewegt sich die Partition möglicherweise von einem Back-End zu einem anderen, wenn das Service-Upgrade durchgeführt wird, wodurch die Partition für einige Sekunden nicht verfügbar ist und möglicherweise zur Sendewartezeit beiträgt. Wenn Sie partitioniertenSender nicht verwenden, sendet der Ereignis-Hub-Client an jede Partition einen Round-Robin-Weg, der die Situation beim Verschieben von Partitionen mildern sollte.

Abgesehen davon, senden Latenz zu viele Faktoren unterliegt auch wie Netzwerk, Lastenausgleich, die Serviceverfügbarkeit usw.

+0

müssen wir die Reihenfolge der Ereignisse halten, wie die statistische Analyse durchgeführt wird, sobald sie das Ereignis Hub erreichen. Daher können wir den Round-Robin-Ansatz der Partition nicht verwenden, da er die Pakete an eine andere Partition sendet und es daher schwierig macht, die Reihenfolge der Pakete zu verwalten. – bussa

+0

Ich glaube jedoch, dass ich SendAsync oder SendBatchAsycn anstelle von Synchronisierungsversionen verwenden kann, um den Durchsatz zu erhöhen, da sie eine interne Warteschlange aufrechterhalten, bevor die Pakete an den Ereignishub übergeben werden. ref: [link] (https://azure.microsoft.com/de-de/documentation/videos/managing-large-ounts-of-data-threutput-using-azure-event-hub-mit-nicole-berdy/) – bussa