Stream CDC Data from SQL Server
- how-to
To continuously load change data capture (CDC) events from a SQL Server database into Enterprise Analytics, you configure the Debezium SQL Server connector to publish changes to a Kafka topic, then create a Kafka link and collection in Enterprise Analytics.
The Debezium SQL Server connector reads the CDC change tables that SQL Server maintains for tracked tables and publishes row-level changes as JSON events to a Kafka topic. Enterprise Analytics reads from that topic using a Kafka link.
Prerequisites
-
A running Kafka cluster with a Debezium connector configured for your SQL Server database, producing messages in JSON, Avro, or Protobuf format.
-
If using JSON format, schema embedding must be disabled for both key and value converters in your Debezium configuration:
key.converter.schemas.enable=false value.converter.schemas.enable=false
-
A Kafka link in Enterprise Analytics. See Create a Kafka Pipeline Link.
Create an Enterprise Analytics Collection
The Kafka topic for a SQL Server table follows the naming convention <topic.prefix>.<database>.<schema>.<table>.
For example, if topic.prefix is sqlserver, the database is sales, the schema is dbo, and the table is transactions, the topic name is sqlserver.sales.dbo.transactions.
The following example creates a collection on a Kafka link to ingest Debezium SQL Server CDC records:
CREATE COLLECTION `Default`.`Default`.sqlserverTransactions
PRIMARY KEY (id: bigint)
ON `sqlserver.sales.dbo.transactions` AT kafkaLink
WITH {
"storage-format": {"format": "column"},
"kafka-sink": "true",
"keySerializationType": "JSON",
"valueSerializationType": "JSON",
"cdcEnabled": "true",
"cdcDetails": {
"cdcSource": "SQLSERVER",
"cdcSourceConnector": "DEBEZIUM"
}
};
| Parameter | Description |
|---|---|
|
The primary key field and its data type. Must match a column in the SQL Server table. |
|
The Kafka topic name. Must match the topic the Debezium connector publishes to. |
|
The name of the Kafka link that connects to your Kafka cluster. |
|
Set to |
|
Set to |
|
Set to |
To start ingesting data, connect the Kafka link:
CONNECT LINK kafkaLink;
Data Type Handling and Limitations
During ingestion, Debezium may convert SQL Server types in ways that differ from the native SQL Server representation.
Ingestion is performed based on the contents of the after field in each event — no schema metadata is used.
The following table shows how SQL Server types map to Enterprise Analytics types with the default Debezium configuration.
| SQL Server Type | Enterprise Analytics Type |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Debezium Configuration Options
Debezium provides configuration options to reduce data type mismatches.
For example, setting decimal.handling.mode = double causes SQL Server decimal values to be ingested as DOUBLE values in Kafka.
For a full list of options, see the Debezium SQL Server connector documentation.
| Test your complete data model with all expected data types before deploying to production to verify data is ingested as expected under your chosen configuration. |