Kafka Streams para Azure Event Hubs
En este artículo se proporcionan detalles sobre cómo usar la biblioteca cliente de Kafka Streams con Azure Event Hubs.
Nota:
La funcionalidad de las Secuencias de Kafka solo está disponible en versión preliminar pública para los niveles Premium y Dedicado de Event Hubs.
Información general
Apache Kafka Streams es una biblioteca cliente única de Java que proporciona un marco para el procesamiento de datos de streaming y la creación de aplicaciones en tiempo real en los datos almacenados en temas de Kafka. Todo el procesamiento se limita al cliente, mientras que los temas de Kafka actúan como el almacén de datos para los datos intermedios, antes de que la salida se escriba en el tema de destino.
Event Hubs proporciona un punto de conexión de Kafka que se usará con las aplicaciones cliente de Kafka existentes como alternativa a ejecutar su propio clúster de Kafka. Event Hubs funciona con muchas de sus aplicaciones de Kafka actuales. Para obtener más información, consulte Event Hubs para Apache Kafka.
Uso de Kafka Streams con Azure Event Hubs
Azure Event Hubs admite de forma nativa el protocolo AMQP y Kafka. Sin embargo, para garantizar el comportamiento compatible de Kafka Streams, algunos de los parámetros de configuración predeterminados deben actualizarse para los clientes de Kafka.
Propiedad | Comportamiento predeterminado de Event Hubs | Comportamiento modificado de Kafka Streams | Explicación |
---|---|---|---|
messageTimestampType |
se establece en AppendTime |
debe establecerse en CreateTime |
Kafka Streams se basa en la marca de tiempo de creación en lugar de anexar marca de tiempo |
message.timestamp.difference.max.ms |
El valor máximo permitido es de 90 días | La propiedad solo se usa para controlar las marcas de tiempo pasadas. El tiempo futuro se establece en 1 hora y no se puede cambiar. | Esto está en línea con la especificación del protocolo Kafka |
min.compaction.lag.ms |
El valor máximo permitido es de dos días | ||
Temas de retención infinitos | truncamiento basado en cambiar el tamaño de 250 GB para cada partición de tema | ||
Eliminación de la API de registros para temas de retención infinita | Sin implementar. Como solución alternativa, se puede actualizar el tema y se puede establecer un tiempo de retención finito. | Esto se hará en disponibilidad general |
Otras consideraciones
Estas son algunas de las otras consideraciones que se deben tener en cuenta.
- A las aplicaciones cliente de secuencias Kafka se les debe conceder permisos de administración, lectura y escritura para todos los espacios de nombres para poder crear temas temporales para el procesamiento de flujos.
- Los temas temporales y las particiones cuentan con respecto a la cuota del espacio de nombres especificado. Estos deben tenerse en cuenta al aprovisionar el espacio de nombres o el clúster.
- El tiempo de retención infinito para el almacén "Desplazar" está limitado por el tiempo máximo de retención de mensajes de la SKU. Compruebe Cuotas de Event Hubs para ver estos valores específicos del nivel.
Entre ellas, se actualiza la configuración del tema en el messageTimestampType
para usar el CreateTime
(es decir, tiempo de creación de eventos) en lugar del AppendTime
(es decir, tiempo de anexión del registro).
Para invalidar el comportamiento predeterminado (obligatorio), la siguiente configuración debe establecerse en Azure Resource Manager (ARM).
Nota:
Solo se muestran las partes específicas de la plantilla de ARM para resaltar la configuración que debe actualizarse.
{
"parameters": {
"namespaceName": "contoso-test-namespace",
"resourceGroupName": "contoso-resource-group",
"eventHubName": "contoso-event-hub-kafka-streams-test",
...
"parameters": {
"properties": {
...
"messageTimestampType": "CreateTime",
"retentionDescription": {
"cleanupPolicy": "Delete",
"retentionTimeInHours": -1,
"tombstoneRetentionTimeInHours": 1
}
}
}
}
}
Conceptos de Kafka Streams
Las secuencias de Kafka proporcionan una capa de abstracción sencilla sobre las API de consumidor y productor de Kafka para ayudar a los desarrolladores a empezar a trabajar con escenarios de streaming en tiempo real más rápido. La biblioteca ligera depende de una agente compatible con Apache Kafka (como Azure Event Hubs) para la capa de mensajería interna y administra un almacén de estado local tolerante a errores . Con la API transaccional, la biblioteca de flujos de Kafka admite características de procesamiento enriquecido, como exactamente una vez que procesa y un registro a la vez.
Los registros que llegan fuera de orden se benefician de operaciones de ventanas basadas en tiempo de evento.
Nota:
Se recomienda familiarizarse con documentación de Kafka Streams y conceptos básicos de Kafka Streams.
Secuencias
Una secuencia es la representación abstracta de un tema de Kafka. Consta de un conjunto de datos sin enlazar y actualizar continuamente registros de datos inmutables, donde cada registro de datos es un par clave-valor.
Topología de procesamiento de flujos
Una aplicación de flujos de Kafka define la lógica computacional a través de un DAG (gráfico acíclico dirigido) representado por un procesador topología. La topología del procesador consta de procesadores de flujo (nodos de la topología) que representan un paso de procesamiento, conectado por secuencias (bordes en la topología).
Los procesadores de secuencia se pueden encadenar a procesadores ascendentes o procesadores de bajada, excepto en determinados casos especiales:
- Procesadores de origen: estos procesadores no tienen procesadores ascendentes ni leen directamente de uno o más flujos. Después, se pueden encadenar a procesadores de bajada.
- Procesadores receptores: estos procesadores no tienen ningún procesador de bajada y deben escribir directamente en una secuencia.
La topología de procesamiento de flujos se puede definir con el DSL de Kafka Streams o con la API de procesador de nivel inferior.
Dualidad de secuencia y tabla
Las secuencias y tablas son 2 abstracciones diferentes pero útiles proporcionadas por el DSL de Kafka Streams, modelando formatos de datos relacionales y series temporales que deben coexistir para el procesamiento de flujos casos de uso.
Kafka amplía esto aún más e introduce una dualidad entre secuencias y tablas, donde un
- Una secuencia se puede considerar como un registro de cambios de una tabla, y
- Una tabla se puede considerar como una instantánea del valor más reciente de cada clave de una secuencia.
Esta dualidad permite usar tablas y secuencias indistintamente según sea necesario en el caso de uso.
Por ejemplo
- Unión de datos estáticos de clientes (modelado como tabla) con transacciones dinámicas (modeladas como una secuencia) y
- Unirse a las posiciones de cartera cambiantes en una cartera de operadores de día (modelada como una secuencia) con la fuente de distribución de datos de mercado más reciente (modelada como una secuencia).
Time
Kafka Streams permite la ingestión de ventanas y funciones de gracia para permitir la ingesta de registros de datos desordenados y seguir incluyendo en el procesamiento. Para asegurarse de que este comportamiento es determinista, hay nociones adicionales de tiempo en secuencias de Kafka. Entre ellas se incluyen las siguientes:
- Hora de creación (también conocida como "Hora del evento"): es la hora en que se produjo el evento y se creó el registro de datos.
- Tiempo de procesamiento: es el momento en que la aplicación de procesamiento de flujos procesa el registro de datos (o cuando se consume).
- Hora de anexión (también conocida como "Hora de creación"): es la hora en que los datos se almacenan y se confirman en el almacenamiento del agente de Kafka. Esto difiere de la hora de creación debido a la diferencia de tiempo entre la creación del evento y la ingesta real por parte del agente.
Operaciones con estado
La administración de estados permite aplicaciones sofisticadas de procesamiento de flujos, como combinar y agregar datos de diferentes flujos. Esto se logra con almacenes de estado proporcionados por Kafka Streams y a los que se accede mediante operadores con estado en el DSL de Kafka Streams.
Las transformaciones con estado en el DSL incluyen:
- Agregando
- Unir
- Ventanas (como parte de agregaciones y combinaciones)
- Aplicación de procesadores y transformadores personalizados, que puede ser con estado, para la integración de la API de procesador
Ventana y gracia
Las operaciones de ventanas de DSL de Kafka Streams permiten a los desarrolladores controlar cómo se agrupan los registros para una clave determinada para operaciones con estado, como agregaciones y combinaciones.
Las operaciones de ventanas también permiten especificar un período de gracia proporcionar cierta flexibilidad para los registros desordenados de una ventana determinada. Un registro destinado a una ventana determinada y llega después de la ventana especificada, pero dentro del período de gracia se acepta. Los registros que llegan después de que se supere el período de gracia se descartan.
Las aplicaciones deben usar los controles de período de gracia y ventana para mejorar la tolerancia a errores para los registros desordenados. Los valores adecuados varían en función de la carga de trabajo y deben identificarse empíricamente.
Garantías de procesamiento
Los usuarios empresariales y técnicos buscan extraer información empresarial clave de la salida de las cargas de trabajo de procesamiento de flujos, lo que se traduce en requisitos de garantía transaccional elevados. Kafka streams trabaja junto con las transacciones de Kafka para garantizar la garantía de procesamiento transaccional mediante la integración con el sistema de almacenamiento subyacente (como Azure Event Hubs) de Kafka para asegurarse de que las confirmaciones de desplazamiento y las actualizaciones del almacén de estado se escriben de forma atómica.
Para garantizar las garantías de procesamiento transaccional, la configuración de processing.guarantee
en las configuraciones de Secuencias de Kafka debe actualizarse del valor predeterminado de at_least_once
a exactly_once_v2
(para versiones de cliente en o después de Apache Kafka 2.5) o exactly_once
(para versiones de cliente anteriores a Apache Kafka 2.5.x).
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.