Chapter 2. Installing Debezium connectors
Install Debezium connectors through AMQ Streams by extending Kafka Connect with connector plug-ins. Following a deployment of AMQ Streams, you can deploy Debezium as a connector configuration through Kafka Connect.
A Debezium installation requires the following:
- An OpenShift cluster
- A deployment of AMQ Streams with Kafka Connect
A user on the OpenShift cluster with
cluster-adminpermissions to set up the required cluster roles and API services
Java 8 or later is required to run the Debezium connectors.
To install Debezium, the OpenShift Container Platform command-line interface (CLI) is required. For information about how to install the CLI for OpenShift 4.4, see the OpenShift Container Platform 4.4 documentation.
- For more information about how to install AMQ Streams, see Using AMQ Streams on OpenShift.
- AMQ Streams includes a Cluster Operator to deploy and manage Kafka components. For more information about how to install Kafka components using the AMQ Streams Cluster Operator, see Deploying Kafka Connect to your cluster.
2.2. Kafka topic creation recommendations
Debezium uses multiple Kafka topics for storing data. The topics must be created by an administrator, or by Kafka itself by enabling auto-creation for topics using the
auto.create.topics.enable broker configuration property.
The following list describes limitations and recommendations to consider when creating topics:
- Database history topics (for MySQL and SQL Server connectors)
- Infinite (or very long retention).
- Replication factor of at least 3 in production.
- Single partition.
- Other topics
Optionally, log compaction enabled (if you wish to only keep the last change event for a given record).
In this case, configure the
delete.retention.mstopic-level settings in Apache Kafka so that consumers have enough time to receive all events and delete markers. Specifically, these values should be larger than the maximum downtime you anticipate for the sink connectors (for example, when you update them).
- Replicated in production.
You can relax the single partition rule, but your application must handle out-of-order events for different rows in the database (events for a single row are still totally ordered). If multiple partitions are used, Kafka determines the partition by hashing the key by default. Other partition strategies require using Simple Message Transforms (SMTs) to set the partition number for each record.
2.3. Deploying Debezium with AMQ Streams
To set up connectors for Debezium on Red Hat OpenShift Container Platform, you deploy a Kafka cluster to OpenShift, download and configure Debezium connectors, and deploy Kafka Connect with the connectors.
- You used Red Hat AMQ Streams to set up Apache Kafka and Kafka Connect on OpenShift. AMQ Streams offers operators and images that bring Kafka to OpenShift.
- Podman is installed.
Deploy your Kafka cluster. If you already have a Kafka cluster deployed, go to the next step.
You now have a working Kafka cluster that is running in OpenShift with Kafka Connect.
Check that your pods are running. The pod names correspond with your AMQ Streams deployment.
$ oc get pods NAME READY STATUS <cluster-name>-entity-operator-7b6b9d4c5f-k7b92 3/3 Running <cluster-name>-kafka-0 2/2 Running <cluster-name>-zookeeper-0 2/2 Running <cluster-name>-operator-97cd5cf7b-l58bq 1/1 Running
In addition to running pods, you should have a DeploymentConfig associated with Kafka Connect.
- Go to the Red Hat Integration download site.
- Download the Debezium connector archive(s) for your database(s).
Extract the archive(s) to create a directory structure for the connector plug-in(s). If you downloaded and extracted four archives, the structure looks like this:
$ tree ./my-plugins/ ./my-plugins/ ├── debezium-connector-mongodb | ├── ... ├── debezium-connector-mysql │ ├── ... ├── debezium-connector-postgres │ ├── ... └── debezium-connector-sqlserver ├── ...
Create a new
registry.redhat.io/amq7/amq-streams-kafka-25:1.5.0as the base image:
FROM registry.redhat.io/amq7/amq-streams-kafka-25:1.5.0 USER root:root COPY ./my-plugins/ /opt/kafka/plugins/ USER 1001
Build the container image:
podman build -t my-new-container-image:latest
Push your custom image to your container registry:
podman push my-new-container-image:latest
Point to the new container image. Do one of the following:
spec.imagefield of the
If set, this property overrides the
STRIMZI_DEFAULT_KAFKA_CONNECT_IMAGEvariable in the Cluster Operator.
apiVersion: kafka.strimzi.io/v1beta1 kind: KafkaConnector metadata: name: my-connect-cluster spec: #... image: my-new-container-image
install/cluster-operator/050-Deployment-strimzi-cluster-operator.yamlfile, edit the
STRIMZI_DEFAULT_KAFKA_CONNECT_IMAGEvariable to point to the new container image and reinstall the Cluster Operator. If you edit this file you will need to apply it to your OpenShift cluster.
The Kafka Connect deployment starts to use the new image.
For each Debezium connector that you want to deploy, create and apply a
KafkaConnectcustom resource that configures a connector instance. This starts running the connector against the configured database. When the connector starts, it connects to the configured database and generates change event records for each inserted, updated, and deleted row or document. Details for deploying a connector are in the following sections:
For more information on the
STRIMZI_DEFAULT_KAFKA_CONNECT_IMAGEvariable, see Using AMQ Streams on OpenShift.