- System Requirements
- Project Structure
- Step 1: Create the .env File
- Step 2: Docker Compose Configuration
- Step 3: Running Kafka and Debezium with Docker Compose
- Step 4: Installing MongoDB Kafka Connector
- Step 5: Configuring PostgreSQL and MongoDB CDC
- Step 6: Shutting Down Kafka and Debezium
- Troubleshooting
- Conclusion
Ensure you have the following system requirements:
- Docker 20.10 or later
- Docker Compose 1.27 or later
- A machine with at least 4GB of RAM
/opt/cdc
├── config
│ ├── connectors
│ │ ├── mongodb-connector.json
│ │ ├── postgresql-connector.json
│ │ └── register_connector.sh
│ ├── debezium
│ │ └── application.properties
├── kafka
│ ├── connect
│ │ ├── debezium-connector-db2
│ │ ├── debezium-connector-ibmi
│ │ ├── debezium-connector-informix
│ │ ├── debezium-connector-jdbc
│ │ ├── debezium-connector-mariadb
│ │ ├── debezium-connector-mongodb
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTE.md
│ │ │ ├── COPYRIGHT.txt
│ │ │ ├── LICENSE-3rd-PARTIES.txt
│ │ │ ├── LICENSE.txt
│ │ │ ├── README.md
│ │ │ ├── README_JA.md
│ │ │ ├── README_KO.md
│ │ │ ├── README_ZH.md
│ │ │ ├── bson-4.11.0.jar
│ │ │ ├── bson-record-codec-4.11.0.jar
│ │ │ ├── debezium-api-3.0.0.Final.jar
│ │ │ ├── debezium-connector-mongodb-3.0.0.Final.jar
│ │ │ ├── debezium-core-3.0.0.Final.jar
│ │ │ ├── mongo-kafka-connect-1.15.0-all.jar
│ │ │ ├── mongodb-driver-core-4.11.0.jar
│ │ │ └── mongodb-driver-sync-4.11.0.jar
│ │ ├── debezium-connector-mysql
│ │ ├── debezium-connector-oracle
│ │ ├── debezium-connector-postgres
│ │ ├── debezium-connector-spanner
│ │ ├── debezium-connector-sqlserver
│ │ └── debezium-connector-vitess
├── logs
│ └── kafka
├── .env
└── docker-compose.yml
Create a .env
file at the root of your project directory to specify environment variables required by Docker Compose.
Ensure that your docker-compose.yml
is set up to handle Zookeeper, Kafka, Debezium, and their respective UIs.
Start Kafka and Debezium containers using:
docker-compose up -d
To enable CDC for MongoDB, install the MongoDB Kafka Connector:
5cad0718eaa8 debezium/connect:3.0.0.Final "/docker-entrypoint.…" About an hour ago Up About an hour 8778/tcp, 0.0.0.0:8083->8083/tcp, [::]:8083->8083/tcp, 9092/tcp debezium-kafka-connect
root@DESKTOP-045RLF9:/opt/cdc/kafka/connect# docker cp 5cad0718eaa8:/kafka/connect/ ./
Copy the connector JAR file into the Debezium Kafka Connect container:
root@DESKTOP-045RLF9:/opt/cdc/kafka/connect/debezium-connector-mongodb# wget https://repo1.maven.org/maven2/org/mongodb/kafka/mongo-kafka-connect/1.15.0/mongo-kafka-connect-1.15.0-all.jar
Create connector configurations for PostgreSQL and MongoDB and submit them to the Kafka Connect REST API.
{
"name": "postgres-cdc",
"config": {
"connector.class": "io.debezium.connector.postgresql.PostgresConnector",
"database.hostname": "postgres",
"database.port": "5432",
"database.user": "postgres",
"database.password": "password",
"database.dbname": "mydatabase",
"database.server.name": "dbserver1",
"plugin.name": "pgoutput"
}
}
{
"name": "mongodb-cdc",
"config": {
"connector.class": "com.mongodb.kafka.connect.MongoSourceConnector",
"connection.uri": "mongodb://mongo:27017",
"database": "mydatabase",
"collection": "mycollection",
"topic.prefix": "mongo"
}
}
To stop the services, run:
docker-compose down
If Kafka or Debezium fail to start, check logs using:
docker logs debezium-kafka-connect
This setup enables real-time change data capture between PostgreSQL and MongoDB using Debezium and Kafka.
https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html