← Blog Cloud

Aufbau einer IoT-Datenpipeline mit Azure Event Hubs und Azure Functions

Azure IoTGerätEvent HubDashboard

Azure-IoT-Datenpipeline: Geräte — IoT Hub — Event Hubs — Functions — Time Series — React-Dashboard

10.000 Geräte direkt mit einer Datenbank zu verbinden, ist keine Pipeline – es ist ein Engpass. Eine produktive IoT-Datenpipeline muss Millionen von Nachrichten pro Tag verarbeiten, Ausfälle ohne Datenverlust überstehen und Echtzeit- sowie historische Abfragen gleichzeitig bedienen.

Pipeline-Architektur

// Vierstufige Pipeline

Stufe 1: Ingest   -> Azure IoT Hub (MQTT/HTTPS)
Stufe 2: Routing  -> Nachrichten-Routing zu Endpunkten nach Typ
Stufe 3: Verarbeitung -> Azure Functions (Event-Hubs-Trigger)
Stufe 4: Bereitstellung -> Time Series Insights + Cosmos DB

Azure Functions — Event-Hub-Trigger

// Event-Hub-Trigger — Telemetrie-Batch verarbeiten

app.eventHub("processTelemetry", {
    connection: "EventHubsConn",
    eventHubName: "telemetry",
    cardinality: "many",
    handler: async (events, context) => {
        for (const e of events) {
            await tsi.write(e.deviceId, e.timestamp, e.readings);
            await cosmos.upsert({id: e.deviceId, lastSeen: e.timestamp});
        }
    }
});
⚠️ Warnung zur Nachrichtenaufbewahrung
Der IoT Hub bewahrt D2C-Nachrichten maximal 7 Tage auf. Konfigurieren Sie immer einen Blob-Storage-Fallback-Endpunkt – wenn Ihre Functions ausfallen, haben Sie ein vollständiges Archiv, aus dem Sie erneut abspielen können. Die Kosten für Cold Storage sind vernachlässigbar; verlorene Daten sind unwiederbringlich.

Partitionierungsstrategie für Event Hubs

Event Hubs nutzt Partitionen, um Durchsatz zu erreichen – jede Partition ist ein eigenständiger, geordneter Datenstrom. Consumer-Gruppen lesen parallel aus den Partitionen, mehr Partitionen bedeuten also mehr parallele Verarbeitung. Ein häufiger Fehler ist Unter-Partitionierung: Man startet mit 4 Partitionen und stellt fest, dass die Azure Functions nicht skalieren können, um 100.000 Nachrichten pro Sekunde zu verarbeiten, wenn ein Firmware-Bug dazu führt, dass alle Geräte gleichzeitig Fehler-Events senden.

Die Partitionsanzahl kann nach der Erstellung nicht mehr geändert werden. Dimensionieren Sie für das 2- bis 5-Fache Ihres erwarteten Spitzendurchsatzes. Verwenden Sie die Geräte-ID als Partitionsschlüssel – so wird sichergestellt, dass alle Nachrichten eines einzelnen Geräts innerhalb einer Partition geordnet sind, was die Zeitreihen-Rekonstruktion und das Zustandsmanagement in Ihren Functions vereinfacht.

Umgang mit Reconnection-Stürmen von Geräten

Wenn ein Cloud-Ausfall endet, versuchen alle Geräte gleichzeitig, sich wieder zu verbinden. Bei 10.000 Geräten entsteht ein Thundering Herd: Millionen gepufferter Nachrichten treffen innerhalb von Sekunden auf Event Hubs. Ihre verarbeitenden Functions müssen dies souverän bewältigen – implementieren Sie exponentielles Backoff mit Jitter in der Geräte-Firmware und konfigurieren Sie Event Hubs mit ausreichenden Throughput Units und Aufbewahrung, um den Ansturm abzufangen.

// Geräte-Firmware — Wiederverbindung mit Jitter

int backoff_ms = BASE_BACKOFF_MS;
while (!connected) {
    int jitter = random(0, backoff_ms / 2);
    vTaskDelay(pdMS_TO_TICKS(backoff_ms + jitter));
    backoff_ms = MIN(backoff_ms * 2, MAX_BACKOFF_MS);
    connected = mqtt_connect();
}

Cold-Path- vs. Hot-Path-Architektur

IoT-Datenpipelines haben typischerweise zwei Pfade: den Hot Path für die Echtzeitverarbeitung (Dashboards, Alarme, Anomalieerkennung) und den Cold Path für historische Speicherung und Batch-Analysen. Der Hot Path priorisiert Latenz – Azure Functions verarbeiten Event-Hub-Events und pushen sie über SignalR an Live-Dashboards. Der Cold Path priorisiert Vollständigkeit – alle Rohnachrichten werden im Parquet-Format in Azure Blob Storage geschrieben, für spätere Analysen mit Azure Synapse oder Databricks.

Beide Pfade von Tag eins an zu entwerfen, vermeidet das häufige Problem, Rohdaten zu verwerfen, die sich später als wertvoll erweisen. Speicher ist günstig; die Rekonstruktion historischer Sensordaten, die nie gespeichert wurden, ist unmöglich. Unsere Standard-Pipeline schreibt alle Roh-Gerätenachrichten in den Cold Storage und eine verarbeitete Teilmenge in die Warm-Tier – die Rohdaten können Sie jederzeit erneut verarbeiten, aber Sie können sie nicht wieder herbeizaubern, wenn sie verloren sind.

Entwickeln Sie ein IoT-Produkt?

FSS ist ein Full-Stack-IoT-Engineering-Team – Hardware, Firmware, Cloud und Mobile aus einer Hand.

Unsere Cloud-Kompetenzen →