Usare Hub eventi di Azure da applicazioni Apache Kafka

Hub eventi offre un endpoint compatibile con le API del producer e consumer Apache Kafka® che possono essere usate dalla maggior parte delle applicazioni client Apache Kafka esistenti come alternativa all'esecuzione del proprio cluster Apache Kafka. Hub eventi supporta i client producer e consumer di Apache Kafka nella versione 1.0 e successiva.

Vantaggi di Hub eventi per Kafka

La funzionalità Hub eventi per Apache Kafka offre un head del protocollo in cima a Hub eventi di Azure compatibile con i client Apache Kafka creati per apache Kafka versione 1.0 e versioni successive e supporta sia la lettura che la scrittura in Hub eventi, equivalenti agli argomenti apache Kafka.

È spesso possibile usare l'endpoint Kafka di Hub eventi dalle applicazioni senza modifiche di codice rispetto alla configurazione kafka esistente e modificare solo la configurazione: aggiornare la stringa di connessione nelle configurazioni per puntare all'endpoint Kafka esposto dall'hub eventi anziché puntare al cluster Kafka. È quindi possibile iniziare a trasmettere gli eventi dalle applicazioni che usano il protocollo Kafka negli Hub eventi.

Concettualmente, Kafka e Hub eventi sono molto simili: sono entrambi i log partizionati compilati 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.

Associazione di concetti tra Kafka e Hub eventi

Concetto di Kafka Concetto di Hub eventi
Cluster Spazio dei nomi
Argomento Hub eventi
Partition Partition
Gruppo di consumer Gruppo di consumer
Offset Offset

Differenze principali tra Apache Kafka e Hub eventi

Anche se Apache Kafka è software che in genere è necessario installare e gestire, Hub eventi è un servizio completamente gestito e nativo del cloud. Non sono presenti 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 è prevedibilmente instradato attraverso questo endpoint anziché richiedere l'accesso del firewall per tutti i broker di un cluster.

La scalabilità in Hub eventi è controllata dal numero di unità di velocità effettiva ounità di elaborazione acquistate. Se si abilita la funzionalità Di gonfiamento automatico per uno spazio dei nomi livello standard, Hub eventi aumenta automaticamente le UNITÀ 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 premier, è possibile aumentare il numero di unità di elaborazione assegnate allo spazio dei nomi.

Apache Kafka è la soluzione giusta per il carico di lavoro?

Provenienti 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 Azure e Griglia di eventi di Azure.

Anche se alcuni provider di distribuzioni commerciali di Apache Kafka potrebbero suggerire che Apache Kafka è un negozio uno-stop per tutte le esigenze della piattaforma di messaggistica, la realtà è che Apache Kafka non implementa, ad esempio, il modello di coda del 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 alle 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 inserire messaggi di errore in una coda di messaggi non recapitabili, tutti fondamentali per molti scenari di messaggistica aziendali.

Per comprendere le differenze tra i modelli e quale modello è meglio coperto dal servizio, vedere le opzioni di messaggistica asincrone nelle linee guida di Azure . Come utente Apache Kafka, è possibile trovare che i percorsi di comunicazione realizzati finora con Kafka, possono essere realizzati con una complessità molto meno semplice e ancora più potenti usando Griglia di eventi o bus di servizio.

Se sono necessarie funzionalità specifiche di Apache Kafka non disponibili tramite l'interfaccia 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 utilizzano eventi da un hub eventi per Kafka, il client sta tentando di 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 usano Hub eventi per Kafka, è necessaria la crittografia TLS (poiché tutti i dati in transito con Hub eventi sono crittografati da 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 Azure Active Directory (Azure AD), che fornisce un server di autorizzazione centralizzato conforme a OAuth 2.0. Con Azure AD è 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'accesso con l'ambito, vedere Autorizzare l'accesso con Azure AD.

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

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 una maggiore sicurezza e facilità d'uso tramite 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 sas 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 usano gli hub eventi per l'endpoint Apache Kafka.

Esempi

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

Per altri esempi che illustrano come usare OAuth con Hub eventi per Kafka, vedere esempi in GitHub.

Altre funzionalità di Hub eventi

La funzionalità Hub eventi per Apache Kafka è uno dei tre protocolli simultaneamente disponibili in Hub eventi di Azure, integrando HTTP e AMQP. È possibile scrivere con uno di questi protocolli e leggere con un altro, in modo che i produttori 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 Hub eventi di Azure in reti di routing AMQP come endpoint di destinazione e leggere i dati tramite le integrazioni di Apache Kafka.

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

Differenze di funzionalità di Apache Kafka

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

Come illustrato in precedenza, la flotta di messaggistica di Azure offre una copertura avanzata e affidabile per una moltitudine 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

bus di servizio di Azure ha un supporto affidabile per le transazioni che consente la ricezione e la risoluzione di messaggi e sessioni durante l'invio di messaggi risultanti dall'elaborazione dei messaggi a più entità di destinazione sotto 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 di un altro consumer inavvertitamente di rielaborare 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 decompresse il batch sul lato consumer. Il broker Apache Kafka considera il batch come un messaggio speciale.

Questa funzionalità è fondamentalmente in contrasto con il modello multi-protocollo di Hub eventi di Azure, che consente ai messaggi, anche quelli inviati in batch, di essere recuperabili singolarmente dal broker e tramite qualsiasi protocollo.

Il payload di qualsiasi evento di Hub eventi è un flusso di byte e il contenuto può essere compresso con un algoritmo di scelta. Il formato di codifica Apache Avro supporta la compressione in modo nativo.

Compattazione log

Apache Kafka log compaction è una funzionalità che consente di rimuovere tutto, ma l'ultimo record di ogni chiave da una partizione, che trasforma in modo efficace un argomento Apache Kafka in un archivio chiave-valore in cui l'ultimo valore aggiunto sostituisce quello precedente. Questa funzionalità non è attualmente implementata da Hub eventi di Azure. Il modello di archivio chiave-valore, anche con aggiornamenti frequenti, è molto meglio supportato dai servizi di database come Azure Cosmos DB. Per altre informazioni, vedere Proiezione log.

Kafka Streams

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

Il motivo più comune Hub eventi di Azure clienti chiedono il supporto di 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 "offre software-as-a-service, platform-as-a-service, infrastructure-as-a-service o altri Servizi online simili che competono con prodotti o servizi Confluent" è consentito l'uso o l'offerta di supporto "ksqlDB". Praticamente, se si usa ksqlDB, è necessario operare Kafka autonomamente o è necessario usare le offerte cloud di Confluent. Le condizioni di licenza potrebbero influire anche sui clienti di Azure che offrono servizi a scopo escluso dalla licenza.

Autonomo e senza ksqlDB, Kafka Flussi ha meno funzionalità di molti framework e servizi alternativi, la maggior parte dei quali ha interfacce di streaming SQL predefinite e tutte le quali si integrano con Hub eventi di Azure oggi:

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

Se è necessario usare il framework kafka Flussi in Azure, Apache Kafka in HDInsight offre tale opzione. Apache Kafka in HDInsight offre il controllo completo su tutti gli aspetti di configurazione di Apache Kafka, mentre è completamente integrato con vari aspetti della piattaforma Di Azure, dal posizionamento del dominio di errore/aggiornamento all'isolamento di rete all'integrazione del monitoraggio.

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.