Condividi tramite


Informazioni su Hub eventi di Azure per Apache Kafka

Questo articolo illustra come usare Hub eventi di Azure per trasmettere dati da applicazioni Apache Kafka senza configurare un cluster Kafka autonomamente.

Nota

Questa funzionalità è supportata solo nei livelli standard, premium e dedicati.

Panoramica

Hub eventi di Azure fornisce un endpoint Apache Kafka in un hub eventi, che consente agli utenti di connettersi all'hub eventi usando il protocollo Kafka. È spesso possibile usare l'endpoint Kafka di un hub eventi dalle applicazioni senza apportare modifiche al codice. È necessario solamente modificare la configurazione, ossia aggiornare la stringa di connessione nelle configurazioni in modo che punti all'endpoint di Kafka esposto dall'hub eventi invece di puntare al cluster Kafka. È quindi possibile iniziare a trasmettere gli eventi dalle applicazioni che usano il protocollo Kafka negli Hub eventi, equivalenti agli argomenti Kafka.

Nota

Gli Hub eventi per l'ecosistema Kafka supportano Apache Kafka versione 1.0. e successive.

Mapping concettuale di Apache Kafka e Hub eventi di Azure

Concettualmente, Kafka e Hub eventi sono molto simili. Sono entrambi log partizionati creati per i dati di streaming, in cui il client controlla quale parte del log conservato vuole leggere. Nella tabella seguente vengono associati i concetti tra Kafka e Hub eventi.

Concetto di Kafka Concetto di Hub eventi
Cluster Spazio dei nomi
Argomento Un hub eventi
Partizione Partizione
Gruppo di consumer Gruppo di consumer
Contropartita Contropartita

Funzionalità di Apache Kafka supportate in Hub eventi di Azure

Compressione

La funzionalità di compressione lato client nei client Apache Kafka consente di risparmiare risorse di calcolo e larghezza di banda comprimendo un batch di più messaggi in un singolo messaggio sul lato producer e decomprimendo il batch sul lato consumer. Il broker Apache Kafka considera il batch come messaggio speciale.

Gli sviluppatori di applicazioni producer Kafka possono abilitare la compressione dei messaggi impostando la proprietà compression.type. Hub eventi di Azure supporta attualmente la compressione gzip.

Differenze principali tra Apache Kafka e Hub eventi di Azure

Anche se Apache Kafka è un software che in genere è necessario installare e gestire, Hub eventi è un servizio nativo del cloud completamente gestito. Non ci sono server, dischi o reti da gestire e monitorare e nessun broker da considerare o configurare. Si crea uno spazio dei nomi, ovvero un endpoint con un nome di dominio completo, quindi si creano hub eventi (argomenti) all'interno di tale spazio dei nomi.

Per altre informazioni su Hub eventi e sugli spazi dei nomi, vedere Funzionalità di Hub eventi?. In quanto servizio cloud, Hub eventi usa un singolo indirizzo IP virtuale stabile come endpoint, in modo che i client non debbano necessariamente disporre di informazioni sui broker o sui computer all'interno di un cluster. Anche se Hub eventi implementa lo stesso protocollo, questa differenza significa che tutto il traffico Kafka per tutte le partizioni viene instradato in modo prevedibile attraverso questo endpoint anziché richiedere l'accesso firewall per tutti i broker di un cluster.

La scalabilità in Hub eventi è controllata dal numero di unità di velocità effettiva (TU) o unità di elaborazione acquistate. Se si abilita la funzionalità di Aumento automatico per uno spazio dei nomi di livello standard, Hub eventi aumenta automaticamente le unità elaborate quando si raggiunge il limite di velocità effettiva. Questa funzionalità opera anche con il supporto del protocollo Apache Kafka. Per uno spazio dei nomi di livello Premium, è possibile aumentare il numero di unità di elaborazione assegnate allo spazio dei nomi.

Apache Kafka è la soluzione più adatta per il carico di lavoro?

Partendo dalla creazione di applicazioni con Apache Kafka, è utile anche comprendere che Hub eventi di Azure fa parte di una flotta di servizi, che include anche Bus di servizio di Azuree Griglia di eventi di Azure.

Anche se alcuni provider di distribuzioni commerciali di Apache Kafka potrebbero far pensare che Apache Kafka sia ottimale per tutte le esigenze della piattaforma di messaggistica, la realtà è che Apache Kafka non implementa, ad esempio, il modello di coda consumer concorrente, non ha supporto per pubblicazione e sottoscrizione a un livello che consenta ai sottoscrittori di accedere ai messaggi in ingresso in base a regole valutate dal server che siano diverse da offset semplici e, inoltre, non dispone di strutture per tenere traccia del ciclo di vita di un processo avviato da un messaggio o per effettuare il sidelining di messaggi difettosi in una coda di messaggi non recapitabili, tutti fondamentali per molti scenari di messaggistica aziendale.

Per comprendere le differenze tra i modelli e quale modello è meglio coperto da quale servizio, vedere le indicazioni sulle Opzioni di messaggistica asincrona in Azure. In qualità di utente Apache Kafka, si può riscontrare che i percorsi di comunicazione finora realizzati con Kafka possono essere realizzati con complessità di base molto inferiore e con funzionalità ancora più potenti usando Griglia di eventi o il bus di servizio.

Se sono necessarie funzionalità specifiche di Apache Kafka non disponibili tramite l'interfaccia di Hub eventi per Apache Kafka o se il modello di implementazione supera le quote di Hub eventi, è anche possibile eseguire un cluster Apache Kafka nativo in Azure HDInsight.

Sicurezza e autenticazione

Ogni volta che si pubblicano o si utilizzano eventi da un hub event per Kafka, il client tenta di accedere alle risorse di Hub eventi. Ci si vuole assicurare che le risorse siano accessibili usando un'entità autorizzata. Quando si usa il protocollo Apache Kafka con i client, è possibile impostare la configurazione per l'autenticazione e la crittografia usando i meccanismi SASL. Quando si usa Hub eventi per Kafka è richiesta la crittografia TLS (poiché tutti i dati in transito con Hub eventi sono crittografati con TLS) ed è possibile specificare l'opzione SASL_SSL nel file di configurazione.

Hub eventi di Azure offre più opzioni per autorizzare l'accesso alle risorse sicure.

  • OAuth 2.0
  • Firma di accesso condiviso (SAS)

OAuth 2.0

Hub eventi si integra con Microsoft Entra ID, che fornisce un server di autorizzazione centralizzato conforme a OAuth 2.0. Con Microsoft Entra ID è possibile usare il controllo degli accessi in base al ruolo di Azure per concedere autorizzazioni granulari alle identità client. È possibile usare questa funzionalità con i client Kafka specificando SASL_SSL per il protocollo e OAUTHBEARER per il meccanismo. Per informazioni dettagliate sui ruoli e i livelli di Azure per l'ambito dell'accesso, vedere Autorizzare l'accesso con Microsoft Entra ID.

bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
sasl.login.callback.handler.class=CustomAuthenticateCallbackHandler

Nota

Le proprietà di configurazione precedenti si applicano al linguaggio di programmazione Java. Per esempi che illustrano come usare OAuth con Hub eventi per Kafka usando linguaggi di programmazione diversi, vedere esempi in GitHub.

Firma di accesso condiviso

Hub eventi fornisce anche le firme di accesso condiviso (SAS) per l'accesso delegato a Hub eventi per le risorse Kafka. L'autorizzazione dell'accesso tramite il meccanismo basato su token OAuth 2.0 offre sicurezza e facilità d'uso superiori rispetto alla firma di accesso condiviso. I ruoli predefiniti possono anche eliminare la necessità di autorizzazione basata su ACL, che deve essere mantenuta e gestita dall'utente. È possibile usare questa funzionalità con i client Kafka specificando SASL_SSL per il protocollo e PLAIN per il meccanismo.

bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";

Importante

Sostituire {YOUR.EVENTHUBS.CONNECTION.STRING} con la stringa di connessione per lo spazio dei nomi di Hub eventi. Per istruzioni su come ottenere la stringa di connessione, vedere Ottenere una stringa di connessione ad Hub eventi. Ecco un esempio di configurazione: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXX";

Nota

Quando si usa l'autenticazione di firma di accesso condiviso con i client Kafka, le connessioni stabilite non vengono disconnesse quando la chiave di firma di accesso condiviso viene rigenerata.

Nota

I token di firma di accesso condiviso generati non sono supportati quando si usa l'endpoint di Hub eventi per Apache Kafka.

Esempi

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.

Altre funzionalità di Hub eventi di Azure

La funzionalità Hub eventi per Apache Kafka è uno dei tre protocolli disponibili simultaneamente in Hub eventi di Azure, che integra HTTP e AMQP. È possibile scrivere con uno qualsiasi di questi protocolli e leggere con un altro protocollo, in modo che i producer Apache Kafka correnti possano continuare a pubblicare tramite Apache Kafka. Tuttavia, il lettore può trarre vantaggio dall'integrazione nativa con l'interfaccia AMQP di Hub eventi, ad esempio Analisi di flusso di Azure o Funzioni di Azure. Al contrario, è possibile integrare facilmente Hub eventi di Azure in reti di routing AMQP come endpoint di destinazione e leggere i dati tramite le integrazioni di Apache Kafka.

Inoltre, anche le funzionalità di Hub eventi, ad esempio Acquisisci, che consente un'archiviazione a lungo termine estremamente conveniente tramite Archiviazione BLOB di Azure e Azure Data Lake Storage, e Ripristino di emergenza geografico funzionano con Kafka.

Idempotenza

Hub eventi di Azure per Apache Kafka supporta sia i producer idempotenti che i consumer idempotenti.

Uno dei set principali di Hub eventi di Azure è il concetto di recapito almeno una volta. Questo approccio garantisce che gli eventi vengano sempre recapitati. Significa anche che gli eventi possono essere ricevuti più volte, anche ripetutamente, dai consumer, ad esempio una funzione. Per questo motivo, è importante che il consumer supporti il modello di consumer idempotente.

Differenze di funzionalità con Apache Kafka

L'obiettivo di Hub eventi per Apache Kafka è fornire l'accesso alle funzionalità di Hub eventi di Azure alle applicazioni bloccate nell'API Apache Kafka e che altrimenti dovrebbero essere supportate da un cluster Apache Kafka.

Come spiegato sopra, la flotta di messaggistica di Azure offre una copertura avanzata e affidabile per una vasta gamma di scenari di messaggistica e, anche se le funzionalità seguenti non sono attualmente supportate tramite il supporto di Hub eventi per l'API Apache Kafka, viene indicato dove e come è disponibile la funzionalità desiderata.

Transazioni

Il bus di servizio di Azure offre un solido supporto per le transazioni che consente la ricezione e la risoluzione di messaggi e sessioni durante l'invio di messaggi in uscita risultanti dall'elaborazione di messaggi a più entità di destinazione con la protezione della coerenza di una transazione. Il set di funzionalità non solo consente di elaborare esattamente una volta ogni messaggio in una sequenza, ma evita anche il rischio che un altro consumer rielabori inavvertitamente gli stessi messaggi come sarebbe il caso di Apache Kafka. Il bus di servizio è il servizio consigliato per i carichi di lavoro dei messaggi transazionali.

Kafka Streams

Kafka Streams è una libreria client per l'analisi di flusso che fa parte del progetto open source Apache Kafka, ma è separata dal broker eventi Apache Kafka.

Il motivo più comune per cui i clienti di Hub eventi di Azure chiedono il supporto di Kafka Streams è dovuto al fatto che sono interessati al prodotto "ksqlDB" di Confluent. "ksqlDB" è un progetto di origine condiviso proprietario concesso in licenza in modo che nessun fornitore "che offre software come servizio, piattaforma distribuita come servizio, infrastruttura distribuita come servizio o altri servizi online simili che competono con prodotti o servizi Confluent" possa usare o offrire supporto "ksqlDB". Praticamente, se si usa ksqlDB, è necessario operare manualmente Kafka oppure usare le offerte cloud di Confluent. Le condizioni di licenza possono influire anche sui clienti di Azure che offrono servizi per uno scopo escluso dalla licenza.

Autonomo e senza ksqlDB, Kafka Streams offre meno funzionalità rispetto a molti framework e servizi alternativi, la maggior parte dei quali dispone di interfacce SQL di streaming predefinite e tutte integrate con Hub eventi di Azure:

I servizi e i framework elencati possono in genere acquisire flussi di eventi e dati di riferimento direttamente da un set diversificato di origini tramite adattatori. Kafka Streams può acquisire dati solo da Apache Kafka e i progetti di analisi sono quindi bloccati in Apache Kafka. Per usare i dati di altre origini, è necessario prima importare dati in Apache Kafka con il framework Kafka Connect.

Se è necessario usare il framework Kafka Streams in Azure, Apache Kafka in HDInsight offre questa opzione. Apache Kafka in HDInsight offre il controllo completo su tutti gli aspetti di configurazione di Apache Kafka, pur essendo completamente integrato con vari aspetti della piattaforma Azure, dal posizionamento del dominio di errore/aggiornamento all'isolamento di rete fino al monitoraggio dell'integrazione.

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.