Event Hubs come backbone dell’ingestione streaming

Azure Event Hubs è il servizio PaaS di event ingestion ad alto throughput per pipeline in tempo reale: milioni di eventi al secondo con bassa latenza, tramite AMQP 1.0, endpoint Kafka-compatibile e HTTPS. In DP-203 è il punto d’ingresso tipico verso Azure Stream Analytics, Azure Databricks / Spark Structured Streaming e il layer di storage ADLS Gen2.

Partition e consumer group

Un event hub è suddiviso in partition: log append-only ordinati. L’ordine è garantito solo all’interno della singola partizione. Il numero di partizioni si fissa alla creazione (tier Standard) e determina il massimo grado di parallelismo dei consumer a valle.

  • La partition key instrada eventi con la stessa chiave nella stessa partizione, preservando l’ordine per entità (es. deviceId).
  • Senza partition key il producer distribuisce in round-robin, massimizzando il throughput ma perdendo l’ordinamento per entità.

Un consumer group è una vista indipendente sullo stream: ogni gruppo mantiene i propri offset, così più applicazioni leggono gli stessi eventi in parallelo senza interferire. Regola chiave: un solo reader attivo per partizione, per consumer group.

Throughput Unit e Processing Unit

La capacità si misura in unità a seconda del tier:

  • Throughput Unit (TU) nel tier Standard: 1 TU = 1 MB/s (o 1000 eventi/s) in ingress e 2 MB/s in egress, con supporto Auto-Inflate per lo scaling automatico.
  • Processing Unit (PU) nel Premium e Capacity Unit (CU) nel Dedicated, per isolamento e workload elevati/predicibili.

Offset e checkpoint

L’offset è la posizione di un evento nella partizione; il checkpoint è il salvataggio persistente (tipicamente su blob storage) dell’ultimo offset processato. Il checkpoint abilita il resume dopo un riavvio e definisce la semantica at-least-once: sono quindi possibili duplicati, che il consumer deve gestire in modo idempotente.

Event Hubs Capture verso ADLS Gen2

Event Hubs Capture persiste automaticamente lo stream su ADLS Gen2 (o Blob Storage) in formato Avro, senza scrivere codice. Si configura una finestra a tempo/dimensione (es. ogni 5 minuti oppure 300 MB, il primo che scatta). È il pattern hot + cold path: Stream Analytics elabora il flusso caldo, mentre Capture archivia il grezzo per batch, audit o replay. Avro è preferito perché incapsula lo schema ed è splittabile — non confonderlo con Parquet, che qui non è l’output nativo.

Quando Event Hubs, IoT Hub o Service Bus

  • Event Hubs: telemetria e big-data streaming ad alto volume, tipicamente unidirezionale (device→cloud), orientato all’analytics.
  • IoT Hub: dispositivi IoT con esigenza di comunicazione bidirezionale (cloud-to-device, device twins, provisioning via DPS, identità e sicurezza per-device). Espone internamente un endpoint Event Hubs-compatibile per la lettura della telemetria.
  • Service Bus: messaging enterprise transazionale — queue, topic/subscription, ordinamento FIFO con sessioni, dead-letter — non telemetria di massa.

Integrazione con Stream Analytics e Spark

Event Hubs è input nativo di Stream Analytics: query SQL-like con finestre temporali (tumbling, hopping, sliding, session). Le Streaming Unit parallelizzano per partizione, ma una query è realmente embarrassingly parallel solo se input, query (PARTITION BY) e output condividono lo stesso partizionamento; altrimenti si crea un collo di bottiglia di merge.

In Spark Structured Streaming (Databricks o Synapse) si legge tramite il connettore Event Hubs o Kafka: ogni partizione diventa un task Spark, quindi il parallelismo effettivo è ancora limitato dal numero di partizioni definito a monte.

Trappole tipiche d’esame

  • Serve ordinamento per device → imposta la partition key = deviceId; non affidarti a un ordine globale, che non esiste (garantito solo per partizione).
  • 4 istanze di consumer ma l’hub ha 2 partizioni → il parallelismo massimo è pari al numero di partizioni: 2 consumer restano inattivi. Dimensiona le partizioni correttamente alla creazione.
  • Archiviare il raw stream sul data lake senza codice → usa Event Hubs Capture in Avro su ADLS Gen2, non un job Stream Analytics custom.
  • Servono cloud-to-device o device twin → scegli IoT Hub, non Event Hubs.
  • Aumentare il throughput di un hub Standard esistente → il numero di partizioni non è modificabile dopo la creazione: scala con TU / Auto-Inflate, oppure ricrea l’hub con più partizioni.