Flussi Kafka per Hub eventi di Azure

Questo articolo fornisce informazioni dettagliate su come usare la libreria client Kafka Streams con Hub eventi di Azure.

Nota

La funzionalità Kafka Streams è disponibile solo in anteprima pubblica per hub eventi Premium e livelli dedicati.

Panoramica

Apache Kafka Streams è una libreria client solo Java che fornisce un framework per l'elaborazione dei dati di streaming e la creazione di applicazioni in tempo reale sui dati archiviati negli argomenti Kafka. L'ambito dell'elaborazione è limitato al client, mentre gli argomenti Kafka fungono da archivio dati per i dati intermedi, prima che l'output venga scritto nell'argomento di destinazione.

Hub eventi fornisce un endpoint Kafka da usare con le applicazioni client Kafka esistenti come alternativa all'esecuzione del proprio cluster Kafka. Hub eventi funziona con molte delle applicazioni Kafka esistenti. Per altre informazioni, vedere Hub eventi per Apache Kafka.

Uso di flussi Kafka con Hub eventi di Azure

Hub eventi di Azure supporta in modo nativo sia il protocollo AMQP che il protocollo Kafka. Tuttavia, per garantire il comportamento compatibile di Kafka Streams, alcuni dei parametri di configurazione predefiniti devono essere aggiornati per i client Kafka.

Proprietà Comportamento predefinito per Hub eventi Comportamento modificato per i flussi Kafka Spiegazione
messageTimestampType impostato su AppendTime deve essere impostato su CreateTime Kafka Streams si basa sul timestamp di creazione anziché sul timestamp di accodamento
message.timestamp.difference.max.ms il valore massimo consentito è 90 giorni La proprietà viene utilizzata solo per gestire i timestamp precedenti. L'ora futura è impostata su 1 ora e non può essere modificata. Questo è in linea con la specifica del protocollo Kafka
min.compaction.lag.ms il valore massimo consentito è di due giorni
Argomenti relativi alla conservazione infinita troncamento basato sulle dimensioni di 250 GB per ogni partizione di argomento
Eliminare l'API dei record per argomenti di conservazione infiniti Non implementata. Come soluzione alternativa, è possibile aggiornare l'argomento e impostare un tempo di conservazione limitato. Questa operazione verrà eseguita a livello generale

Altre considerazioni

Ecco alcune delle altre considerazioni da tenere presenti.

  • Per poter creare argomenti temporanei per l'elaborazione del flusso, è necessario concedere alle applicazioni client kafka le autorizzazioni di gestione, lettura e scrittura per l'intero spazio dei nomi.
  • Gli argomenti temporanei e le partizioni vengono conteggiati per la quota per lo spazio dei nomi specificato. Questi elementi devono essere presi in considerazione durante il provisioning dello spazio dei nomi o del cluster.
  • Il tempo di conservazione infinito per l'archivio "Offset" è limitato dal tempo massimo di conservazione dei messaggi dello SKU. Controllare Le quote di Hub eventi per questi valori specifici del livello.

Tra cui, l'aggiornamento della configurazione dell'argomento in messageTimestampType per l'uso CreateTime di , ovvero l'ora di creazione dell'evento, anziché l'ora di accodamento del log, ovvero l'ora AppendTime di accodamento del log.

Per eseguire l'override del comportamento predefinito (obbligatorio), è necessario impostare l'impostazione seguente in Azure Resource Manager (ARM).

Nota

Vengono visualizzate solo le parti specifiche del modello di Resource Manager per evidenziare la configurazione che deve essere aggiornata.

{
  "parameters": {
    "namespaceName": "contoso-test-namespace",
    "resourceGroupName": "contoso-resource-group",
    "eventHubName": "contoso-event-hub-kafka-streams-test",
    ...
    "parameters": {
      "properties": {
        ...
        "messageTimestampType": "CreateTime",
        "retentionDescription": {
          "cleanupPolicy": "Delete",
          "retentionTimeInHours": -1,
          "tombstoneRetentionTimeInHours": 1
        }
      }
    }
  }
}

Concetti relativi a Kafka Streams

I flussi Kafka forniscono un semplice livello di astrazione sulle API producer e consumer Kafka per aiutare gli sviluppatori a iniziare a usare scenari di streaming in tempo reale più velocemente. La libreria leggera dipende da un broker compatibile con Apache Kafka (ad esempio Hub eventi di Azure) per il livello di messaggistica interna e gestisce un archivio stato locale a tolleranza di errore. Con l'API transazionale, la libreria di flussi Kafka supporta funzionalità di elaborazione avanzate, ad esempio una sola volta l'elaborazione e un record alla volta.

I record che arrivano fuori ordine traggono vantaggio dalle operazioni di windowing basate sul tempo degli eventi.

Nota

È consigliabile acquisire familiarità con la documentazione di Kafka Streams e i concetti di base di Kafka Streams.

Flussi

Un flusso è la rappresentazione astratta di un argomento Kafka. È costituito da un set di dati non associato e ad aggiornamento continuo di record di dati non modificabili, in cui ogni record di dati è una coppia chiave-valore.

Topologia di elaborazione dei flussi

Un'applicazione Kafka streams definisce la logica di calcolo tramite un daG (indirizzato a un grafico aciclico) rappresentato da una topologia del processore. La topologia del processore comprende processori di flusso (nodi nella topologia) che rappresentano un passaggio di elaborazione, connesso da flussi (archi nella topologia).

I processori di flusso possono essere concatenati a processori upstream o processori downstream, ad eccezione di alcuni casi speciali:

  • Processori di origine: questi processori non hanno processori upstream e leggono direttamente da uno o più flussi. Possono quindi essere concatenati ai processori downstream.
  • Processori sink: questi processori non hanno processori downstream e devono scrivere direttamente in un flusso.

La topologia di elaborazione del flusso può essere definita con il linguaggio DSL Kafka Streams o con l'API processore di livello inferiore.

Dualità di flusso e tabella

I flussi e le tabelle sono due astrazioni diverse ma utili fornite dal linguaggio DSL Kafka Streams, modellazione sia di serie temporali che di formati di dati relazionali che devono coesistere per i casi d'uso per l'elaborazione dei flussi.

Kafka estende ulteriormente questa funzionalità e introduce una dualità tra flussi e tabelle, dove un

  • Un flusso può essere considerato come un log delle modifiche di una tabella e
  • Una tabella può essere considerata uno snapshot del valore più recente di ogni chiave in un flusso.

Questa dualità consente l'uso di tabelle e flussi in modo intercambiabile come richiesto dal caso d'uso.

Ad esempio:

  • Unione di dati statici dei clienti (modellati come tabella) con transazioni dinamiche (modellate come flusso) e
  • Unendo le posizioni di portafoglio in un portafoglio di operatori giornalieri (modellato come flusso) con il feed di dati di mercato più recente (modellato come flusso).

Time

Kafka Streams consente alle funzioni di windowing e grace di consentire l'inserimento dei record di dati non in ordine e ancora essere inclusi nell'elaborazione. Per garantire che questo comportamento sia deterministico, esistono nozioni aggiuntive di tempo nei flussi Kafka. tra cui:

  • Ora di creazione (nota anche come 'Ora evento'): ora in cui si è verificato l'evento e il record di dati è stato creato.
  • Tempo di elaborazione: ora in cui il record di dati viene elaborato dall'applicazione di elaborazione del flusso (o quando viene utilizzato).
  • Ora di accodamento (nota anche come 'Ora di creazione'): questo è il momento in cui i dati vengono archiviati e sottoposti a commit nella risorsa di archiviazione del broker Kafka. Ciò differisce dal tempo di creazione a causa della differenza di tempo tra la creazione dell'evento e l'inserimento effettivo da parte del broker.

Operazioni con stato

La gestione dello stato consente applicazioni sofisticate di elaborazione dei flussi, ad esempio l'unione e l'aggregazione di dati da flussi diversi. Questo risultato viene ottenuto con gli archivi di stato forniti da Kafka Streams e accessibili usando operatori con stato nel dsl Kafka Streams.

Le trasformazioni con stato nel linguaggio DSL includono:

Finestra e grazia

Le operazioni di windowing nel linguaggio DSL Kafka Streams consentono agli sviluppatori di controllare il modo in cui i record vengono raggruppati per una determinata chiave per operazioni con stato, ad esempio aggregazioni e join.

Le operazioni di windowing consentono inoltre di specificare un periodo di tolleranza per offrire una certa flessibilità per i record non ordinati per una determinata finestra. Un record destinato a una determinata finestra e arriva dopo la finestra specificata, ma entro il periodo di tolleranza viene accettato. I record che arrivano dopo il periodo di tolleranza vengono eliminati.

Le applicazioni devono usare i controlli finestra e periodo di tolleranza per migliorare la tolleranza di errore per i record non ordinati. I valori appropriati variano in base al carico di lavoro e devono essere identificati empiricamente.

Garanzie di elaborazione

Gli utenti aziendali e tecnici cercano di estrarre informazioni aziendali chiave dall'output dei carichi di lavoro di elaborazione dei flussi, che si traducono in requisiti di garanzia transazionali elevati. I flussi Kafka funzionano insieme alle transazioni Kafka per garantire garanzie di elaborazione transazionale integrando con il sistema di archiviazione sottostante kafka compatibile con i broker compatibili kafka (ad esempio Hub eventi di Azure) per garantire che i commit di offset e gli aggiornamenti dell'archivio stati vengano scritti in modo atomico.

Per garantire garanzie di elaborazione transazionale, l'impostazione processing.guarantee nelle configurazioni Kafka Streams deve essere aggiornata dal valore predefinito di at_least_once a exactly_once_v2 (per le versioni client in o dopo Apache Kafka 2.5) o exactly_once (per le versioni client precedenti ad Apache Kafka 2.5.x).

Passaggi successivi

In questo articolo è stata fornita un'introduzione a Hub eventi per Kafka. Per altre informazioni, vedere Guida per sviluppatori Apache Kafka per Hub eventi di Azure.

Per un'esercitazione con istruzioni dettagliate per creare un hub eventi e accedervi tramite firma di accesso condiviso o OAuth, vedere Guida introduttiva: Flusso di dati con Hub eventi usando il protocollo Kafka.

Vedere anche gli esempi di OAuth in GitHub.