Usare Hub eventi di Azure da applicazioni Apache KafkaUse Azure Event Hubs from Apache Kafka applications

Hub eventi fornisce un endpoint compatibile con le API Apache Kafka® Producer e consumer che possono essere usate dalla maggior parte delle applicazioni client Apache Kafka esistenti in alternativa all'esecuzione di un cluster Apache Kafka.Event Hubs provides an endpoint compatible with the Apache Kafka® producer and consumer APIs that can be used by most existing Apache Kafka client applications as an alternative to running your own Apache Kafka cluster. Hub eventi supporta i client API Producer e consumer di Apache Kafka alla versione 1,0 e successive.Event Hubs supports Apache Kafka's producer and consumer APIs clients at version 1.0 and above.

Vantaggi di Hub eventi per KafkaWhat does Event Hubs for Kafka provide?

Hub eventi per Apache Kafka funzionalità offre un protocollo basato su Hub eventi di Azure, compatibile con il protocollo con Apache Kafka client compilati per Apache Kafka Server 1,0 e versioni successive e supporta sia per la lettura che per la scrittura in hub eventi, equivalenti a Apache Kafka argomenti.The Event Hubs for Apache Kafka feature provides a protocol head on top of Azure Event Hubs that is protocol compatible with Apache Kafka clients built for Apache Kafka server versions 1.0 and later and supports for both reading from and writing to Event Hubs, which are equivalent to Apache Kafka topics.

È spesso possibile usare l'endpoint Kafka di hub eventi dalle applicazioni senza modifiche al codice rispetto all'installazione di Kafka esistente e modificare solo la configurazione: aggiornare la stringa di connessione nelle configurazioni in modo che punti all'endpoint Kafka esposto dall'hub eventi anziché puntare al cluster Kafka.You can often use the Event Hubs Kafka endpoint from your applications without code changes compared to your existing Kafka setup and only modify the configuration: Update the connection string in configurations to point to the Kafka endpoint exposed by your event hub instead of pointing to your Kafka cluster. È quindi possibile iniziare a trasmettere gli eventi dalle applicazioni che usano il protocollo Kafka negli Hub eventi.Then, you can start streaming events from your applications that use the Kafka protocol into Event Hubs.

Dal punto di vista concettuale, Kafka e hub eventi sono molto simili: si tratta di log partizionati compilati per il flusso dei dati, in base ai quali il client controlla quale parte del log mantenuto desidera leggere.Conceptually, Kafka and Event Hubs are very similar: they're both partitioned logs built for streaming data, whereby the client controls which part of the retained log it wants to read. Nella tabella seguente vengono associati i concetti tra Kafka e Hub eventi.The following table maps concepts between Kafka and Event Hubs.

Associazione di concetti tra Kafka e Hub eventiKafka and Event Hub conceptual mapping

Concetto di KafkaKafka Concept Concetto di Hub eventiEvent Hubs Concept
ClusterCluster Spazio dei nomiNamespace
ArgomentoTopic Hub eventiEvent Hub
PartitionPartition PartitionPartition
Gruppo di consumerConsumer Group Gruppo di consumerConsumer Group
OffsetOffset OffsetOffset

Differenze principali tra Apache Kafka e hub eventiKey differences between Apache Kafka and Event Hubs

Sebbene Apache Kafka sia un software che in genere è necessario installare e usare, Hub eventi è un servizio nativo completamente gestito.While Apache Kafka is software you typically need to install and operate, Event Hubs is a fully managed, cloud-native service. Nessun server, disco o rete da gestire e monitorare e nessun broker da prendere in considerazione o configurare.There are no servers, disks, or networks to manage and monitor and no brokers to consider or configure, ever. Si crea uno spazio dei nomi, ovvero un endpoint con un nome di dominio completo, e quindi si creano Hub eventi (argomenti) all'interno di tale spazio dei nomi.You create a namespace, which is an endpoint with a fully qualified domain name, and then you create Event Hubs (topics) within that namespace.

Per altre informazioni su Hub eventi e sugli spazi dei nomi, vedere Funzionalità di Hub eventi?.For more information about Event Hubs and namespaces, see Event Hubs features. 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.As a cloud service, Event Hubs uses a single stable virtual IP address as the endpoint, so clients don't need to know about the brokers or machines within a cluster. Anche se Hub eventi implementa lo stesso protocollo, questa differenza significa che tutto il traffico Kafka per tutte le partizioni viene indirizzato in modo prevedibile tramite questo endpoint anziché richiedere l'accesso al firewall per tutti i broker di un cluster.Even though Event Hubs implements the same protocol, this difference means that all Kafka traffic for all partitions is predictably routed through this one endpoint rather than requiring firewall access for all brokers of a cluster.

La scalabilità negli hub eventi è controllata dal numero di unità di velocità effettiva acquistate, con ogni unità di velocità effettiva che prevede un massimo di 1 megabyte al secondo o 1000 di eventi al secondo in ingresso e il doppio del volume in uscita.Scale in Event Hubs is controlled by how many throughput units you purchase, with each throughput unit entitling you to 1 Megabyte per second, or 1000 events per second of ingress and twice that volume in egress. Hub eventi può scalare automaticamente le unità di velocità effettiva quando si raggiunge il limite di velocità effettiva se si usa la funzionalità di aumento automatico ; Questa funzionalità funziona anche con il supporto del protocollo Apache Kafka.Event Hubs can automatically scale up throughput units when you reach the throughput limit if you use the Auto-Inflate feature; this feature work also works with the Apache Kafka protocol support.

Apache Kafka la soluzione più adatta per il carico di lavoro?Is Apache Kafka the right solution for your workload?

Dalla creazione di applicazioni con Apache Kafka, sarà utile comprendere anche che hub eventi di Azure fa parte di una flotta di servizi che include anche il bus di servizio di Azuree griglia di eventi di Azure.Coming from building applications using Apache Kafka, it will also useful to understand that Azure Event Hubs is part of a fleet of services which also includes Azure Service Bus, and Azure Event Grid.

Anche se alcuni provider di distribuzioni commerciali di Apache Kafka possono suggerire che Apache Kafka è un punto di distribuzione unico per tutte le esigenze della piattaforma di messaggistica, la realtà è che Apache Kafka non implementa, ad esempio, il modello di coda del consumer in competizione , non dispone del supporto per la pubblicazione-sottoscrizione a un livello che consente ai sottoscrittori di accedere ai messaggi in arrivo in base a regole valutate dal server diverse da offset semplici e non dispone di alcuna funzionalità per tenere traccia del ciclo di vita di un processo avviato da un messaggio o emarginarla messaggi errati in una coda di messaggi non recapitabili, tutti fondamentali per molti scenari di messaggistica aziendaliWhile some providers of commercial distributions of Apache Kafka might suggest that Apache Kafka is a one-stop-shop for all your messaging platform needs, the reality is that Apache Kafka does not implement, for instance, the competing-consumer queue pattern, does not have support for publish-subscribe at a level that allows subscribers access to the incoming messages based on server-evaluated rules other than plain offsets, and it has no facilities to track the lifecycle of a job initiated by a message or sidelining faulty messages into a dead-letter queue, all of which are foundational for many enterprise messaging scenarios.

Per comprendere le differenze tra i modelli e il modello più adatto al servizio, vedere le opzioni di messaggistica asincrona in Azure .To understand the differences between patterns and which pattern is best covered by which service, please review the Asynchronous messaging options in Azure guidance. Gli utenti Apache Kafka possono scoprire che i percorsi di comunicazione finora realizzati con Kafka possono essere realizzati con una complessità molto meno semplice e con funzionalità ancora più potenti tramite griglia di eventi o bus di servizio.As an Apache Kafka user, you may find that communication paths you have so far realized with Kafka, can be realized with far less basic complexity and yet more powerful capabilities using either Event Grid or Service Bus.

Se sono necessarie funzionalità specifiche di Apache Kafka che non sono disponibili tramite hub eventi per Apache Kafka interfaccia o se il modello di implementazione supera le quote di hub eventi, è anche possibile eseguire un cluster Apache Kafka nativo in Azure HDInsight.If you need specific features of Apache Kafka that are not available through the Event Hubs for Apache Kafka interface or if your implementation pattern exceeds the Event Hubs quotas, you can also run a native Apache Kafka cluster in Azure HDInsight.

Sicurezza e autenticazioneSecurity and authentication

Ogni volta che si pubblicano o si utilizzano eventi da un hub eventi per Kafka, il client sta tentando di accedere alle risorse di hub eventi.Every time you publish or consume events from an Event Hubs for Kafka, your client is trying to access the Event Hubs resources. Si desidera assicurarsi che l'accesso alle risorse avvenga tramite un'entità autorizzata.You want to ensure that the resources are accessed using an authorized entity. Quando si usa Apache Kafka protocollo con i client, è possibile impostare la configurazione per l'autenticazione e la crittografia usando i meccanismi SASL.When using Apache Kafka protocol with your clients, you can set your configuration for authentication and encryption using the SASL mechanisms. Quando si usa hub eventi per Kafka, è necessaria la crittografia TLS (poiché tutti i dati in transito con hub eventi sono crittografati con TLS).When using Event Hubs for Kafka requires the TLS-encryption (as all data in transit with Event Hubs is TLS encrypted). È possibile eseguire questa operazione specificando l'opzione SASL_SSL nel file di configurazione.It can be done specifying the SASL_SSL option in your configuration file.

Hub eventi di Azure offre più opzioni per autorizzare l'accesso alle risorse protette.Azure Event Hubs provides multiple options to authorize access to your secure resources.

  • OAuth 2.0OAuth 2.0
  • Firma di accesso condivisoShared access signature (SAS)

OAuth 2.0OAuth 2.0

Hub eventi si integra con Azure Active Directory (Azure AD), che fornisce un server di autorizzazione centralizzato compatibile con OAuth 2,0 .Event Hubs integrates with Azure Active Directory (Azure AD), which provides an OAuth 2.0 compliant centralized authorization server. Con Azure AD, è possibile usare il controllo degli accessi in base al ruolo di Azure (RBAC di Azure) per concedere le autorizzazioni con granularità fine alle identità dei client.With Azure AD, you can use Azure role-based access control (Azure RBAC) to grant fine grained permissions to your client identities. È possibile usare questa funzionalità con i client Kafka specificando SASL_SSL per il protocollo e OAUTHBEARER per il meccanismo.You can use this feature with your Kafka clients by specifying SASL_SSL for the protocol and OAUTHBEARER for the mechanism. Per informazioni dettagliate sui ruoli e sui livelli di Azure per l'accesso con ambito, vedere autorizzare l'accesso con Azure ad.For details about Azure roles and levels for scoping access, see Authorize access with 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 condivisoShared Access Signature (SAS)

Hub eventi fornisce anche le firme di accesso condiviso (SAS) per l'accesso delegato a hub eventi per le risorse Kafka.Event Hubs also provides the Shared Access Signatures (SAS) for delegated access to Event Hubs for Kafka resources. 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.Authorizing access using OAuth 2.0 token-based mechanism provides superior security and ease of use over SAS. I ruoli predefiniti possono anche eliminare la necessità di autorizzazione basata su ACL, che deve essere gestita e gestita dall'utente.The built-in roles can also eliminate the need for ACL-based authorization, which has to be maintained and managed by the user. È possibile usare questa funzionalità con i client Kafka specificando SASL_SSL per il protocollo e il normale meccanismo.You can use this feature with your Kafka clients by specifying SASL_SSL for the protocol and PLAIN for the mechanism.

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.Replace {YOUR.EVENTHUBS.CONNECTION.STRING} with the connection string for your Event Hubs namespace. Per istruzioni su come ottenere la stringa di connessione, vedere Ottenere una stringa di connessione ad Hub eventi.For instructions on getting the connection string, see Get an Event Hubs connection string. 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";Here's an example configuration: 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 client Kafka, le connessioni stabilite non vengono disconnesse quando viene rigenerata la chiave SAS.When using SAS authentication with Kafka clients, established connections aren't disconnected when the SAS key is regenerated.

EsempiSamples

Per un' esercitazione con istruzioni dettagliate per creare un hub eventi e accedervi usando SAS o OAuth, vedere Guida introduttiva: flusso di dati con hub eventi usando il protocollo Kafka.For a tutorial with step-by-step instructions to create an event hub and access it using SAS or OAuth, see Quickstart: Data streaming with Event Hubs using the Kafka protocol.

Per altri esempi che illustrano come usare OAuth con hub eventi per Kafka, vedere gli esempi su GitHub.For more samples that show how to use OAuth with Event Hubs for Kafka, see samples on GitHub.

Altre funzionalità di hub eventiOther Event Hubs features

Hub eventi per Apache Kafka funzionalità è uno dei tre protocolli disponibili simultaneamente negli hub eventi di Azure, che integrano HTTP e AMQP.The Event Hubs for Apache Kafka feature is one of three protocols concurrently available on Azure Event Hubs, complementing HTTP and AMQP. È possibile scrivere con uno di questi protocolli e leggere con qualsiasi altro, in modo che i produttori di Apache Kafka correnti possano continuare la pubblicazione 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.You can write with any of these protocols and read with any another, so that your current Apache Kafka producers can continue publishing via Apache Kafka, but your reader can benefit from the the native integration with Event Hubs' AMQP interface, such as Azure Stream Analytics or Azure Functions. In modo inverso, è possibile integrare facilmente Hub eventi di Azure in reti di routing AMQP come endpoint di destinazione e leggere i dati anche attraverso Apache Kafka integrazioni.Reversely, you can readily integrate Azure Event Hubs into AMQP routing networks as an target endpoint, and yet read data through Apache Kafka integrations.

Inoltre, funzionalità di hub eventi come l' acquisizione, che consente l'archiviazione a lungo termine estremamente conveniente tramite l'archiviazione BLOB di Azure e Azure Data Lake storage e il ripristino di emergenza geografico funziona anche con la funzionalità Hub eventi per Kafka.Additionally, Event Hubs features such as Capture, which enables extremely cost efficient long term archival via Azure Blob Storage and Azure Data Lake Storage, and Geo Disaster-Recovery also work with the Event Hubs for Kafka feature.

Differenze tra le funzionalità Apache KafkaApache Kafka feature differences

L'obiettivo degli hub eventi per Apache Kafka è fornire l'accesso alle funzionalità dell'hub eventi di Azure alle applicazioni bloccate nell'API Apache Kafka e che altrimenti avrebbero dovuto essere supportate da un cluster Apache Kafka.The goal of Event Hubs for Apache Kafka is to provide access to Azure Event Hub's capabilities to applications that are locked into the Apache Kafka API and would otherwise have to be backed by an Apache Kafka cluster.

Come spiegato in precedenza, la flotta di messaggistica di Azure fornisce una copertura avanzata e affidabile per molti scenari di messaggistica e anche se le funzionalità seguenti non sono attualmente supportate dal supporto di hub eventi per l'API Apache Kafka, è possibile evidenziare dove e come è disponibile la funzionalità desiderata.As explained above, the Azure Messaging fleet provides rich and robust coverage for a multitude of messaging scenarios, and although the following features are not currently supported through Event Hubs' support for the Apache Kafka API, we point out where and how the desired capability is available.

TransazioniTransactions

Il bus di servizio di Azure offre un solido supporto delle 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 nella protezione della coerenza di una transazione.Azure Service Bus has robust transaction support that allows receiving and settling messages and sessions while sending outbound messages resulting from message processing to multiple target entities under the consistency protection of a transaction. Il set di funzionalità non solo consente l'elaborazione esatta di ogni messaggio in una sequenza, ma evita anche il rischio che un altro consumer rielabori inavvertitamente gli stessi messaggi in modo analogo a quanto accade con Apache Kafka.The feature set not only allows for exactly-once processing of each message in a sequence, but also avoids the risk of another consumer inadvertently reprocessing the same messages as it would be the case with Apache Kafka. Il bus di servizio è il servizio consigliato per i carichi di lavoro dei messaggi transazionali.Service Bus is the recommended service for transactional message workloads.

CompressioneCompression

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.The client-side compression feature of Apache Kafka compresses a batch of multiple messages into a single message on the producer side and decompresses the batch on the consumer side. Il broker Apache Kafka considera il batch come un messaggio speciale.The Apache Kafka broker treats the batch as a special message.

Questa funzionalità è fondamentalmente in contrasto con il modello a più protocolli di hub eventi di Azure, che consente di recuperare singolarmente i messaggi, anche quelli inviati in batch, dal broker e tramite qualsiasi protocollo.This feature is fundamentally at odds with Azure Event Hubs' multi-protocol model, which allows for messages, even those sent in batches, to be individually retrievable from the broker and through any protocol.

Il payload di qualsiasi evento di hub eventi è un flusso di byte e il contenuto può essere compresso con un algoritmo di propria scelta.The payload of any Event Hub event is a byte stream and the content can be compressed with an algorithm of your choosing. Il formato di codifica Apache avro supporta la compressione in modo nativo.The Apache Avro encoding format supports compression natively.

Compattazione logLog Compaction

Apache Kafka compressione dei log è una funzionalità che consente di rimuovere tutti i record, tranne l'ultimo, di ogni chiave da una partizione, in modo da trasformare un argomento di Apache Kafka in un archivio chiave-valore in cui l'ultimo valore aggiunto sostituisce quello precedente.Apache Kafka log compaction is a feature that allows evicting all but the last record of each key from a partition, which effectively turns an Apache Kafka topic into a key-value store where the last value added overrides the previous one. Questa funzionalità non è attualmente implementata da Hub eventi di Azure.This feature is presently not implemented by Azure Event Hubs. Il modello di archivio chiave-valore, anche con aggiornamenti frequenti, è molto meglio supportato dai servizi di database come Azure Cosmos DB.The key-value store pattern, even with frequent updates, is far better supported by database services like Azure Cosmos DB. Per altri dettagli, vedere l'argomento relativo alla proiezione dei log nella Guida alla Federazione di hub eventi.Please refer to the Log Projection topic in the Event Hubs federation guidance for more details.

Kafka StreamsKafka Streams

Kafka Streams è una libreria client per l'analisi di flusso che fa parte del progetto open source Apache Kafka, ma è separata da Apache Kafka broker di flussi di eventi.Kafka Streams is a client library for stream analytics that is part of the Apache Kafka open source project, but is separate from the Apache Kafka event stream broker.

Il motivo più comune per cui i clienti di hub eventi di Azure chiedono il supporto dei flussi Kafka è il fatto che sono interessati al prodotto "ksqlDB" di Confluent.The most common reason Azure Event Hubs customers ask for Kafka Streams support is because they are interested in Confluent's "ksqlDB" product. "ksqlDB" è un progetto di origine condiviso proprietario, concesso in licenza , in modo che nessun fornitore "offra il software come servizio, una piattaforma distribuita come servizio, un'infrastruttura distribuita come servizio o un altro servizi online simile che compete ai prodotti o ai servizi confluenti" sia autorizzato a usare o a offrire il supporto "ksqlDB"."ksqlDB" is a proprietary shared source project that is licensed such that no vendor "offering software-as-a-service, platform-as-a-service, infrastructure-as-a-service or other similar online services that competes with Confluent products or services" is permitted to use or offer "ksqlDB" support. In pratica, se si usa ksqlDB, è necessario usare Kafka autonomamente oppure è necessario usare le offerte cloud di Confluent.Practically, if you use ksqlDB, you must either operate Kafka yourself or you must use Confluent’s cloud offerings. Le condizioni di licenza possono anche influenzare i clienti di Azure che offrono servizi per uno scopo escluso dalla licenza.The licensing terms might also affect Azure customers who offer services for a purpose excluded by the license.

Autonomo e senza ksqlDB, i flussi Kafka hanno meno funzionalità rispetto a molti Framework e servizi alternativi, la maggior parte dei quali hanno interfacce SQL di streaming predefinite e che si integrano oggi con hub eventi di Azure:Standalone and without ksqlDB, Kafka Streams has fewer capabilities than many alternative frameworks and services, most of which have built-in streaming SQL interfaces, and all of which integrate with Azure Event Hubs today:

I servizi e i Framework elencati possono in genere acquisire i flussi di eventi e i dati di riferimento direttamente da un set di origini diversificato tramite gli adapter.The listed services and frameworks can generally acquire event streams and reference data directly from a diverse set of sources through adapters. I flussi Kafka possono solo acquisire dati da Apache Kafka e i progetti di analisi sono quindi bloccati in Apache Kafka.Kafka Streams can only acquire data from Apache Kafka and your analytics projects are therefore locked into Apache Kafka. Per usare i dati di altre origini, è necessario innanzitutto importare i dati in Apache Kafka con il Framework di Kafka Connect.To use data from other sources, you are required to first import data into Apache Kafka with the Kafka Connect framework.

Se è necessario usare il Framework dei flussi Kafka in Azure, Apache Kafka in HDInsight fornirà questa opzione.If you must use the Kafka Streams framework on Azure, Apache Kafka on HDInsight will provide you with that option. Apache Kafka su HDInsight fornisce il controllo completo su tutti gli aspetti di configurazione di Apache Kafka, integrandosi completamente con diversi aspetti della piattaforma Azure, dal posizionamento del dominio di aggiornamento o di errore all'isolamento della rete per il monitoraggio dell'integrazione.Apache Kafka on HDInsight provides full control over all configuration aspects of Apache Kafka, while being fully integrated with various aspects of the Azure platform, from fault/update domain placement to network isolation to monitoring integration.

Passaggi successiviNext steps

In questo articolo è stata fornita un'introduzione a Hub eventi per Kafka.This article provided an introduction to Event Hubs for Kafka. Per altre informazioni, vedere Guida per sviluppatori Apache Kafka per Hub eventi di Azure.To learn more, see Apache Kafka developer guide for Azure Event Hubs.