Che cos'è Hub eventi di Azure per Apache Kafka

Questo articolo illustra come usare Hub eventi di Azure per trasmettere dati dalle 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. È possibile modificare solo la configurazione, ovvero aggiornare il stringa di connessione nelle configurazioni in modo che punti all'endpoint Kafka esposto dall'hub eventi anziché puntare a un cluster Kafka. È quindi possibile avviare lo streaming di eventi dalle applicazioni che usano il protocollo Kafka in hub eventi, equivalenti agli argomenti Kafka.

Nota

Hub eventi per gli ecosistemi Kafka supporta 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

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 mai. 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?. Come servizio cloud, Hub eventi usa un singolo indirizzo IP virtuale stabile come endpoint, quindi i client non devono conoscere i broker o i 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à elaborate (UR) o unità di elaborazione acquistate. Se si abilita la funzionalità 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à funziona 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 che usano Apache Kafka, è utile anche comprendere che Hub eventi di Azure fa parte di una flotta di servizi, che include anche bus di servizio di Azure e Griglia di eventi di Azure.

Anche se alcuni provider di distribuzioni commerciali di Apache Kafka potrebbero suggerire che Apache Kafka è un negozio unico per tutte le esigenze della piattaforma di messaggistica, la realtà è che Apache Kafka non implementa, ad esempio, il modello di coda consumer concorrente, non dispone del supporto per la sottoscrizione di pubblicazione a un livello che consente ai sottoscrittori di accedere ai messaggi in ingresso in base a regole valutate dal server diverse da offset semplici, e non dispone di strutture per tenere traccia del ciclo di vita di un processo avviato da un messaggio o di 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 opzioni di messaggistica asincrona nelle linee guida di Azure . In qualità di utente Apache Kafka, è possibile scoprire che i percorsi di comunicazione finora realizzati con Kafka possono essere realizzati con complessità molto meno di base e funzionalità ancora più potenti usando Griglia di eventi o 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 usano eventi da un hub eventi per Kafka, il client sta provando ad accedere alle risorse di Hub eventi. Si vuole assicurarsi 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 richiede la crittografia TLS (poiché tutti i dati in transito con Hub eventi sono crittografati con TLS), è 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

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 sono per il 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 gestita 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 usando la firma di accesso condiviso o OAuth, vedere Guida introduttiva: Flusso di dati con Hub eventi con 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, completando HTTP e AMQP. È possibile scrivere con uno qualsiasi di questi protocolli e leggere con qualsiasi altro, in modo che i producer Apache Kafka correnti possano continuare a pubblicare tramite Apache Kafka, ma 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 nelle reti di routing AMQP come endpoint di destinazione e leggere i dati tramite le integrazioni di Apache Kafka.

Inoltre, Le funzionalità di Hub eventi, ad esempio Capture, consentono un'archiviazione a lungo termine estremamente conveniente tramite Archiviazione BLOB di Azure e Azure Data Lake Archiviazione e il ripristino di emergenza geografico funzionano anche con la funzionalità Hub eventi per Kafka.

Idempotenza

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

Uno dei principali set 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 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 devono essere supportate da un cluster Apache Kafka.

Come illustrato in precedenza, la flotta di messaggistica di Azure offre una copertura avanzata e affidabile per molti scenari di messaggistica e, sebbene le funzionalità seguenti non siano attualmente supportate tramite il supporto di Hub eventi per l'API Apache Kafka, viene indicato dove e come è disponibile la funzionalità desiderata.

Transazioni

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 derivanti dall'elaborazione dei 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. bus di servizio è il servizio consigliato per i carichi di lavoro dei messaggi transazionali.

Compressione

La funzionalità di compressione lato client di Apache Kafka comprime un batch di più messaggi in un singolo messaggio sul lato producer e decomprime 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. Nell'anteprima pubblica l'unico algoritmo di compressione supportato è gzip.

Compression.type = none | gzip

La funzionalità è attualmente supportata solo per il producer di traffico Apache Kafka e il traffico consumer. Il consumer AMQP può utilizzare il traffico Kafka compresso come messaggi decompressi. Il payload di qualsiasi evento di Hub eventi è un flusso di byte e il contenuto può essere compresso con un algoritmo scelto in anteprima pubblica, l'unica opzione è gzip. I vantaggi dell'uso della compressione Kafka sono costituiti da dimensioni dei messaggi più piccole, dimensioni del payload maggiori che è possibile trasmettere e ridurre il consumo di risorse di Message Broker.

Kafka Streams

Kafka Flussi è 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 Hub eventi di Azure i clienti chiedono supporto per Kafka Flussi è perché 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" può 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 Flussi offre meno funzionalità rispetto a molti framework e servizi alternativi, la maggior parte dei quali include interfacce SQL di streaming predefinite e tutte integrate con Hub eventi di Azure oggi:

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 Flussi 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 importare prima i dati in Apache Kafka con il framework di Connessione Kafka.

Se è necessario usare il framework di Flussi Kafka 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 usando la firma di accesso condiviso o OAuth, vedere Guida introduttiva: Flusso di dati con Hub eventi con il protocollo Kafka.

Vedere anche gli esempi di OAuth in GitHub.