¿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.
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.
Para obtener más información sobre cómo migrar las aplicaciones de Apache Kafka a Azure Event Hubs, consulte la guía de migración.
Nota:
- Esta característica solo se admite en los niveles estándar, premium y dedicado.
- Event Hubs para ecosistemas de Apache Kafka admite Apache Kafka versión 1.0. y posteriores.
Asignación conceptual de Apache Kafka y Azure Event Hubs
Conceptualmente, Apache 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 Apache Kafka y Event Hubs.
Concepto de Apache 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 |
Características de Apache Kafka admitidas en Azure Event Hubs
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.
Nota:
Kafka Streams se encuentra actualmente en versión preliminar pública en el nivel Premium y Dedicado.
Azure Event Hubs admite la biblioteca cliente de Kafka Streams, con detalles y conceptos disponibles aquí.
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:
- Azure Stream Analytics
- Azure Synapse Analytics (mediante la característica de captura de Event Hubs)
- Azure Databricks
- Apache Samza
- Apache Storm
- Spark de Apache
- Apache Flink
- Apache Flink en HDInsight en Azure Kubernetes Service
- Akka Streams
Transacciones de Kafka
Nota:
Las transacciones de Kafka se encuentran actualmente en versión preliminar pública en el nivel Premium y Dedicado.
Azure Event Hubs admite transacciones de Kafka. Aquí encontrará más detalles sobre la compatibilidad y los conceptos
Compresión
Nota:
La compresión de Kafka para Event Hubs solo se admite actualmente en los niveles Premium y Dedicado.
La característica de compresión del lado cliente en los clientes de Apache Kafka conserva los recursos de proceso y el ancho de banda comprimiendo un lote de varios mensajes en un solo mensaje en el lado productor y descomprimiendo 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. Azure Event Hubs admite actualmente la compresión de gzip
.
Compression.type = none | gzip
Aunque la característica solo se admite para el productor de tráfico de Apache Kafka y el tráfico de consumidor, el consumidor de AMQP puede consumir tráfico comprimido de Kafka como mensajes descomprimidos.
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:
Estas propiedades de configuración 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 for Apache Kafka es uno de los tres protocolos disponibles simultáneamente en Azure Event Hubs junto con 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.
Contenido relacionado
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.