背景:

某公司有三个数据库,分别为MySql、Oracle和PostgreSql。原有业务的数据都是来自于这三个DB,此处委托将原有的三个数据库整合成一个Mysql。

要求:

  1.不影响原有系统的继续使用。

  2.原有数据迁移至新的数据库。

  3.新的Mysql中的同一张表的数据可能来自不同的数据库,举个例子:PostgreSql:User(name),Oracle:User(age)——》Mysql:User(name,age)。

架构:

(涉及内部服务器,由本地简单搭建演示记录这一过程)

一、基于Docker搭建Debezium环境

(1).搭建zookeeper

  1. docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper

(2).搭建kafka

  1. docker run -d --name kafka -p 9092:9092 -p 8083:8083 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=<IP地址>:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT:// <IP地址>:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v C:\data_share:/home/data wurstmeister/kafka

tips:

<IP地址>全文对应同一个

1. 留8083端口为后续kafka-connect暴力Api使用。

2. -v 预留数据卷,共享kafka-connect扩展,方便上传扩展包。

3. <IP地址>保证Api可访问,zookeeper和kafka间有IP认证。如:zk和kafka用服务器内网IP,但当使用外网IP访问kafka时会认证不过,见zk官网。

(3).准备kafka-connect集群启动文件

修改/opt/kafka/config/connect-distributed.properties

  1. #kafka集群
    bootstrap.servers=<IP地址1>:9092,<IPd地址2>:9092
    #Api的端口
  2. rest.port=8083
  3. #用于其他worker连接
  4. rest.advertised.host.name=<IP地址>
  5. rest.advertised.port=8083
    #消息只要payload,<选择性设置>
    key.converter.schemas.enable=false
    value.converter.schemas.enable=false
    #kafka-connect的扩展路径,指向kafka预留的 -v C:\data_share:/home/data

    plugin.path=/home/data

(4).添加kafka-connect的Debezium扩展包 (以Mysql为例)

MySql本地版本5.7+,下载MySQLConnector plug-in,解压缩到为kafka预留的数据卷映射地址 C:\data_share

https://debezium.io/releases/1.5/

(5). 启动connect集群

  1. ./opt/kafka/bin/connect-distributed.sh ../config/connect-distributed.properties

检测是否成功:

  1. ./kafka-topic.sh --bootstrap-server <IP地址>:9092 --list

 (6).调用Connect 配置连接属性

使用Postman 发送Post请求创建Connect   路径 <IP地址>:8083/connectors

(如有多个数据库源,创建多个Connect,保证name唯一)

请求体Json:

  1. {
  2. "name": "local_mysql",
  3. "config": {
  4. "connector.class": "io.debezium.connector.mysql.MySqlConnector",
  5. "database.hostname": "127.0.0.1",
  6. "database.port": "3306",
  7. "database.user": "root",
  8. "database.password": "123456",
  9. "database.server.id": "9999",
  10. "database.server.name": "cdc_local",
  11. "database.whitelist": "inventory",
  12. "database.history.kafka.bootstrap.servers": "<IP地址>:9092",
  13. "database.history.kafka.topic": "history.local.inventory",
  14. "include.schema.changes": "true"
  15. }}
    #name 创建的连接名
    #config 配置信息
    #connector.class 连接器类
    #database.hostname 需要捕获的数据库地址
    #database.port 数据库端口
    #database.server.id 服务id(保证唯一)
    #database.server.name 服务名,会加在topic前面 如下:cdc_local.inventory.orders
    #database.whitelist 监听的数据库 ","分割
    #database.history.kafka.bootstrap.servers kafka地址
    #database.history.kafka.topic 连接器将使用此代理(向其发送事件的代理)和主题名称在Kafka中存储数据库架构的历史记录。重新启动后,连接器将恢复binlog连接器应开始读取的时间点上存在的数据库的架构
    #include.schema.changes 是否包含表的改变

查看kafka-topic.sh

  1. ./kafka-topics.sh --bootstrap-server <IP地址>:9092 --list

  

Debezium实现多数据源迁移(一)的更多相关文章

  1. 激活、复制、使用R/3标准数据源(RSA5、RSA6、RSA1)

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. confluence6.3.1部署+数据迁移

    目录: 环境准备 搭建方法 数据迁移 搭建过程中的bug 1,confluence部署 1.1,环境准备 Java:jdk1.8 mysql: 数据库编码规则选择utf8 -- UTF-8 Unico ...

  3. weblogic迁移总结

    weblogic使用的数据库时DB2 1. 图形化安装weblogic和域,或者静默安装. 2. 查看环境变量env并修改,修改系统默认语言(根据实际情况) 3. 修改weblogic页面打开较慢问题 ...

  4. Amazon Redshift数据迁移到MaxCompute

    Amazon Redshift数据迁移到MaxCompute Amazon Redshift 中的数据迁移到MaxCompute中经常需要先卸载到S3中,再到阿里云对象存储OSS中,大数据计算服务Ma ...

  5. MYSQL复制

    今天我们聊聊复制,复制对于mysql的重要性不言而喻,mysql集群的负载均衡,读写分离和高可用都是基于复制实现.下文主要从4个方面展开,mysql的异步复制,半同步复制和并行复制,最后会简单聊下第三 ...

  6. 【MySQL】主备复制

    复制对于mysql的重要性不言而喻,mysql集群的负载均衡,读写分离和高可用都是基于复制实现.下文主要从4个方面展开,mysql的异步复制,半同步复制和并行复制,最后会简单聊下第三方复制工具.由于生 ...

  7. BW:如何加载和生成自定义的层次结构,在不使用平面文件的SAP业务信息仓库

    介绍 通常情况下,报告需要在一个类似树的结构来显示数据.通过启用此特性在SAP BW层次结构.高级数据显示的层次结构的顶层节点.更详细的数据可以向下钻取到的层次结构中的下级节点的可视化. 考虑一个例子 ...

  8. web中间件切换(was切tomcat)

    一.数据源迁移: ①数据源配置在web容器还是在项目本身? 根据开发与生产分离原则选择配置到web容器,以免开发泄露数据库密码. ②数据库密码加密 原先was的数据源直接在console控制,密码是密 ...

  9. pgloader 方便的数据迁移工具

    pgloader 是一个支持多种数据源迁移到pg 数据库的工具,高性能,使用灵活同时作者 也提供了docker 版本的镜像,今年3月份使用此工具的时候,发现好久都没更新了,但是 最近作者有了新版本的发 ...

随机推荐

  1. CentOS 7 升级内核版本

    1.查看当前内核版本 $ uname -r 3.10.0-514.el7.x86_64 $ uname -a Linux k8s-master 3.10.0-514.el7.x86_64 #1 SMP ...

  2. spring再学习之AOP事务

    spring中的事务 spring怎么操作事务的: 事务的转播行为: 事务代码转账操作如下: 接口: public interface AccountDao { //加钱 void addMoney( ...

  3. C++ part4

    红黑树 references: 红黑树详细分析,看了都说好 关于红黑树(R-B tree)原理,看这篇如何 性质: 1.节点是红色或黑色 2.根节点是黑色 3.叶子节点(叶子节点均为NULL)都是黑色 ...

  4. CVE-2018-8120 提权

    经验证,诸多版本的Windows系统均存在该漏洞,文末同时附带一份利用该漏洞制作的提权工具,以供学习.经测试该工具支持Win2003 x32/x64.WinXP x32.Win7 x32/x64, W ...

  5. μC/OS-III---I笔记12---任务管理

    任务管理任务切换应该算是UCOS最基本的部分,首先保存当前任务寄存器的内容到当前任务的堆栈:接着弹出即将进行的任务的堆栈内容到寄存器中然后就是按寄存器内容执行,这个过程成为上下文切换.任务堆栈在创建任 ...

  6. 微信小程序开发抖音去水印功能

    之前找了很多抖音去水印的工具全是广告,所以索性自己写了一个,提供给大家免费试用以下是微信小程序的二维码 使用教程: 1.打开微信搜索小程序:沸点软件技术服务 2.打开沸点软件技术服务小程序 3.去抖音 ...

  7. HTML5 download 执行条件

    HTML5 download 执行条件 同一个域名下的资源 http only 绝对路径/相对路径 都可以 demo https://cdn.xgqfrms.xyz/ https://cdn.xgqf ...

  8. Flutter Android Toast Message(flutter访问Android Toast Message)

    原文 Android Toast通知可用于向用户发送快速消息,并在几秒钟后消失. 但是当涉及Flutter时,没有直接的方式来显示这些Toast消息.因此,我们需要找到一种替代方法来实现它.在这种情况 ...

  9. Redis 博文索引

    博文索引 Redis 对象与编码 Redis 持久化 Redis 主从复制 Redis 哨兵 Redis 缓存淘汰 Redis 集合统计 Redis 简介

  10. django学习-1.开始hello world!

    1.前言 当你想走上测试开发之路,用python开发出一个web页面的时候,需要找一个支持python语言的web框架.django框架有丰富的文档和学习资料,也是非常成熟的web开发框架,想学pyt ...