debezium

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bingoxubin/article/details/87871272

1. 简介

官网地址:https://debezium.io/docs/

Debezium是一个开源项目,为捕获数据更改(Capture Data Change,CDC)提供了一个低延迟的流式处理平台,通过安装配置Debezium监控数据库,可以实时消费行级别(row-level)的更改。身为一个分布式系统,Debezium也拥有良好的容错性。

Debezium的源端(即支持监控哪些数据库) : MySQL,MongoDB,PostgreSQL,Oracle,SQL Server
Debezium的目标端(即可以数据导入端) : Kafka

Debezium的应用 : 实时同步数据,实时消费数据

在这里插入图片描述

2. 安装docker

找一台linux服务器,进行下面操作:

# yum install docker
# systemctl start docker

备用docker命令:

1.停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
2.查看当前有些什么images
docker images
3.删除images,通过image的id来指定删除谁
docker rmi <image id>
想要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
要删除全部image的话
docker rmi $(docker images -q)

3. start zookeeper

# docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 debezium/zookeeper:0.9

运行后,不要关闭,下面命令行操作,克隆新窗口进行操作。

4. start Kafka

# docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper debezium/kafka:0.9

运行后,不要关闭,下面命令行操作,克隆新窗口进行操作。

5. start Mysql

# docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw debezium/example-mysql:0.9

运行后,不要关闭,下面命令行操作,克隆新窗口进行操作。

6. Mysql-client

# docker run -it --rm --name mysqlterm --link mysql --rm mysql:5.7 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

运行后,不要关闭,下面命令行操作,克隆新窗口进行操作。

进行如下测试:
mysql> use inventory;
and then list the tables in the database:

mysql> show tables;
which should then display:
+---------------------+
| Tables_in_inventory |
+---------------------+
| customers           |
| orders              |
| products            |
| products_on_hand    |
+---------------------+
4 rows in set (0.00 sec)
Use the MySQL command line client to explore the database and view the pre-loaded data in the database. For example:

mysql> SELECT * FROM customers;

在这里插入图片描述

7. Kafka connect

docker run -it --rm --name connect -p 8083:8083 -e GROUP_ID=1 -e CONFIG_STORAGE_TOPIC=my_connect_configs -e OFFSET_STORAGE_TOPIC=my_connect_offsets -e STATUS_STORAGE_TOPIC=my_connect_statuses --link zookeeper:zookeeper --link kafka:kafka --link mysql:mysql debezium/connect:0.9

运行后,不要关闭,下面命令行操作,克隆新窗口进行操作。

检查:
$ curl -H "Accept:application/json" localhost:8083/
    The Kafka Connect service should return a JSON response message similar to the following:
{"version":"2.1.0","commit":"cb8625948210849f"}
This shows that we’re running Kafka Connect version 2.1.0. Next, check the list of connectors, again using your IP address in place of localhost:

$ curl -H "Accept:application/json" localhost:8083/connectors/
which should return the following:
[]

在这里插入图片描述

8. 监视MySQL数据库

curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/ -d '{ "name": "inventory-connector", "config": { "connector.class": "io.debezium.connector.mysql.MySqlConnector", "tasks.max": "1", "database.hostname": "mysql", "database.port": "3306", "database.user": "debezium", "database.password": "dbz", "database.server.id": "184054", "database.server.name": "dbserver1", "database.whitelist": "inventory", "database.history.kafka.bootstrap.servers": "kafka:9092", "database.history.kafka.topic": "dbhistory.inventory" } }'

在这里插入图片描述

   curl -H "Accept:application/json" localhost:8083/connectors/

在这里插入图片描述

9. 查看更改事件

# docker run -it --name watcher --rm --link zookeeper:zookeeper --link kafka:kafka debezium/kafka:0.9 watch-topic -a -k dbserver1.inventory.customers

10. 变更数据

UPDATE customers SET first_name='Anne Marie' WHERE id=1004;

在这里插入图片描述

11. 反馈结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/bingoxubin/article/details/87871272