Caso Enterprise: Oil and Gas
Arquitectura Enterprise — IoT/SCADA en Oil and Gas
El mismo patrón CDC implementado en este workshop se aplica directamente a escenarios de misión crítica en la industria de Oil and Gas, donde sensores IoT y sistemas SCADA generan datos continuos que deben procesarse en tiempo real.
Componentes y Adaptación
| Componente Workshop | Adaptación Oil and Gas | Configuración |
|---|---|---|
PostgreSQL (cdcdb) |
Historian DB (OSIsoft PI / Aveva) |
Tablas de sensores con timestamps de alta precisión |
Debezium (PostgresConnector) |
Debezium (PostgresConnector o custom) |
CDC sobre tablas de lecturas de sensores |
Kafka (3 brokers) |
Kafka (5+ brokers) |
Más particiones para alto throughput de sensores |
Camel (notificaciones) |
Camel (procesamiento de anomalías) |
Content-based routing por tipo de sensor y umbral |
Mailpit (email) |
PagerDuty / OpsGenie (alertas críticas) |
Integración con sistemas de on-call |
Topics para Oil and Gas
Adaptación de los topics del workshop para un escenario de monitoreo:
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: oilgas.sensors.pressure
namespace: kafka-oilgas
labels:
strimzi.io/cluster: oilgas-cluster
spec:
partitions: 12
replicas: 3
config:
retention.ms: 2592000000
cleanup.policy: delete
---
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: oilgas.sensors.temperature
namespace: kafka-oilgas
labels:
strimzi.io/cluster: oilgas-cluster
spec:
partitions: 12
replicas: 3
config:
retention.ms: 2592000000
cleanup.policy: delete
---
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: oilgas.alerts.critical
namespace: kafka-oilgas
labels:
strimzi.io/cluster: oilgas-cluster
spec:
partitions: 3
replicas: 3
config:
retention.ms: 7776000000
cleanup.policy: delete
Diferencias clave:
-
12 particiones para sensores — mayor throughput por los miles de sensores concurrentes
-
Retención 30 días para datos de sensores — cumplimiento regulatorio
-
Retención 90 días para alertas críticas — auditoría e investigación de incidentes
Schema Registry para Sensores
Apicurio Registry valida los schemas de los eventos de sensores, garantizando consistencia:
{
"type": "object",
"properties": {
"sensor_id": {"type": "string"},
"well_id": {"type": "string"},
"reading_type": {"type": "string", "enum": ["pressure", "temperature", "flow_rate"]},
"value": {"type": "number"},
"unit": {"type": "string"},
"timestamp": {"type": "string", "format": "date-time"},
"quality": {"type": "integer", "minimum": 0, "maximum": 100}
},
"required": ["sensor_id", "well_id", "reading_type", "value", "timestamp"]
}
Ruta Camel para Detección de Anomalías
Adaptación de la ruta Camel del workshop para procesar datos de sensores:
- route:
id: sensor-anomaly-detection
from:
uri: kafka:oilgas.sensors.pressure
parameters:
brokers: oilgas-cluster-kafka-bootstrap.kafka-oilgas.svc:9093
groupId: anomaly-detector
securityProtocol: SASL_SSL
saslMechanism: SCRAM-SHA-512
steps:
- unmarshal:
json:
library: jackson
- choice:
when:
- simple: "${body[value]} > 3500"
steps:
- setBody:
simple: |
{"sensor":"${body[sensor_id]}",
"well":"${body[well_id]}",
"value":${body[value]},
"severity":"CRITICAL",
"message":"Presion excede umbral critico"}
- marshal:
json:
library: jackson
- to:
uri: kafka:oilgas.alerts.critical
otherwise:
steps:
- log:
message: "Sensor ${body[sensor_id]} reading normal: ${body[value]}"
How it Works
Del sensor al alerta: pipeline en tiempo real
El flujo de datos desde un sensor de campo hasta una alerta operativa sigue esta cadena:
-
Un sensor de presión/temperatura conectado via Modbus/OPC-UA envía lecturas al sistema SCADA (ej: OSIsoft PI) cada 1-5 segundos.
-
El SCADA persiste las lecturas en su Historian DB (PostgreSQL o base propietaria). Cada INSERT es un nuevo datapoint con
sensor_id,value,timestampyquality. -
Debezium captura el INSERT via WAL y lo publica al topic correspondiente (
oilgas.sensors.pressure). Con 12 particiones, el sistema soporta miles de sensores concurrentes particionando porsensor_id. -
Apache Camel consume el evento, deserializa el JSON, y aplica content-based routing: si
value > threshold, genera un evento de alerta al topicoilgas.alerts.critical. Si no, loggea la lectura normal. -
Los eventos de alerta disparan notificaciones via PagerDuty/OpsGenie para el equipo de guardia.
-
Paralelamente, todos los eventos (normales y anómalos) se persisten en un Data Lake (S3/ODF) para análisis histórico y entrenamiento de modelos ML.
Diferencias clave vs. el workshop
| Aspecto | Workshop (CDC) | Enterprise (Oil & Gas) |
|---|---|---|
Throughput |
~10 eventos/min (INSERTs manuales) |
~10,000 eventos/seg (sensores automáticos) |
Particiones |
3 (suficiente para demo) |
12+ (paralelismo para alto throughput) |
Retención |
7 días (demo) |
30-90 días (compliance regulatorio) |
Acción |
Email via Mailpit |
PagerDuty + Data Lake + ML pipeline |
Seguridad |
SCRAM + TLS (demo) |
SCRAM + TLS + ACLs por planta + encryption at rest |
Consideraciones Enterprise
| Requisito | Implementación |
|---|---|
Latencia < 1s |
Kafka + Debezium proporciona latencia sub-segundo end-to-end |
Compliance |
Retención configurable por topic, schemas versionados en Apicurio |
Geo-distribución |
MirrorMaker 2 para replicación entre plantas/regiones |
Seguridad |
SCRAM-SHA-512 + TLS + ACLs por sensor/planta |
Escalabilidad |
Agregar particiones y brokers sin downtime |
Observabilidad |
Grafana dashboards + PrometheusRule alertas + Kiali traffic |
Alertas Específicas Oil and Gas
Extensión del PrometheusRule del workshop para sensores:
- alert: SensorDataLagHigh
expr: kafka_consumergroup_lag{topic=~"oilgas.sensors.*"} > 5000
for: 2m
labels:
severity: critical
annotations:
summary: "Lag critico en datos de sensores"
- alert: NoSensorData
expr: rate(kafka_server_brokertopicmetrics_messagesin_total{topic=~"oilgas.sensors.*"}[5m]) == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Sin datos de sensores — posible desconexion SCADA"
Documentación Oficial
-
Red Hat Streams for Apache Kafka — Streaming de datos de sensores en tiempo real
-
Red Hat build of Debezium — CDC para captura de cambios en sistemas SCADA
-
Red Hat build of Apache Camel — Integración con sistemas legacy y IoT
-
Red Hat OpenShift Data Foundation — Almacenamiento persistente para data lakes
-
Red Hat OpenShift Container Platform — Plataforma de despliegue edge y cloud