Table of Contents
- Compatible versions
- Key Features
- How It Works
- Core Concepts
- Prerequisites
- Configuration
- Enabling Journaling
- Granting User Permissions
- Enabling Incremental Load
- Estimating Change Volume
- Housekeeping
Compatible versions
IBM i 7.2 and earlier are out of IBM support and are not covered. Date and time columns are decoded from
QSYS2.SYSCOLUMNS2, whose DDS format columns were added in IBM i 7.3 TR11 / 7.4 TR5; below those Technology Refresh levels the decoder assumes the *ISO format, so files using *MDY, *EUR or another DDS format need a TR at or above those levels.Key Features
- Real-time Change Data Capture (CDC): the connector reads native IBM i journal binaries directly, capturing and streaming changes (inserts, updates, and deletes) as they occur, with end-to-end latency typically between 50–200 ms from commit to publication.
- Agentless: no software needs to be installed on the IBM i system. The connector accesses journals remotely via JT400, keeping SQL engine involvement minimal.
- Low System Overhead: lightweight binary parsing keeps CPU impact low on the source partition — typically under 2% at low volumes (<10k changes/min), ~5% at moderate volumes (~50k changes/min), and 10–15% at high volumes (100k+ changes/min) — leaving headroom for business-critical workloads.
- High Throughput: continuous streaming with exact receiver offset tracking sustains more than 50k changes/sec on mid-range Power9 systems and remains stable under burst load.
- Initial Load: the connector automatically performs an initial full table load using JDBC + SQL snapshots.
- Fault-tolerant: the connector tracks exact journal receiver offsets and resumes replication from the last known position in case of failures, ensuring data consistency and minimal downtime.
How It Works
The connector combines two mechanisms:- Snapshots: initial full loads are performed over JDBC using SQL.
- Change capture: ongoing changes are read directly from the native IBM i journal binaries attached to your physical files, via a remote procedure call (RPC) approach over JT400. Rather than polling journals through SQL, the connector streams raw journal entries continuously and tracks exact receiver offsets, minimizing load on the SQL engine and transferring changes in a compact binary format.
Core Concepts
- Journal Receiver: the physical storage object containing change records with before-and-after data images, metadata, timestamps, and transaction information.
- Journal: the database tracking mechanism that records changes to specific database objects, maintains metadata, and points to Journal Receivers.
- Journal Library: the repository storing journal definitions and organizing journal objects.
- Journal Receiver Library: a separate storage location for Journal Receivers, enabling better organization and maintenance.
Prerequisites
- The tables you want to ingest must be journaled. See Enabling Journaling
- You will need a user with the necessary permissions. See Granting User Permissions
- For incremental load support, a signal table must be created and journaled. See Enabling Incremental Load
- Network access from Popsink to the IBM i host on the ports listed below. See Network Access
Network Access
The connector reaches the IBM i system over JT400, which uses the DB2 for i (DRDA/DDM) listener and the IBM i host servers. Allow outbound TCP traffic from Popsink to the source host on the following ports:If the system is configured for TLS, use
448 for the secure DDM/DRDA listener and the 947x range (9471, 9473, 9475, 9476) instead of 847x for the host servers.Configuration
Advanced Options
Connecting through an SSH Tunnel
If the database is only reachable through a bastion host, enable SSH Tunnel and provide:Table Selection
After a successful credential check, pick the tables to replicate from the discovered list. Only journaled tables can be selected — the list indicates the journaling status of each table. The selection is stored as a comma-separated whitelist.Enabling Journaling
To capture changes, the tables you want to track must be journaled. If your tables are already journaled, you can skip to Granting User Permissions.-
Create a Journal Receiver:
-
Create a Journal attached to the Receiver:
-
Start journaling the tables you want to track:
-
Enable before/after image capture (recommended):
Capturing both before and after images is required to correctly handle updates to Primary Key columns.
Granting User Permissions
The connector’s user profile needs the following authorities. No SQL-level SELECT authority is needed on system UDTFs.- *EXECUTE authority on the journal library and the receiver library
- *USE and *OBJEXIST authority on the journal object
- *USE authority on the journal receivers
Enabling Incremental Load
To enable incremental load, the connector uses a signal table:-
Create the signal table:
-
Journal this table in the same journal as the tracked tables:
- Grant the user write permissions on this table (this table only — no write access is needed anywhere else).
Estimating Change Volume
You can estimate your daily change volume by counting journal entries over the last 24 hours:Housekeeping
Journal Receiver Retention
Journal receivers take up disk space, so it is best practice to delete old ones regularly. There is a tradeoff between retention and the operational resilience of your replication pipeline: longer retention gives you more time to recover from outages before having to resync, while shorter retention takes up less space. We recommend a maximum retention of 7 days, and a minimum of 1 day depending on your requirements.-
Delete journal receivers older than 7 days:
Wildcard patterns are supported (e.g.
RECEIVER_NAME*). You can schedule this command periodically usingWRKJOBSCDE. -
Monitor active receivers:
-
Monitor receiver disk usage:
Stopping and Restarting CDC
-
Stop CDC connectivity:
-
Restart CDC connectivity:
Disabling Journaling
- Stop journaling a table: