Qué es Azure Event Hubs para Apache Kafka

En este artículo se explica cómo puede usar Azure Event Hubs para transmitir datos desde aplicaciones de Apache Kafka sin configurar un clúster de Kafka por su cuenta.

Nota:

Esta característica solo se admite en los niveles estándar, premium y dedicado.

Información general

Azure Event Hubs proporciona un punto de conexión de Apache Kafka en un centro de eventos, que permite a los usuarios conectarse al centro de eventos mediante el protocolo Kafka. A menudo, puede usar el punto de conexión Kafka de un centro de eventos desde las aplicaciones sin ningún cambio en el código. Usted modifica únicamente la configuración, es decir, actualiza 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. A partir de ahí, puede empezar a hacer streaming de los eventos desde las aplicaciones que usen el protocolo Kafka en centros de eventos, que son equivalentes a los temas de Kafka.

Nota:

Event Hubs para ecosistemas de Kafka admite Apache Kafka versión 1.0. y posteriores.

Asignación conceptual de Apache Kafka y Azure 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. En la tabla siguiente, se asignan conceptos entre Kafka y Event Hubs.

Concepto de Kafka Concepto de Event Hubs
Clúster Espacio de nombres
Tema Un centro de eventos
Partition Partition
Grupo de consumidores Grupo de consumidores
Offset Offset

Diferencias principales entre Apache Kafka y Azure 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. No hay ningún servidor, discos o red que administrar o supervisar ni ningún agente que configurar o tener en cuenta. 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.

Para más información acerca de Event Hubs y de los espacios de nombres, consulte las características de Event Hubs. 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. 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.

La reducción horizontal de Event Hubs se controla por el número de unidades de rendimiento (TU) o unidades de procesamiento que compra. Si habilita la característica Inflado automático para un espacio de nombres de nivel estándar, Event Hubs escala verticalmente de forma automática las TU cuando se alcanza el límite de rendimiento. Esta característica también funciona con la ayuda del protocolo Apache Kafka. En el caso de un espacio de nombres de nivel prémium, puede aumentar el número de unidades de procesamiento asignadas al espacio de nombres.

¿Es Apache Kafka la solución adecuada para su carga de trabajo?

Tras la creación de aplicaciones con Apache Kafka, resultará útil saber que Azure Event Hubs forma parte de un conjunto de servicios que también incluye Azure Service Bus y 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, ni tampoco 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.

Para comprender las diferencias entre los patrones y saber qué servicio es más adecuado para cada patrón, consulte la guía Opciones de mensajería asincrónica en Azure. Como usuario de Apache Kafka, es posible que descubra que las rutas de acceso de comunicación que realizó 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.

Si necesita características específicas de Apache Kafka que no están disponibles mediante la interfaz de Event Hubs para Apache Kafka, o bien 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.

Seguridad y autenticación

Cada vez que se publican o consumen eventos de Event Hubs para Kafka, el cliente intenta acceder a los recursos de Event Hubs. Quiere asegurarse de que se accede a los recursos mediante una entidad autorizada. 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. Cuando el uso de Event Hubs para Kafka requiere el cifrado TLS (ya que todos los datos en tránsito con Event Hubs están cifrados con TLS), se puede realizar especificando la opción SASL_SSL en el archivo de configuración.

Azure Event Hubs proporciona varias opciones para autorizar el acceso a los recursos protegidos.

  • OAuth 2.0
  • Firma de acceso compartido (SAS)

OAuth 2.0

Event Hubs se integra con Microsoft Entra ID, lo que proporciona un servidor de autorización centralizado compatible con OAuth 2.0. Con Microsoft Entra ID, 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. Puede usar esta característica con los clientes de Kafka si especifica SASL_SSL para el protocolo y OAUTHBEARER para el mecanismo. Para obtener detalles sobre los roles y los niveles de Azure para el control de acceso, consulte Autorización del acceso 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:

Las propiedades de configuración anteriores son para el lenguaje de programación Java. Para ejemplos que muestran cómo usar OAuth con Event Hubs para Kafka con distintos lenguajes de programación, consulte ejemplos en GitHub.

Firma de acceso compartido (SAS)

Event Hubs también proporciona firmas de acceso compartido (SAS) para el acceso delegado a recursos de Event Hubs para Kafka. 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. Los roles integrados también pueden eliminar la necesidad de autorización basada en ACL, que el usuario debe mantener y administrar. Puede usar esta característica con los clientes de Kafka si especifica SASL_SSL para el protocolo y PLAIN para el mecanismo.

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. Para obtener instrucciones sobre cómo obtener la cadena de conexión, consulte Obtención de una cadena de conexión de Event Hubs. 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";

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.

Nota:

Los tokens de firma de acceso compartido generados no son compatibles cuando se usa el punto de conexión de Event Hubs para Apache Kafka.

Ejemplos

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.

Otras características de Azure Event Hubs

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. Puede escribir con cualquiera de estos protocolos y leer con cualquier otro, de modo que sus productores actuales de Apache Kafka puedan seguir publicando mediante la plataforma. Sin embargo, el lector puede beneficiarse de la integración nativa con la interfaz AMPQ de Event Hubs, como Azure Stream Analytics o 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 datos mediante integraciones de Apache Kafka.

Además, otras características de Event Hubs, como Captura, que posibilita un almacenamiento de archivos a largo plazo extremadamente económico mediante Azure Blob Storage y Azure Data Lake Storage, y Recuperación geográfica ante desastres, también son compatibles con la característica Event Hubs para Kafka.

Idempotencia

Azure Event Hubs para Apache Kafka admite productores y consumidores idempotentes.

Uno de los principios básicos de Azure Event Hubs es el concepto de entrega al menos una vez. Este enfoque garantiza que los eventos siempre se entreguen. También significa que los consumidores, como una función, pueden recibir eventos más de una vez, incluso varias veces. Por esta razón es importante que el consumidor admita el patrón de consumidor idempotente.

Diferencias de características con Apache Kafka

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.

Como se ha explicado anteriormente, los servicios de mensajería de Azure proporcionan una cobertura completa y sólida para una gran cantidad de escenarios. Aunque no se admiten actualmente las siguientes características 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.

Transacciones

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. 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. Service Bus es el servicio recomendado para las cargas de trabajo de mensajes transaccionales.

Compresión

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. El agente de Apache Kafka trata el lote como un mensaje especial.

Los desarrolladores de aplicaciones del productor de Kafka pueden habilitar la compresión de mensajes estableciendo la propiedad compression.type. En la versión preliminar pública, el único algoritmo de compresión admitido es gzip.

Compression.type = none | gzip

Actualmente, la característica solo se admite para el productor de tráfico de Apache Kafka y el tráfico de consumidor. El consumidor AMQP puede consumir tráfico de Kafka comprimido como mensajes descomprimidos. La carga de cualquier evento de Event Hubs es un flujo de bytes y el contenido se puede comprimir con el algoritmo que elija; sin embargo, en versión preliminar pública, la única opción es gzip. Las ventajas de usar la compresión de Kafka son un tamaño de mensaje más pequeño, un mayor tamaño de carga que puede transmitir y un menor consumo de recursos del agente de mensajes.

Kafka Streams

Kafka Streams es una biblioteca cliente de análisis de secuencias que forma parte del proyecto de código abierto de Apache Kafka, pero es independiente de su agente de eventos.

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. "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" tienen permiso para usar u ofrecer compatibilidad con "ksqlDB". En la práctica, si usa ksqlDB, debe operar Kafka personalmente o bien utilizar las ofertas de la nube de Confluent. 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.

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:

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. Kafka Streams solo puede adquirir datos de Apache Kafka y, por tanto, los proyectos de análisis están bloqueados en Apache Kafka. Para usar datos de otros orígenes, es necesario importarlos primero a Apache Kafka con el marco Kafka Connect.

Si debe usar el marco de Kafka Streams en Azure, Apache Kafka en HDInsight le proporcionará esa opción. 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.

Pasos siguientes

En este artículo se proporciona una introducción a Event Hubs para Kafka. Para más información, consulte Guía del desarrollador de Apache Kafka para Azure Event Hubs.

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.

Consulte también los ejemplos de OAuth en GitHub.