lab

Lab — Pipeline Connect CDC: IBM i → destino

Configurar un pipeline de Connect CDC desde una tabla DB2 for i hacia un destino simple. Generar cambios, validar end-to-end y probar catch-up.

PreventaSoporte SeniorDesarrollo

Lab — Pipeline Connect CDC: IBM i → destino

Objetivo

Configurar un pipeline end-to-end de Precisely Connect CDC que capture cambios desde una tabla DB2 for i en IBM i y los entregue a un destino externo (Kafka, SQL Server o Snowflake — el lab acepta cualquiera de los tres). Validar la propagación, probar catch-up tras detener el destino.

Tiempo estimado

180 minutos.

Prerequisitos

Paso 1 — Preparar el source en IBM i

CRTLIB LIB(CDCLAB)
CRTJRNRCV JRNRCV(CDCLAB/RCV0001) THRESHOLD(500000)
CRTJRN JRN(CDCLAB/JRNCDC) JRNRCV(CDCLAB/RCV0001) MNGRCV(*SYSTEM)

Crear la tabla con SQL para tener nombres claros:

CREATE TABLE CDCLAB.ORDENES (
    ORD_ID INT NOT NULL,
    CLIENTE VARCHAR(50),
    MONTO DECIMAL(10,2),
    FECHA DATE,
    PRIMARY KEY (ORD_ID)
);

Iniciar journaling con imagen *BOTH (requerido por Connect CDC):

STRJRNPF FILE(CDCLAB/ORDENES) JRN(CDCLAB/JRNCDC) IMAGES(*BOTH)

(Fuente: Precisely Help — Set up journaling)

Paso 2 — Preparar el destino

Opción A — Kafka

Crear un tópico:

kafka-topics --create --topic cdc.ordenes --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1

Opción B — SQL Server

CREATE TABLE dbo.ORDENES_CDC (
    ORD_ID INT NOT NULL PRIMARY KEY,
    CLIENTE NVARCHAR(50),
    MONTO DECIMAL(10,2),
    FECHA DATE,
    CDC_OP CHAR(1),
    CDC_TS DATETIME
);

Opción C — Snowflake

CREATE TABLE LAB_DB.LAB_SCHEMA.ORDENES (
    ORD_ID NUMBER NOT NULL,
    CLIENTE VARCHAR(50),
    MONTO NUMBER(10,2),
    FECHA DATE,
    CDC_OP VARCHAR(1),
    CDC_TS TIMESTAMP_NTZ
);

Paso 3 — Configurar el pipeline en Connect

Pasos generales (los nombres de campos varían por versión, validar con docs):

  1. Crear una datastore source apuntando a la LPAR IBM i (host, puerto, credenciales del agente).
  2. Crear una datastore target apuntando al destino elegido (Kafka broker / SQL Server / Snowflake).
  3. Crear un subscription que capture la tabla CDCLAB.ORDENES.
  4. Configurar el mapping source→target. Para Kafka, mapping a JSON. Para SQL Server / Snowflake, mapping columna a columna.
  5. Configurar la carga inicial (snapshot) y luego CDC.
  6. Activar la subscription.

Para los nombres exactos de menúes y campos, ver la documentación oficial Connect CDC en help.precisely.com.

Paso 4 — Validar que el pipeline está corriendo

En la consola de Connect:

Paso 5 — Generar cambios en source

INSERT INTO CDCLAB.ORDENES VALUES (1, 'JUAN PEREZ', 1500.00, CURRENT DATE);
INSERT INTO CDCLAB.ORDENES VALUES (2, 'MARIA LOPEZ', 2300.50, CURRENT DATE);
INSERT INTO CDCLAB.ORDENES VALUES (3, 'PEDRO GARCIA', 750.25, CURRENT DATE);

UPDATE CDCLAB.ORDENES SET MONTO = 1800.00 WHERE ORD_ID = 1;

DELETE FROM CDCLAB.ORDENES WHERE ORD_ID = 3;

Paso 6 — Validar en destino

Kafka

kafka-console-consumer --topic cdc.ordenes --from-beginning --bootstrap-server localhost:9092

Deberías ver mensajes JSON para cada operación (3 inserts, 1 update con before/after, 1 delete).

SQL Server / Snowflake

SELECT * FROM dbo.ORDENES_CDC ORDER BY CDC_TS;
-- o en Snowflake
SELECT * FROM LAB_DB.LAB_SCHEMA.ORDENES;

Deben verse los registros aplicados según la lógica del subscription (apply directo, audit, soft-delete según configuración).

Paso 7 — Probar catch-up tras detener el destino

  1. Detener el destino (parar el broker Kafka / parar el servicio SQL Server / pausar el warehouse Snowflake).
  2. Generar más cambios en source:
INSERT INTO CDCLAB.ORDENES VALUES (4, 'ANA MARTINEZ', 5000.00, CURRENT DATE);
INSERT INTO CDCLAB.ORDENES VALUES (5, 'LUIS RAMIREZ', 2750.00, CURRENT DATE);
  1. Verificar que el agente sigue capturando hacia la Data Queue y que se forma backlog (ver RB-CDC-007).
  2. Reanudar el destino.
  3. Esperar minutos y verificar que el catch-up se completó (los registros 4 y 5 aparecen sin pérdida).

Paso 8 — Cleanup

En source:

ENDJRNPF FILE(CDCLAB/ORDENES)
DROP TABLE CDCLAB.ORDENES;
DLTJRN JRN(CDCLAB/JRNCDC)
DLTJRNRCV JRNRCV(CDCLAB/RCV0001) DLTOPT(*IGNINQMSG)
DLTLIB LIB(CDCLAB)

En el motor: detener subscription y eliminar.

Validación esperada

Errores comunes

| Síntoma | Mitigación | |---|---| | Subscription no captura inserts nuevos | Tabla no journaled o imagen *BEFORE solamente — ver RB-CDC-002, RB-CDC-003 | | Auth error contra destino | Credenciales / certificado / token — ver RB-CDC-004 | | Destino aplica con delay alto | Performance del destino o batch size — ver RB-CDC-009 | | Carga inicial no completa | Volumen alto o configuración de chunk — ver docs Precisely |

Lecciones del lab

Recursos