K2 de Cloudflare es un primitivo de transmisión de eventos sin servidor lanzado en la plataforma para desarrolladores para abordar un desafío fundamental en las arquitecturas orientadas a eventos: mantener la alineación entre los productores y consumidores de datos. Según el anuncio de Cloudflare, las arquitecturas RPC tradicionales a menudo enfrentan problemas donde los productores envían datos más rápido de lo que los consumidores pueden procesarlos, o donde el tiempo de inactividad de los consumidores provoca la pérdida de eventos. K2 resuelve esto insertando un servicio de almacenamiento en búfer duradero que absorbe las escrituras mientras permite a los lectores independientes consumir datos a su propio ritmo, desacoplando efectivamente los dos lados de la tubería. La empresa inicialmente desarrolló K2 para servir como capa de ingestión para Basin Pipelines, lo que requiere almacenamiento duradero para prevenir la pérdida de datos durante el tiempo de inactividad de los consumidores.

Por debajo del capó, K2 implementa un registro particionado y duradero utilizando el almacenamiento de objetos R2 de Cloudflare como su base. En lugar de depender del registro tradicional basado en anexado, K2 acumula escrituras en memoria en los servicios perimetrales antes de escribir archivos de segmento completos en R2. El sistema aprovecha las operaciones atómicas de R2 para lograr desplazamientos estrictamente incrementales y mantener el orden sin requerir un servicio de coordinación separado. Este enfoque separa las capas de cómputo y almacenamiento, permitiendo un escalado independiente y posibilitando el almacenamiento de vastos volúmenes de datos históricos a bajo costo, beneficiándose de los 11 nueves de durabilidad de R2. Aunque el diseño de K2 ofrece ventajas significativas en escalabilidad y durabilidad, implica un compromiso en la latencia de producción debido a la necesidad de acumular escrituras antes de confirmarlas en el almacenamiento de objetos. Cloudflare señala que esto añade aproximadamente un segundo de latencia en el percentil 99 en la versión inicial.

Diagrama de transmisión de eventos duradera con Durable Objects y R2
Ilustración de un sistema de transmisión de eventos duradera que utiliza Durable Objects y R2 de Cloudflare, una tecnología relacionada con el enfoque de transmisión de eventos de K2.github.com

Mientras el artículo describe K2 como un servicio de transmisión de eventos sin servidor construido directamente sobre el almacenamiento R2, esta imagen muestra un concepto similar utilizando Durable Objects y R2, lo que ayuda a visualizar el paradigma de transmisión de eventos duradera discutido en el artículo.

El servicio se posiciona entre los primitivos asíncronos existentes de Cloudflare: Queues para el seguimiento de elementos de trabajo individuales con lógica compleja por elemento (como reintentos, retrasos y colas de mensajes no entregados), y Basin Pipelines para servicios de ingestión enfocados en escribir eventos en el almacenamiento de objetos o en tablas Iceberg. K2 está optimizado para el movimiento de datos a gran escala, la retención a largo plazo y los patrones de consumo en abanico, donde los mensajes se producen y consumen en lotes, lo que permite un procesamiento eficiente a costa de los reintentos a nivel de mensaje. Los usuarios pueden crear un flujo mediante la CLI cf, Wrangler, el panel de control o la API, luego producir eventos mediante la API HTTP o el enlace de Worker y crear suscripciones para que las aplicaciones consumidoras lean del flujo.

K2 está disponible hoy en versión beta pública para cuentas con suscripciones Workers Pagadas, con límites de 10 GB de almacenamiento utilizado y 30 MB/s de producción por flujo. El uso durante el período beta es gratuito, y Cloudflare anticipa un precio eventual de $0,04 por GB para los datos producidos, $0,04 por GB para los datos consumidos y $0,02 por GB por mes para los datos retenidos. La hoja de ruta incluye mayor paralelismo de escritura, claves de mensaje y garantías de ordenamiento basado en claves, consumidores de trabajadores basados en push, un nivel expreso con menor latencia y soporte directo para clientes de Apache Kafka.