Implementación de detección basada en reglas a escala
por Jitesh Soni
Este artículo establece un patrón reutilizable para cargas de trabajo operativas que realmente marcan la diferencia: detección de fraudes, monitoreo de sensores de IoT, personalización en tiempo real, procesamiento de señales de seguridad... cualquier escenario donde la respuesta inmediata a los eventos sea fundamental para los resultados del negocio.
El objetivo principal: Cuando un evento parezca sospechoso o no válido, márquelo de inmediato y enrútelo para la acción posterior correspondiente.
En este blog, mostramos la detección de anomalías en transacciones de la blockchain de Ethereum. Analizamos datos de la blockchain de Ethereum y marcamos transacciones con patrones no válidos en tiempo real. Específicamente, detectamos:
gas_used > gas_limit son físicamente imposibles según el protocolo de Ethereum, lo que indica corrupción de datos, errores del productor o fallas en el análisis del esquemaextra_data que contiene patrones reconocibles de PII o credenciales (direcciones de correo electrónico, tokens JWT, claves de acceso de AWS) indica una filtración de datos o productores mal configuradosAunque utilizamos datos de Ethereum para la demostración, esta clasificación de "sospechoso o no válido" se aplica a numerosos casos de uso de alto valor:
La misma lógica de detección se aplica directamente a cualquier dominio: transacciones financieras que contienen PII inesperada, payloads de IoT con lecturas de sensores fuera de rango o registros de eventos de API que contienen secretos que deberían haberse redactado. El flujo de Ethereum proporciona un conjunto de datos limpio y reproducible para demostrar el patrón a escala.
Real-Time Mode (RTM) es un nuevo tipo de trigger para Apache Spark™ Structured Streaming que ofrece latencia de nivel de milisegundos a las API de Spark, sin necesidad de un motor especializado independiente como Apache Flink.
Mientras que el modo microbatch predeterminado de Structured Streaming funciona como un autobús de enlace de aeropuerto que espera a llenarse antes de salir, RTM funciona como una cinta transportadora de alta velocidad, procesando cada evento a medida que llega. Esto se logra a través de tres innovaciones arquitectónicas: flujo de datos continuo (los eventos se procesan a medida que llegan, no en fragmentos discretos), programación de pipelines (todas las etapas de la consulta se ejecutan simultáneamente, sin bloqueos) y streaming shuffle (los datos se pasan entre tareas inmediatamente en la memoria, evitando el disco).
RTM está diseñado específicamente para cargas de trabajo operativas donde la latencia afecta directamente los resultados del negocio: detección de fraudes, personalización en tiempo real, computación de características de ML y monitoreo de IoT. Para las cargas de trabajo que pueden tolerar de 1 a 2 segundos de latencia, el microbatch tradicional sigue siendo la opción más rentable.
Real-Time Mode cambia fundamentalmente lo que es posible con Apache Spark. Las latencias de extremo a extremo que van desde ~5 ms hasta ~300 ms, según la complejidad de la carga de trabajo, llevan a Spark al territorio anteriormente dominado por motores de procesamiento de streaming especializados. El microbatch tradicional ofrece una latencia de 1 a 2 segundos; Real-Time Mode logra de ~5 ms a ~300 ms.
La arquitectura lo logra a través de pipelines de ejecución preasignados y checkpointing asíncrono, lo que elimina la sobrecarga de programación que tradicionalmente limitaba el procesamiento de microbatch. Para las cargas de trabajo operativas donde los milisegundos importan (detección de fraudes, monitoreo de IoT, ofertas en tiempo real), este nivel de rendimiento es transformador.
Las organizaciones suelen encontrarse con una idea errónea y costosa: "Spark no es lo suficientemente eficiente para casos de uso en tiempo real, por lo que necesitamos un stack completamente independiente para este único requisito".
Para las cargas de trabajo que toleran de 1 a 2 segundos de latencia, el microbatch de Spark entrega datos de manera confiable en Delta Lake con excelentes características de relación precio/rendimiento. Para las cargas de trabajo operativas que exigen tiempos de respuesta de menos de un segundo, Real-Time Mode elimina por completo la necesidad de tecnologías independientes, como lo validaron los equipos de Coinbase, DraftKings y MakeMyTrip, quienes se consolidaron en un único stack basado en Spark tanto para cargas de trabajo analíticas como operativas.
Con Real-Time Mode, Spark maneja cargas de trabajo tanto analíticas (en el rango de segundos) como operativas (en el rango de milisegundos) dentro de una única plataforma unificada. Esto reduce:
Quizás el aspecto más atractivo de Real-Time Mode es su notable simplicidad para los desarrolladores que ya están familiarizados con Structured Streaming. Habilitar esta potente capacidad no requiere una migración compleja ni una reestructuración fundamental del código.
Las organizaciones pueden desbloquear la latencia de nivel de milisegundos simplemente modificando la configuración del trigger:
Eso es todo. La misma API familiar de Structured Streaming. La misma gestión de checkpoints. La misma semántica de entrega al menos una vez. Solo un cambio de configuración para habilitar la inteligencia operativa de menos de un segundo.
Nota sobre las garantías de entrega: RTM con sink de Kafka proporciona garantías de entrega al menos una vez. Los consumidores posteriores deben manejar los posibles duplicados mediante escrituras idempotentes o lógica de deduplicación.
Esta integración perfecta representa una ventaja fundamental. Los equipos pueden crear prototipos y poner en producción cargas de trabajo operativas sin la sobrecarga sustancial de aprender, implementar y administrar stacks tecnológicos completamente independientes. Este enfoque acelera drásticamente la innovación al tiempo que reduce el riesgo asociado tradicionalmente con la adopción de nuevas capacidades en tiempo real.
Una vez establecido por qué es importante Real-Time Mode, examinemos cómo implementar este patrón en la práctica. Las siguientes secciones muestran un pipeline de protección (guardrail) listo para producción: el patrón operativo que convierte estas capacidades en valor comercial.

Cada evento entrante se somete a una evaluación inmediata, lo que produce un evento posterior enriquecido que contiene:
ALLOW frente a QUARANTINEEste patrón operativo sirve como una única fuente de verdad para la toma de decisiones en tiempo real:
Aunque nuestra demostración utiliza datos de bloques de Ethereum, este patrón se aplica de forma universal: transacciones financieras, lecturas de sensores, registros de autenticación, llamadas de API; la arquitectura sigue siendo la misma.
Fieles a nuestro compromiso con las soluciones de calidad de producción, validamos este patrón a escala. La cadena completa de Ethereum (aproximadamente 95 GB distribuidos en 4 particiones, lo que representa unos 23 millones de mensajes) se cargó en Kafka para realizar pruebas.
Implementamos reglas de validación intencionadamente sencillas y de alta señal:
Escanee el campo extra_data en busca de patrones que indiquen claramente datos que no deberían estar presentes en los flujos de producción. Los ejemplos de código muestran una detección de patrones básica (direcciones de correo electrónico, tokens JWT, formatos de clave de AWS).
Las organizaciones deberían reemplazar estas reglas por otras específicas para sus requisitos de cumplimiento: patrones de PII, identificadores internos, credenciales de API y datos confidenciales similares.
La clave fundamental: Las protecciones en tiempo real deben formar parte del pipeline como parte de una gobernanza unificada, no descubrirse durante el análisis posterior a un incidente.
gas_used > gas_limit
Esta condición nunca debería ocurrir en datos válidos. Cuando se detecta, indica uno de varios problemas:
Desde una perspectiva operativa, este es precisamente el tipo de anomalía que queremos marcar de inmediato, lo que permite una respuesta rápida antes de que los sistemas descendentes (downstream) se vean afectados.
Con nuestra lógica de validación establecida, ahora pasamos a la configuración de streaming que permite la ejecución en menos de un segundo.
El modo Real-Time se habilita a través del activador (trigger) en tiempo real y funciona en modo de actualización (update). En PySpark, se especifica un parámetro de intervalo (por ejemplo, "5 minutes").
update con activadores (triggers) de RTMConfiguración utilizada en esta demostración:
Consulte el repositorio complementario para ver el archivo cluster_config.template.json completo.
Este pipeline de una sola pasada demuestra la integración perfecta entre Kafka y el modo Real-Time de Spark:
Puede leer el código aquí.
Validamos el rendimiento del modo Real-Time procesando datos de la blockchain de Ethereum: ~23 millones de mensajes distribuidos en 4 particiones de Kafka en modo de streaming continuo.
El pipeline demostró unas características de procesamiento impresionantes:
Los registros del driver capturan métricas de latencia detalladas a través del evento spark.streaming.madeProgress. El modo Real-Time informa processingLatencyMs, que mide el tiempo transcurrido desde que la consulta lee un registro hasta que lo escribe en el receptor (sink) descendente.
Para este pipeline de validación sin estado (stateless) que procesa ~23 millones de registros, observamos:
rtmMetrics.processingLatencyMs de StreamingQueryProgress con percentiles (P0, P50, P90, P95, P99). Para un pipeline Kafka-to-Kafka de una sola etapa como este, representa eficazmente la latencia de extremo a extremo por registro.Nota: Estos resultados representan el rendimiento en un pipeline de validación sin estado (stateless). Las operaciones con estado (stateful) más complejas (agregaciones, ventanas) pueden experimentar latencias más altas dentro del rango de RTM de ~5 ms a ~300 ms, según la complejidad de la carga de trabajo.
Estas métricas validan que el modo Real-Time ofrece una latencia inferior al milisegundo de nivel de producción (P95 0,5 ms, P99 = 1 ms) al tiempo que procesa flujos de gran volumen a casi 70.000 filas/segundo, lo que elimina el dilema tradicional entre las plataformas unificadas y los requisitos de baja latencia.
El modo Real-Time amplía Apache Spark™ Structured Streaming a una nueva clase de cargas de trabajo: aplicaciones operativas y sensibles a la latencia que exigen una respuesta inmediata a los datos en streaming. Al llevar la latencia de menos de un segundo a las API de Spark que su equipo ya utiliza, elimina la necesidad de operar un motor especializado independiente para sus pipelines más críticos en cuanto a tiempo.
La propuesta de valor es convincente:
Tanto si está creando pipelines de detección de fraudes, motores de personalización o sistemas de computación de características de ML, el modo Real-Time ofrece la latencia que su aplicación exige, al tiempo que mantiene la sencillez de Spark y la amplitud de su ecosistema.
Clone el repositorio complementario para ejecutar este pipeline de protección de extremo a extremo (end-to-end): incluye la implementación completa, la configuración del clúster y la guía de implementación.
Para profundizar más, revise la documentación del modo Real-Time para conocer las opciones de configuración y los orígenes/receptores (sources/sinks) compatibles, o vea el Análisis técnico profundo del modo Real-Time para obtener un recorrido completo por la arquitectura.
(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original
Suscríbete a nuestro blog y recibe las últimas publicaciones directamente en tu bandeja de entrada.