Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce informazioni dettagliate su come usare la libreria client di 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 numerose 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 invece che sul timestamp di aggiunta |
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. | È in linea con le specifiche 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 funzionalità sarà supportata in GA |
Altre considerazioni
Ecco alcune delle altre considerazioni da tenere presenti.
- Per poter creare argomenti temporanei per l'elaborazione dei flussi, è necessario concedere alle applicazioni client di Kafka Stream le autorizzazioni di gestione, lettura e scrittura per tutti gli spazi dei nomi.
- Gli argomenti temporanei e le partizioni vengono conteggiati nella quota dello spazio dei nomi specificato. Devono essere tenuti in considerazione durante la configurazione dello spazio dei nomi o del cluster.
- Il tempo di conservazione infinito per il punto vendita "Offset" è limitato dal tempo massimo di conservazione dei messaggi dell'unità di stoccaggio (SKU). Controllare Event Hubs Quotas per questi valori specifici del livello.
Essi includono l'aggiornamento della configurazione dell'argomento nel messageTimestampType per utilizzare il CreateTime (ovvero, l'ora di creazione dell'evento) anziché il AppendTime (ovvero, l'ora di aggiunta del registro).
Per eseguire l'override del comportamento predefinito (obbligatorio), è necessario impostare l'impostazione seguente in Azure Resource Manager (ARM).
Nota
Solo le parti specifiche del modello ARM sono visualizzate 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 di Kafka per aiutare gli sviluppatori a iniziare più rapidamente con gli scenari di streaming in tempo reale. 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 sequenza 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 DSL di Kafka Streams o con l'API Processor 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 lo estende ulteriormente e introduce una dualità tra flussi e tavole, 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 di operatori giornalieri (modellate come flusso) con l'ultimo feed di dati di mercato (modellato come flusso).
Tempo
Kafka Streams consente l'uso delle funzioni di windowing e tolleranza per gestire i record di dati fuori sequenza, che possono ancora essere inclusi nell'elaborazione. Per garantire che questo comportamento sia deterministico, ci sono più nozioni di tempo nei flussi di Kafka. Includono:
- Ora di creazione (nota anche come "Ora dell'evento"): è l'ora in cui si è verificato l'evento ed è stato creato il record di dati.
- Tempo di processamento: è il momento in cui il record di dati viene elaborato dall'applicazione di gestione flussi (o quando viene consumato).
- Tempo di aggiunta (noto anche come "Creation time"): è il momento in cui i dati vengono archiviati e confermati nello storage del broker Kafka. Si differenzia dall'ora di creazione a causa dello scarto temporale tra la creazione dell'evento e l'effettivo inserimento 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:
- Aggregare
- Unione
- Windowing (nell'ambito delle aggregazioni e dei join)
- Applicazione di processori e trasformatori personalizzati, che possono mantenere lo stato, per l'integrazione dell'API di Processor
Finestra e grazia
Le operazioni di windowing nel DSL di 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 essere processato in una determinata finestra temporale, che giunge dopo tale finestra 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 di windowing e periodo di tolleranza per migliorare la tolleranza agli errore per i record fuori sequenza. 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 interagiscono con le transazioni Kafka per garantire garanzie di elaborazione transazionale integrandosi con il sistema di archiviazione sottostante dei broker compatibili con 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 Event Hubs per Kafka. Per altre informazioni, vedere Guida per sviluppatori Apache Kafka per Hub eventi di Azure.
Per un'esercitazione con istruzioni passo-passo per creare un hub eventi e accedervi tramite firma di accesso condiviso (SAS) o OAuth, vedere Guida introduttiva: Flusso di dati con Hub eventi usando il protocollo Kafka.
Vedere anche gli esempi di OAuth in GitHub.