Debezium MySQL源连接器

该Debezium的MySQL连接是源连接器,可以得到现有数据的快照,记录所有的MySQL服务器/群集在数据库中的行级变化。第一次连接到MySQL服务器时,它将读取所有数据库的一致快照。该快照完成后,连接器将连续读取提交给MySQL的更改,并生成相应的插入,更新和删除事件。每个表的所有事件都记录在单独的Kafka主题中,应用程序和服务可以轻松使用它们。

  • Confluent支持MySQL连接器0.9.3版和更高版本。
  • Confluent支持将此连接器与MySQL 5.6或更高版本一起使用。

安装MySQL连接器

您可以使用Confluent Hub客户端(推荐)安装此连接器,也可以手动下载ZIP文件。

confluent-hub install debezium/debezium-connector-mysql:latest

您可以通过替换latest版本号来安装特定版本。例如:

confluent-hub install debezium/debezium-connector-mysql:0.9.4

许可证

Debezium MySQL连接器是一个开源连接器,不需要Confluent企业许可证。

在MySQL服务器上启用二进制日志

必须将MySQL服务器配置为使用行级二进制日志,有关详细信息,请参见MySQL文档。MySQL的二进制日志或二进制日志以数据库执行的相同顺序记录所有操作,包括对表模式的更改或对表中存储的数据的更改。MySQL使用其binlog进行复制和恢复。

Debezium的MySQL连接器读取MySQL的二进制日志,以了解数据更改的内容和顺序。然后,它为binlog中的每个行级插入,更新和删除操作生成一个change事件,并在单独的Kafka主题中记录每个表的所有change事件。

这通常是在MySQL服务器配置文件中完成的,看起来类似于以下片段:

server-id         = 223344
log_bin           = mysql-bin
binlog_format     = row
binlog_row_image  = full
expire_logs_days  = 10

属性解释:

  • 对于MySQL集群中的每个服务器和复制客户端,server-id的值必须唯一。设置连接器时,还为连接器分配了唯一的服务器ID。
  • log_bin的值是二进制日志文件序列的基本名称。
  • binlog_format的值必须设置为row或ROW。
  • binlog_row_image的值必须设置为full或FULL。
  • expire_log_days的值是自动二进制日志文件删除的天数。默认值为0,表示“不自动删除”,因此请确保设置适合您的环境的值。

mysql8下弃用expire_log_days,替换为:binlog_expire_logs_seconds,默认值为30天,建议配置如下:

# ----------------------------------------------
# 自定义参数
# 设置日志清理周期为7天
binlog_expire_logs_seconds=604800
# 设置默认时区
default-time-zone='+8:00'
# ----------------------------------------------

快速开始

Debezium的MySQL连接器是一个源连接器,可以在单独的Kafka主题中记录每个表的事件,应用程序和服务可以轻松地使用它们。

安装连接器

如果要使用Docker映像来设置Kafka,ZooKeeper和Kafka Connect,请参考Debezium教程。对于以下教程,您需要在本地安装Confluent Platform。

导航到您的Confluent Platform安装目录,然后运行以下命令来安装连接器:

confluent-hub install debezium/debezium-connector-mysql:0.9.4

添加新的连接器插件需要重新启动Connect。使用Confluent CLI重新启动Connect。

提示

Confluent CLI开发命令的命令语法在5.3.0中已更改。这些命令已移至。例如,的语法为now 。有关更多信息,请参见confluent local。confluent local confluent start confluent local start

confluent local stop connect && confluent local start connect
Using CONFLUENT_CURRENT: /Users/username/Sandbox/confluent-snapshots/var/confluent.NuZHxXfq
Starting zookeeper
zookeeper is [UP]
Starting kafka
kafka is [UP]
Starting schema-registry
schema-registry is [UP]
Starting kafka-rest
kafka-rest is [UP]
Starting connect
connect is [UP]

检查MySQL插件是否已正确安装并由插件加载器加载:

curl -sS localhost:8083/connector-plugins | jq .[].class | grep mysql
"io.debezium.connector.mysql.MySqlConnector"

使用Docker设置MySQL(可选)

如果没有本机安装的MySQL,则可以使用以下命令来启动一个新容器,该容器运行预先配置了清单数据库的MySQL数据库服务器:

#Run docker container
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

启动一个MySQL命令行客户端。

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"'

启动Debezium SQL Server连接器

创建文件register-mysql.json以存储以下连接器配置:

{"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": "localhost:9092","database.history.kafka.topic": "schema-changes.inventory"}}

启动连接器。

curl -i -X POST -H "Accept:application/json" -H  "Content-Type:application/json" http://localhost:8083/connectors/ -d @register-mysql.json

开始您的Kafka消费者

在新的终端会话中启动使用者。

confluent local consume dbserver1.inventory.customers -- --from-beginning

当您在MySQL bash中输入SQL查询以添加或修改数据库中的记录时,将填充消息,并在您的用户终端上显示这些消息,其中显示已添加或已修改的记录。

# Explore the sample inventory database already populated in your MySQL client running in Docker
use inventory;
SELECT * FROM customers;
# Type these queries to see change events in the consumer terminal
UPDATE customers SET first_name='Anne Marie' WHERE id=1004;
DELETE FROM customers WHERE id=1004;

清理资源

删除连接器并停止Confluent服务。

curl -X DELETE localhost:8083/connectors/inventory-connector
confluent local stop

停止SQL Server容器。

docker stop mysqlterm mysql

注意

此处提供的部分信息来自Debezium社区最初提供的文档。Debezium生产的作品已获得知识共享3.0的许可。

dbz-connecor-mysql与jdbc-connector-mysql对比

  • 1、dbz-connector 支持数据插入、更新、删除的CDC,但jdbc-connector 仅支持插入、更新;
  • 2、jdbc-connect提供了mysql的源端、池端连接器,但是dbz仅提供为源端连接器,池端连接器,需要自行实现。
  • 3、dbz-connector-mysql 与 jdbc-connect的消息格式不兼容;

原文

https://docs.confluent.io/current/connect/debezium-connect-mysql/index.html

Debezium MySQL源连接器相关推荐

  1. 必需的 Debezium MySQL 连接器配置属性

    必需的 Debezium MySQL 连接器配置属性 官网地址: https://debezium.io/documentation/reference/1.5/connectors/mysql.ht ...

  2. Kafka连接器深度解读之JDBC源连接器

    在现实业务中,Kafka经常会遇到的一个集成场景就是,从数据库获取数据,因为关系数据库是一个非常丰富的事件源.数据库中的现有数据以及对该数据的任何更改都可以流式传输到Kafka主题中,在这里这些事件可 ...

  3. Flink系列之:Flink CDC深入了解MySQL CDC连接器

    Flink系列之:Flink CDC深入了解MySQL CDC连接器 一.增量快照特性 1.增量快照读取 2.并发读取 3.全量阶段支持 checkpoint 4.无锁算法 5.MySQL高可用性支持 ...

  4. 读 MySQL 源码再看 INSERT 加锁流程

    欢迎关注方志朋的博客,回复"666"获面试宝典 在之前的博客中,我写了一系列的文章,比较系统的学习了 MySQL 的事务.隔离级别.加锁流程以及死锁,我自认为对常见 SQL 语句的 ...

  5. MySQL 源码 需要 什么基础_MySQL 基础之 源码 部署

    源码部署 1. 需要先卸载一些软件 centos7 中需要先卸载 mariadb-libs 软件包 # rpm -e --nodeps mariadb-libs 2. 安装依赖包 yum -y ins ...

  6. 怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!

    写在前面 最近,在开发一个分库分表中间件,由于功能需求,需要分析MySQL协议,发现网上对于MySQL协议分析的文章大部分都过时了,原因是分析的MySQL版本太低了.怎么办呢?于是乎,我便硬着头皮开始 ...

  7. 通过 Mysql 官网配置更新本地的mysql源

    参考连接:https://blog.csdn.net/xyang81/article/details/51759200前提环境:Centos 6.* 本身配置的yum源自带的mysql版本为5.1:后 ...

  8. gcc编译器和mysql源码哪个难_源码编译mysql 5.5

    http://blog.csdn.net/aidenliu/article/details/6586610 源码编译mysql 5.5+ 安装过程全记录 分类: Mysql 2011-07-05 21 ...

  9. (二)企业部分之lnmp环境的搭建:mysql源码安装

    Web服务器架构 Web服务器架构一般主要由系统环境.Web服务器.数据库和语言组成. 可以有以下组成方式: 系统:linux unix windox mac freebsd aix Web服务器:a ...

最新文章

  1. View.setSystemUiVisibility(int) 方法使用
  2. JQuery中的html(),text(),val()区别
  3. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第5章-不确定系统的分析与综合
  4. 没学c语言可以学python_先学C语言还是Python?资深程序员往往是这样建议的!
  5. Matplotlib实例教程 | 统计DataFrame中文本长度分布(条形统计图)
  6. 就读计算机科学与技术的原因,清华大学转专业数据!23个专业无人响应!深层次原因究竟是什么?...
  7. CF1100F Ivan and Burgers(线性基)
  8. 被引10万次:21世纪高被引论文Top 10
  9. 熊猫烧香系列变种分析报告
  10. 图文左右滚动代码php,jQuery幻灯片左右滚动效果
  11. java虚拟机家族种类
  12. JsonUtils工具类,拿来使用即可
  13. 硬盘安装FREEBSD5.4详细步骤
  14. D类音频功放NS4110B电路设计
  15. java前景以及职业发展方向
  16. 这6款APP和游戏,是苹果选出的2019年年度最佳
  17. thinkphp 运行机制和优缺点
  18. win32 打印机任务管理的 node 模块 (3)详解Win32 Spooler API 获取打印机列表及状态
  19. 小马哥----高仿苹果6s 主板型号S106s 更换内核 刷机拆机主板图与开机识别图
  20. 2018 微信数据报告,看看你的微信用了多少天?

热门文章

  1. 关于对MIDlet套件进行数字签名
  2. ubuntu20.04 磁盘管理
  3. android studio 显示view树_Android手势分发和嵌套滚动机制
  4. Kingofark的人工智能启示录
  5. echarts柱状图 饼图 折线图
  6. 【C++】-- C++11基础常用知识点(下)
  7. 简单维修MacBook Air——更换SSD硬盘
  8. 第4章 虚拟机性能监控、故障处理工具(上)
  9. 干货!任务型对话中语言理解的鲁棒性测试 |清华刘劼西
  10. JavaScript效率PK——统计特定字符在字符串中出现的次数