Data Connectors
Purpose#
The Data Connectors page is where every connection the platform uses is registered once and then reused everywhere. Its subtitle states the intent plainly: "Read-only relational databases that Abrq DIP pulls CDC from. Passwords are encrypted at rest (Fernet) and never returned by the API."
Register a source here and CDC tables, file ingestions, exports, and pipelines all reference it by name. Rotating a password is one edit in one place — never an edit per pipeline.
Before you begin#
- Read — listing connectors and opening one needs any authenticated role.
- Create, edit, delete, and test — all require the
editorglobal role or above. - Network reachability from the Abrq DIP host to the target: the test runs server-side, so your laptop's access proves nothing.
- Credentials for the target. For source databases, prepare a read-only account before you start; see CDC strategies for the grants each strategy needs.
Warning. Passwords are encrypted at rest with Fernet and are never returned by the API — not to the UI, not to an export, not to an admin. Store them in your own secret manager as well; Abrq DIP is not a place to look a password up later.
Supported engines#
Step 1 of the wizard is a searchable card picker. The label and default port are exactly:
| Engine card | Default port |
|---|---|
| PostgreSQL | 5432 |
| CockroachDB | 26257 |
| MySQL | 3306 |
| MariaDB | 3306 |
| SQL Server | 1433 |
| SingleStore | 3306 |
| Snowflake | 443 |
| Kafka (stream destination) | 9092 |
| S3 (AWS · MinIO · R2 · S3-compatible) | 443 |
| Azure Blob Storage | 443 |
| Google Cloud Storage | 443 |
| FTP | 21 |
| FTPS (FTP over TLS) | 21 |
Create a connector#
The wizard has two steps.
Step 1 — Connect data source#
Pick the engine. The picker is searchable, so type post or s3 rather
than scanning the grid. Your choice sets the default port and, more
importantly, relabels the fields in step 2 so an object store does not
ask you for a "database".
Step 2 — Fill in the details#
Step 2 has four sections:
- Identity — the human name this connector is known by everywhere else.
- Connection — host, port, and database (or their per-engine equivalents, below).
- Authentication — username and password (or key and secret).
- Test connection — run it, read the result, then create.
Step 3 — Test, then create#
Select Test connection. For every engine except Kafka, a passing test is a hard gate on creation: until one succeeds the create button stays disabled and the form says "Run a successful test to enable "Create connector"."
A pass reads "✓ Connection succeeded" and reports the server version. Read the warnings underneath before moving on — a test can pass and still be telling you something important.
Field reference#
Common fields, in the order the form presents them:
| Field | Required | Validation | Effect |
|---|---|---|---|
| Name | yes | Unique, human-readable | The label used in every picker and in run logs |
| Engine | yes | One of the cards in step 1 | Sets default port, field labels, and which CDC strategies are legal |
| Host | yes | Hostname or address reachable from the Abrq DIP host | Where the platform connects |
| Port | yes | Integer 1–65535; pre-filled from the engine | The TCP port used for the connection |
| Database | usually | Engine-dependent (see relabelling below) | The database, bucket, container, or base directory scoped to this connector |
| Username | usually | Engine-dependent | The principal used to authenticate |
| Password | yes on create | Encrypted with Fernet at rest; never returned by the API | The secret used to authenticate |
Per-engine field relabelling#
The same underlying fields carry different labels — and different meanings — per engine:
| Engine | Host becomes | Database becomes | Username becomes | Password becomes |
|---|---|---|---|---|
| S3 (and S3-compatible) | Region or endpoint | Bucket | Access key ID | Secret access key |
| Azure Blob Storage | Account name or URL | Container | — | Storage key or SAS token |
| Google Cloud Storage | API endpoint (optional) | Bucket | — | Service-account JSON key |
| FTP / FTPS | (host) | Base directory | (user) | (password) |
| Kafka | Bootstrap servers | SASL mechanism | SASL username | SASL password |
Notes that matter in practice:
- S3 adds a Secure (HTTPS) toggle that swaps the port between 443 and 9000 — the second is the usual MinIO plaintext port — and a Buckets list so you can see what the credentials can actually reach.
- Google Cloud Storage wants the whole service-account JSON key pasted into the password field, braces and all, not just the private-key portion.
- FTPS uses port 21: "21 for explicit FTPS (AUTH TLS upgrade). Implicit FTPS on 990 is not currently supported."
- Kafka takes comma-separated bootstrap servers in the host field,
for example
192.0.2.10:9092,192.0.2.11:9092, and uses the database field for the SASL mechanism with username and password as the SASL credentials.
Read the test warnings#
Write privileges on a source#
Any successful test against an account that can write reports:
Note: this user has write privileges. Use a read-only role for source databases.
Nothing is blocked — but a source connector with write rights is a standing risk. Swap in a read-only role before you build pipelines on it.
MySQL binlog readiness#
For MySQL, the test additionally probes the binary-log settings that the
log_mysql CDC strategy depends on, and reports what would break:
log_bin is OFF — log_mysql CDC strategy will not work
binlog_format is 'STATEMENT'; log_mysql CDC requires 'ROW'
binlog_row_metadata is 'MINIMAL'; log_mysql CDC needs 'FULL' so column names land in the binlog
Fix these on the server before creating CDC tables against it — the connector will still save, but the first sync will fail. The full prerequisite list is in CDC strategies.
Tip. Test results are persisted. Every run appears in Executions with kind
conn_test, so "it worked yesterday" is an answerable question rather than an argument.
Edit a connector#
Open the connector and change what you need. The password field behaves differently from the rest:
- Its hint reads "Leave blank to keep the existing one. Type a new value to rotate."
- Its placeholder is
(unchanged). - The current value is never shown, because the API never returns it.
To rotate a credential, type the new secret, re-test, and save. Leaving the field untouched keeps the stored secret exactly as it is.
Browse the schema#
The row action Schema opens a live browser over the connector's tables and columns — it queries the source at that moment rather than replaying a cached snapshot, so it doubles as a permissions check.
If introspection fails you get an error, never a plausible-looking empty list. An empty result means the account genuinely sees no tables; that is a grant problem on the source, not a display quirk.
Delete a connector#
Deleting is a soft delete, and it is designed not to fail:
- Select Delete on the connector.
- Type the connector's name to confirm.
- Confirm.
The row disappears from the list, and dependents keep working until their next sync. There is no "connector is in use" error to fight, because deletion never blocks on references. That trade is deliberate: you can retire a connector immediately, and the pipelines that still reference it surface the problem on their own next run rather than blocking your clean-up.
Warning. Because dependents are not blocked, check Data Lineage or the CDC list for references before you delete. A soft delete is quiet: the first sign of a mistake is usually a failed sync, not a refused delete.
Failure modes#
| What you see | What it means | What to do |
|---|---|---|
| Create button stays disabled, "Run a successful test to enable "Create connector"." | No passing test yet — the gate applies to every engine except Kafka | Run Test connection until it passes; fix host, port, credentials, or network reachability first |
| Port rejected | Port must be an integer in 1–65535 | Re-enter the port; use the engine's default if unsure |
Note: this user has write privileges. Use a read-only role for source databases. |
The test passed with an over-privileged account | Create a read-only role on the source and re-point the connector |
log_bin is OFF — log_mysql CDC strategy will not work |
MySQL binary logging is disabled | Enable log_bin on the MySQL server, then re-test |
binlog_format is 'STATEMENT'; log_mysql CDC requires 'ROW' |
Row-level events are not being written | Set binlog_format=ROW and restart the server |
binlog_row_metadata is 'MINIMAL'; log_mysql CDC needs 'FULL' so column names land in the binlog |
The binlog omits column names | Set binlog_row_metadata=FULL, then re-test |
| Schema browser shows an error | Live introspection failed — bad grants, dropped session, or network | Re-test the connection, then check the account's catalogue permissions |
| A pipeline fails after a connector was deleted | The soft delete hid the row; the dependent ran afterwards | Re-create the connector with the same name, or re-point the dependent |