Echtzeit-Datenflussanalyse mit Azure Stream Analytics

Ursprünglicher Autor: Anton Staykov
  • Übersetzung


Vor kurzem hat Microsoft eine vorläufige Version eines neuen Dienstes angekündigt - Azure Stream Analytics , der für die Streaming-Datenverarbeitung im Echtzeitmodus erstellt wurde.

Die aktuelle Version von Azure Stream Analytics stellt eine Verbindung zum Azure Event Hub und zum Azure Blob-Speicher her, um einen Datenstrom (Eingaben genannt) zu empfangen, sowie zu Event Hubs, Blob-Speicher und Azure SQL-Datenbank, um Ergebnisse (Ausgaben) aufzuzeichnen. Ein Stream-Prozessor wurde in einer SQL-ähnlichen Sprache entwickelt, mit der Sie die Verarbeitung und Konvertierung von Stream-Daten in zuverlässige Informationen in Echtzeit festlegen können.

Und hier tritt die Kraft der Wolke in den Vordergrund. In nur wenigen Schritten und Stunden können Sie eine zuverlässige Infrastruktur aufbauen, die Zehntausende von Ereignissen oder Nachrichten pro Sekunde verarbeiten kann.

Ich war sehr gespannt, wie viel mit diesem Service erreicht werden kann. Also habe ich einen Testfall gemacht. Grundlage für mein Experiment war das Handbuch, das Sie unter diesem Link finden .

Das Handbuch weist im Schritt „Start the Job“ eine leichte Ungenauigkeit auf. Es heißt, dass Sie zum Abschnitt „Konfigurieren“ Ihrer Aufgabe (Job) gehen sollten, um die Startzeit der Aufgabe (Jobausgabe) festzulegen. Diese Einstellung befindet sich jedoch nicht im Abschnitt Konfigurieren. Dieser Parameter wird in dem Fenster konfiguriert, in dem Sie Ihre Aufgabe starten.

Um den Test interessanter zu gestalten, habe ich folgende Einstellungen geändert:
  • Stellen Sie die Event Hub-Skala auf 10 Einheiten ein. Somit ist es möglicherweise möglich, 10.000 Ereignisse pro Sekunde zu erreichen.
  • Der Event Hub-Code wurde geändert, um die Anzahl der Nachrichten zu erhöhen.
  • Erstellt ein kleines PowerShell-Skript zum Ausführen von N gleichzeitigen Instanzen der Befehlszeilenanwendung
  • All dies wurde in einer virtuellen Maschine im selben Azure-Rechenzentrum (Westeuropa) durchgeführt, in dem Event Hub und Stream Analytics arbeiten

Änderungen am Quellcode für die Service Bus Event Hub-Demo

Ich habe den gesamten unnötigen Code gelöscht (z. B. Erstellen eines Event Hub). Infolgedessen sieht meine Program.cs-Datei folgendermaßen aus:
static void Main(string[] args)
{
    System.Net.ServicePointManager.DefaultConnectionLimit = 1024;
    eventHubName = "salhub";
    Console.WriteLine("Start sending ...");
    Stopwatch sw = new Stopwatch();
    sw.Start();
    Paralelize();
    sw.Stop();
    Console.WriteLine("Completed in {0} ms", sw.ElapsedMilliseconds);
    Console.WriteLine("Press enter key to stop worker.");
    Console.ReadLine();
}
static void Paralelize()
{
    Task[] tasks = new Task[25];
    for (int i = 0; i < 25; i++)
    {
        tasks[i] = new Task(()=>Send(2000)); 
    }
    Parallel.ForEach(tasks, (t) => { t.Start(); });
    Task.WaitAll(tasks);
}
public static void Send(int eventCount)
{
    Sender s = new Sender(eventHubName, eventCount);
    s.SendEvents();
}

Mit dieser Befehlszeilenanwendung sende ich jetzt 25 x 2.000 oder 50.000 Nachrichten parallel. Um die Sache noch lustiger zu machen, starte ich die Anwendung pseudo-parallel und starte sie nur 20 Mal mit dem folgenden PowerShell-Skript:
for($i=1; $i -le 20; $i++)
{
    start .\BasicEventHubSample.exe 
}

So starte ich Prozesse fast gleichzeitig. Und ich warte bis zum Ende, bis alle Prozesse ihre Nachrichten senden. Zwanzigmal 50.000 Nachrichten generieren 1.000.000 Nachrichten. Dann erhalten Sie einfach das Ergebnis der langsamsten Operation. Natürlich sind alle diese Indikatoren etwas grob, aber genug, um mir eine Vorstellung von den Möglichkeiten zu geben, die ich habe. Ohne in teure Geräte investieren und komplexe Lösungen entwickeln zu müssen.

Ein weiterer Punkt ist, dass ich meine Stream-Analyse-Aufgabe gestartet habe, bevor ich Befehlszeilenanwendungen ausgeführt habe, die Daten herunterladen, um sicherzustellen, dass der Stream-Prozessor bereits ausgeführt wird, bevor ich ihn mit Daten versetze.

Achten Sie auf einige Punkte. Zunächst befindet sich der Stream Analytics-Dienst noch in der vorläufigen Versionsphase, sodass es zu Abstürzen kommen kann. Aber das Endergebnis ist immer noch einfach erstaunlich.

Schauen Sie sich die Diagramme zu Event Hub und Stream Analytics an - es ist einfach fantastisch. Übrigens war ich auch davon überzeugt, dass die neuen Leistungsstufen der Azure SQL-Datenbank ebenfalls erstaunlich sind.

Mit einem solchen Datenvolumen in Stream Analytics hatte der Dienst keine Probleme, Ergebnisse in eine einzelne Datenbank der Basisstufe (5 DTUs) zu schreiben! Ich habe angefangen, die Ergebnisse in die Tabelle meiner SQL-Datenbank aufzunehmen, sobald ich vom Ausführen des Programms zu meinem SQL Server Management Studio gewechselt bin und die Ergebnisse in Echtzeit sehen konnte.

Und schließlich habe ich in nur 75 Sekunden 1.000.000 Events im Event Hub aufgepumpt! Das bedeutet über 13.000 Ereignisse pro Sekunde! Insgesamt mit ein paar Codezeilen.

Es ist großartig, Diagramme wie dieses zu betrachten:



Und es ist großartig, Diagramme wie dieses zu betrachten. Azure Event Hubs:



Azure Event Hubs, Millionen von Posts. Stellen Sie sich vor, wie lange wir brauchen würden, um ein lokales Testlabor zu erstellen, um ein solches Datenvolumen zu verarbeiten.

Nachfolgend sind einige der wichtigsten Einschränkungen und bekannten Probleme von Stream Analytics aufgeführt:
  • Geografische Erreichbarkeit der vorläufigen Version des Dienstes (Region Zentral-USA und Westeuropa)
  • Kontingent für Stream-Einheiten (12 Stream-Einheiten pro Azure pro Region und Abonnement)
  • UTF-8 ist die einzige Codierung, die für Eingabe-CSV- und JSON-Datenquellen unterstützt wird.
  • In der vorläufigen Version sind einige coole Leistungsindikatoren nicht verfügbar, z. B. das Zählen von Verzögerungen.

Angesichts der Ergebnisse bin ich überzeugt, dass Azure Event Hubs tatsächlich einen Durchsatz von Millionen von Ereignissen pro Sekunde liefern können und Stream Analytics diese Datenmenge wirklich verarbeiten kann.

Nützliche Links



Jetzt auch beliebt: