Uso de Azure Event Hubs desde aplicaciones de Apache KafkaUse Azure Event Hubs from Apache Kafka applications

Event Hubs proporciona un punto de conexión compatible con las API de productor y consumidor de Apache Kafka® que pueden usar la mayoría de las aplicaciones cliente de Apache Kafka existentes como alternativa a la ejecución de su propio clúster de 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. Event Hubs admite clientes de API de productor y consumidor de Apache Kafka en la versión 1.0 y posteriores.Event Hubs supports Apache Kafka's producer and consumer APIs clients at version 1.0 and above.

¿Qué proporciona Event Hubs para Kafka?What does Event Hubs for Kafka provide?

La característica Event Hubs para Apache Kafka proporciona un protocolo principal sobre Azure Event Hubs que es compatible con los clientes de Apache Kafka creados para Apache Kafka 1.0 y versiones posteriores, y admite tanto la lectura como la escritura en Event Hubs, lo que es equivalente a los temas de Apache Kafka.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.

A menudo, puede utilizar el punto de conexión de Kafka para Event Hubs desde sus aplicaciones sin cambios en el código en comparación con la configuración de Kafka existente y modificar solo la configuración: Actualice la cadena de conexión en las configuraciones para que apunte al punto de conexión de Kafka que se expone en el evento, en lugar de apuntar al clúster de 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. A partir de ahí, puede empezar a hacer streaming de los eventos desde las aplicaciones que usen el protocolo Kafka en Event Hubs.Then, you can start streaming events from your applications that use the Kafka protocol into Event Hubs.

Conceptualmente, Kafka y Event Hubs son muy similares: son registros con particiones creados para la transmisión de datos, de modo que el cliente controla qué parte del registro retenido desea leer.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. En la tabla siguiente, se asignan conceptos entre Kafka y Event Hubs.The following table maps concepts between Kafka and Event Hubs.

Asignación conceptual de Kafka y Event HubsKafka and Event Hub conceptual mapping

Concepto de KafkaKafka Concept Concepto de Event HubsEvent Hubs Concept
ClústerCluster Espacio de nombresNamespace
TemaTopic Centro de eventosEvent Hub
PartitionPartition PartitionPartition
Grupo de consumidoresConsumer Group Grupo de consumidoresConsumer Group
OffsetOffset OffsetOffset

Diferencias principales entre Apache Kafka y Event HubsKey differences between Apache Kafka and Event Hubs

Apache Kafka es el software que normalmente necesita para instalar y trabajar, mientras que Event Hubs es un servicio nativo de la nube totalmente administrado.While Apache Kafka is software you typically need to install and operate, Event Hubs is a fully managed, cloud-native service. No hay ningún servidor, discos o red que administrar o supervisar ni ningún agente que configurar o tener en cuenta.There are no servers, disks, or networks to manage and monitor and no brokers to consider or configure, ever. Puede crear un espacio de nombres, que es un punto de conexión con un nombre de dominio completo y, a continuación, crear instancias de Event Hubs (temas) dentro de ese espacio de nombres.You create a namespace, which is an endpoint with a fully qualified domain name, and then you create Event Hubs (topics) within that namespace.

Para más información acerca de Event Hubs y de los espacios de nombres, consulte las características de Event Hubs.For more information about Event Hubs and namespaces, see Event Hubs features. Como servicio en la nube, Event Hubs usa una única dirección IP virtual estable como punto de conexión, de forma que los clientes no necesitan conocer los agentes o equipos de un clúster.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. Aunque Event Hubs implementa el mismo protocolo, esta diferencia significa que todo el tráfico de Kafka para todas las particiones se enruta de forma predecible a través de este punto de conexión, en lugar de requerir acceso de firewall para todos los agentes de un clúster.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 escala en Event Hubs se controla por el número de unidades de procesamiento que adquiere; cada unidad de procesamiento le otorga 1 MB por segundo o 1000 eventos por segundo de entrada y dos veces ese volumen en salidas.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. Event Hubs puede escalar verticalmente de forma automática las unidades de procesamiento cuando se alcanza el límite de procesamiento si usa la característica Inflado automático, que también funciona con la compatibilidad con protocolos de 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.

¿Es Apache Kafka la solución adecuada para su carga de trabajo?Is Apache Kafka the right solution for your workload?

Tras la creación de aplicaciones con Apache Kafka, resultará útil comprender que Azure Event Hubs forma parte de una flota de servicios que también incluye Azure Service Busy Azure Event Grid.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.

Aunque algunos proveedores de distribuciones comerciales de Apache Kafka pueden sugerir que Apache Kafka es un servicio integral para todas las necesidades de plataforma de mensajería, la realidad es que Apache Kafka no implementa, por ejemplo, el patrón de cola de consumidor en competencia, no ofrece compatibilidad con el patrón de publicación y suscripción a un nivel que permita a los suscriptores acceder a los mensajes entrantes en función de reglas evaluadas por el servidor que no sean simples desplazamientos, y no tiene instalaciones para realizar el seguimiento del ciclo de vida de un trabajo iniciado por un mensaje u omitir mensajes erróneos en una cola de mensajes fallidos; características que resultan básicas en muchos escenarios de mensajería empresarial.While 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.

Para comprender las diferencias entre los patrones y saber qué servicio es más adecuado para cada patrón, revise la guía Opciones de mensajería asincrónica en 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. Como usuario de Apache Kafka, es posible que descubra que las rutas de comunicación que ha realizado hasta la fecha con Kafka se pueden llevar a cabo con mucha menos complejidad básica y con funcionalidades más eficaces mediante Event Grid o Service Bus.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.

Si necesita características específicas de Apache Kafka que no están disponibles mediante la interfaz de Event Hubs para Apache Kafka o si su modelo de implementación supera las cuotas de Event Hubs, también puede ejecutar un clúster de Apache Kafka nativo en 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.

Seguridad y autenticaciónSecurity and authentication

Cada vez que se publican o consumen eventos de Event Hubs para Kafka, el cliente intenta acceder a los recursos de Event Hubs.Every time you publish or consume events from an Event Hubs for Kafka, your client is trying to access the Event Hubs resources. Quiere asegurarse de que se accede a los recursos mediante una entidad autorizada.You want to ensure that the resources are accessed using an authorized entity. Al usar el protocolo Apache Kafka con los clientes, puede establecer la configuración para la autenticación y el cifrado mediante los mecanismos de SASL.When using Apache Kafka protocol with your clients, you can set your configuration for authentication and encryption using the SASL mechanisms. El empleo de Event Hubs para Kafka exige cifrado TLS (ya que todos los datos en tránsito con Event Hubs están cifrados con TLS).When using Event Hubs for Kafka requires the TLS-encryption (as all data in transit with Event Hubs is TLS encrypted). Para ello, especifique la opción SASL_SSL en el archivo de configuración.It can be done specifying the SASL_SSL option in your configuration file.

Azure Event Hubs proporciona varias opciones para autorizar el acceso a los recursos protegidos.Azure Event Hubs provides multiple options to authorize access to your secure resources.

  • OAuth 2.0OAuth 2.0
  • Firma de acceso compartido (SAS)Shared access signature (SAS)

OAuth 2.0OAuth 2.0

Event Hubs se integra con Azure Active Directory (Azure AD), lo que proporciona un servidor de autorización centralizado compatible 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, puede usar el control de acceso basado en rol de Azure (RBAC de Azure) para aplicar personalización avanzada de permisos a las identidades de cliente.With Azure AD, you can use Azure role-based access control (Azure RBAC) to grant fine grained permissions to your client identities. Puede usar esta característica con los clientes de Kafka si especifica SASL_SSL para el protocolo y OAUTHBEARER para el mecanismo.You can use this feature with your Kafka clients by specifying SASL_SSL for the protocol and OAUTHBEARER for the mechanism. Para obtener detalles sobre los roles y los niveles de Azure para el control de acceso, consulte Autorización del acceso 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 de acceso compartido (SAS)Shared Access Signature (SAS)

Event Hubs también proporciona firmas de acceso compartido (SAS) para el acceso delegado a recursos de Event Hubs para Kafka.Event Hubs also provides the Shared Access Signatures (SAS) for delegated access to Event Hubs for Kafka resources. La autorización del acceso mediante el mecanismo basado en tokens de OAuth 2.0 proporciona una mayor seguridad y facilidad de uso que SAS.Authorizing access using OAuth 2.0 token-based mechanism provides superior security and ease of use over SAS. Los roles integrados también pueden eliminar la necesidad de autorización basada en ACL, que el usuario debe mantener y administrar.The built-in roles can also eliminate the need for ACL-based authorization, which has to be maintained and managed by the user. Puede usar esta característica con los clientes de Kafka si especifica SASL_SSL para el protocolo y PLAIN para el mecanismo.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

Reemplace {YOUR.EVENTHUBS.CONNECTION.STRING} por la cadena de conexión para el espacio de nombres de Event Hubs.Replace {YOUR.EVENTHUBS.CONNECTION.STRING} with the connection string for your Event Hubs namespace. Para obtener instrucciones sobre cómo obtener la cadena de conexión, consulte Obtención de la cadena de conexión de un centro de eventos.For instructions on getting the connection string, see Get an Event Hubs connection string. A continuación se muestra un ejemplo de configuración: 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

Al usar la autenticación de SAS con los clientes de Kafka, las conexiones establecidas no se desconectan cuando se vuelve a generar la clave SAS.When using SAS authentication with Kafka clients, established connections aren't disconnected when the SAS key is regenerated.

EjemplosSamples

Para leer un tutorial con instrucciones paso a paso para crear un centro de eventos y acceder a él mediante SAS u OAuth, consulte Inicio rápido: Streaming de datos con Event Hubs mediante el protocolo de 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.

Para obtener más ejemplos que muestran cómo usar OAuth con Event Hubs para Kafka, vea ejemplos en GitHub.For more samples that show how to use OAuth with Event Hubs for Kafka, see samples on GitHub.

Otras características de Event HubsOther Event Hubs features

La característica Event Hubs para Apache Kafka es uno de los tres protocolos disponibles simultáneamente en Azure Event Hubs, que complementa a HTTP y AMQP.The Event Hubs for Apache Kafka feature is one of three protocols concurrently available on Azure Event Hubs, complementing HTTP and AMQP. Puede escribir con cualquiera de estos protocolos y leer con los otros, de modo que los productores de Apache Kafka actuales pueden seguir publicando mediante Apache Kafka mientras el lector puede beneficiarse de la integración nativa con la interfaz AMPQ de Event Hubs, como Azure Stream Analytics o Azure Functions.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. A la inversa, puede integrar fácilmente Azure Event Hubs en redes de enrutamiento AMQP como punto de conexión de destino y, además, leer los datos mediante integraciones de Apache Kafka.Reversely, you can readily integrate Azure Event Hubs into AMQP routing networks as an target endpoint, and yet read data through Apache Kafka integrations.

Además, otras características de Event Hubs, como la Captura, que permite un almacenamiento de archivos a largo plazo extremadamente económico mediante Azure Blob Storage y Azure Data Lake Storage, y la Recuperación geográfica ante desastres también funcionan con la característica Event Hubs para 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.

Diferencias entre las características de Apache KafkaApache Kafka feature differences

El objetivo de Event Hubs para Apache Kafka es proporcionar acceso a las funcionalidades de Azure Event Hubs a las aplicaciones que están bloqueadas en la API de Apache Kafka y que, de lo contrario, tendrían que estar respaldadas por un clúster de 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.

Como se ha explicado anteriormente, la flota de Azure Messaging proporciona una cobertura enriquecida y sólida para una gran cantidad de escenarios de mensajería y, aunque las siguientes características no se admiten actualmente a través de la compatibilidad con Event Hubs para la API de Apache Kafka, se indica dónde y cómo está disponible la funcionalidad deseada.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.

TransaccionesTransactions

Azure Service Bus ofrece una sólida compatibilidad con transacciones que permite recibir y resolver mensajes y sesiones al enviar mensajes salientes resultantes del procesamiento de mensajes a varias entidades de destino bajo la protección de coherencia de una transacción.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. El conjunto de características no solo permite un procesamiento puntual de cada mensaje en una secuencia, sino que también evita el riesgo de que otro consumidor vuelva a procesar involuntariamente los mismos mensajes, como sería el caso 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. Service Bus es el servicio recomendado para las cargas de trabajo de mensajes transaccionales.Service Bus is the recommended service for transactional message workloads.

CompresiónCompression

La característica de compresión del lado cliente de Apache Kafka comprime un lote de varios mensajes en un único mensaje en el lado del productor y descomprime el lote en el lado del consumidor.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. El agente de Apache Kafka trata el lote como un mensaje especial.The Apache Kafka broker treats the batch as a special message.

Esta característica está esencialmente en conflicto con el modelo de múltiples protocolos de Azure Event Hubs, que permite que los mensajes, incluso los enviados por lotes, se puedan recuperar de forma individual desde el agente y a través de cualquier protocolo.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.

La carga de cualquier evento de Event Hubs es un flujo de bytes y el contenido se puede comprimir con el algoritmo que desee.The payload of any Event Hub event is a byte stream and the content can be compressed with an algorithm of your choosing. El formato de codificación de Apache Avro admite la compresión de forma nativa.The Apache Avro encoding format supports compression natively.

Compactación del registroLog Compaction

La compactación del registro de Apache Kafka es una característica que permite expulsar todos los registros salvo el último de cada clave de una partición, lo que convierte un tema de Apache Kafka en un almacén de pares clave-valor en el que el último valor agregado invalida el anterior.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. El patrón de almacenamiento de pares clave-valor, incluso con actualizaciones frecuentes, es mucho más compatible con los servicios de base de datos, como Azure Cosmos DB.The key-value store pattern, even with frequent updates, is far better supported by database services like Azure Cosmos DB.

La característica de compactación de registros se usa en los marcos de cliente de Kafka Connect y Kafka Streams.The log compaction feature is used by the Kafka Connect and Kafka Streams client frameworks.

Kafka StreamsKafka Streams

Kafka Streams es una biblioteca de cliente para análisis de flujos que forma parte del proyecto de código abierto de Apache Kafka, pero es independiente del agente de flujo de eventos de Apache Kafka.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.

La razón más habitual por la que los clientes de Azure Event Hubs solicitan la compatibilidad con Kafka Streams es su interés en el producto "ksqlDB" de 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" es un proyecto de código compartido patentado con licencia, de modo que ningún proveedor que "ofrezca software como servicio, plataforma como servicio, infraestructura como servicio u otros servicios en línea similares que compitan con productos o servicios de Confluent" tengan permiso para usar u ofrecer compatibilidad con "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. En la práctica, si usa ksqlDB, debe operar Kafka personalmente o bien utilizar las ofertas de la nube de Confluent.Practically, if you use ksqlDB, you must either operate Kafka yourself or you must use Confluent’s cloud offerings. Los términos de licencia también pueden afectar a los clientes de Azure que ofrecen servicios para un propósito excluido por la licencia.The licensing terms might also affect Azure customers who offer services for a purpose excluded by the license.

Kafka Streams, de forma independiente y sin ksqlDB, tiene menos funcionalidades que muchos marcos y servicios alternativos, la mayoría de los cuales incluyen interfaces SQL de transmisión integradas, y todos ellos se integran con Azure Event Hubs actualmente: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:

Los servicios y marcos de trabajo enumerados generalmente pueden adquirir flujos de eventos y datos de referencia directamente de un conjunto diverso de orígenes mediante adaptadores.The listed services and frameworks can generally acquire event streams and reference data directly from a diverse set of sources through adapters. Kafka Streams solo puede adquirir datos de Apache Kafka y, por tanto, los proyectos de análisis están bloqueados en Apache Kafka.Kafka Streams can only acquire data from Apache Kafka and your analytics projects are therefore locked into Apache Kafka. Para usar datos de otros orígenes, es necesario importar primero los datos en Apache Kafka con el marco de Kafka Connect.To use data from other sources, you are required to first import data into Apache Kafka with the Kafka Connect framework.

Si debe usar el marco de Kafka Streams en Azure, Apache Kafka en HDInsight le proporcionará esa opción.If you must use the Kafka Streams framework on Azure, Apache Kafka on HDInsight will provide you with that option. Apache Kafka en HDInsight proporciona un control total sobre todos los aspectos de configuración de Apache Kafka, al tiempo que se integra por completo con distintos aspectos de la plataforma Azure, como la colocación del dominio de errores o actualizaciones, el aislamiento de red o la supervisión de la integración.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.

Pasos siguientesNext steps

En este artículo se proporciona una introducción a Event Hubs para Kafka.This article provided an introduction to Event Hubs for Kafka. Para más información, consulte Guía del desarrollador de Apache Kafka para Azure Event Hubs.To learn more, see Apache Kafka developer guide for Azure Event Hubs.