Arquitectura del CDC Pipeline
Real-Time Data Streaming
El streaming en tiempo real es el flujo continuo de datos a medida que se generan, permitiendo análisis y procesamiento inmediato para extraer información significativa.
Fuentes de datos comunes:
-
Actividad en sitios web
-
Transacciones bancarias
-
Compras de e-commerce
-
Actividad de jugadores en gaming
-
Sensores IoT
Change Data Capture (CDC)
CDC es un patrón de integración que identifica y captura cambios realizados en una base de datos (INSERT, UPDATE, DELETE) y los propaga como eventos a otros sistemas en tiempo real.
¿Por qué CDC?
| Enfoque tradicional | CDC con Debezium |
|---|---|
Polling periódico a la DB |
Captura basada en WAL (write-ahead log) |
Alta latencia (segundos/minutos) |
Latencia sub-segundo |
Carga adicional en la DB |
Impacto mínimo (lee el log de transacciones) |
Puede perder cambios entre polls |
Captura todos los cambios, incluyendo deletes |
Flujo de datos detallado
-
Un usuario inserta o actualiza un registro en PostgreSQL
-
PostgreSQL escribe el cambio en el Write-Ahead Log (WAL) con
wal_level=logical -
Debezium (corriendo como KafkaConnect plugin) lee el WAL via replication slot
-
Debezium serializa el evento como JSON (opcionalmente Avro via Apicurio Registry)
-
El evento se publica en el topic Kafka correspondiente (
cdc.public.customers) -
Apache Camel consume el evento del topic
-
Camel transforma el evento y envía una notificación por email via Mailpit
-
Todo el pipeline es monitoreado en Grafana y visible en Kiali (Service Mesh)
How it Works
El pipeline CDC opera como una cadena reactiva de cinco etapas, donde cada componente actúa de forma independiente y asíncrona:
-
Capture — PostgreSQL escribe cada transacción en el Write-Ahead Log (WAL) antes de confirmarla. Debezium abre un replication slot y lee el WAL usando el protocolo de replicación lógica nativa de PostgreSQL, sin queries adicionales a las tablas.
-
Serialize — Debezium transforma cada cambio en un evento JSON estructurado que incluye: el valor
before(estado previo del registro),after(estado nuevo),op(tipo de operación:c`reate, `u`pdate, `d`elete, `r`ead), y `source(metadata: tabla, schema, LSN, timestamp del WAL). -
Stream — El evento se publica en el topic Kafka correspondiente (
cdc.public.<tabla>). Kafka lo persiste en disco, lo replica a 3 brokers (RF=3), y confirma el write solo cuando al menos 2 réplicas persisten el dato (min.insync.replicas=2). -
Process — Apache Camel consume del topic usando un consumer group. Cada partición se asigna a un solo consumidor (partition affinity), garantizando orden por primary key. Camel deserializa el JSON, aplica content-based routing (
$.payload.op), y transforma el payload. -
React — El procesador Camel ejecuta la acción correspondiente: HTTP POST a Mailpit para notificaciones, producción a topics de DLQ para errores, o emisión de métricas Prometheus. Todo ocurre sin bloqueo — si un destino falla, el mensaje va a la Dead Letter Queue.
|
La latencia end-to-end típica del pipeline es sub-segundo desde el commit en PostgreSQL hasta la notificación. El cuello de botella no es Kafka (que persiste en microsegundos) sino el HTTP POST a servicios externos. |
Namespace y recursos
Todos los componentes del CDC pipeline se despliegan en el namespace kafka-cdc:
apiVersion: v1
kind: Namespace
metadata:
name: kafka-cdc
labels:
istio.io/dataplane-mode: ambient
istio-discovery: enabled
El label istio.io/dataplane-mode: ambient enrolla automáticamente el namespace en el Service Mesh, haciendo visible todo el tráfico en Kiali sin necesidad de sidecars.
Alta Disponibilidad
El pipeline está configurado con múltiples réplicas y storage persistente para tolerancia a fallos.
Kafka Brokers — Storage Persistente
Los brokers usan persistent-claim en lugar de ephemeral para retener datos entre reinicios:
spec:
kafka:
replicas: 3
storage:
type: persistent-claim
size: 10Gi
deleteClaim: false
-
size: 10Gi— capacidad por broker (ajustar según volumen de datos) -
deleteClaim: false— los PVCs se preservan al escalar o eliminar el cluster
Documentación Oficial
-
Red Hat Streams for Apache Kafka — Despliegue y configuración de clusters Kafka en OpenShift
-
Red Hat build of Debezium — Configuración de CDC connectors
-
Red Hat build of Apache Camel — Integración y rutas de procesamiento
-
OpenShift Service Mesh — mTLS y observabilidad de tráfico
-
Strimzi Documentation — Proyecto upstream de Streams for Apache Kafka