技术标签: Kafka Debezium kafka 大数据
本文使用的是debezium连接器来实时同步SQL server数据,再写入到kafka消息队列中。
1、开启 SQL Server Agent 服务,确保SQL server 代理 服务正常运行
2、开启cdc机制
-- 执行下面sql语句
-- 创建表
CREATE TABLE [dbo].[student] (
[name] char(25) COLLATE Chinese_PRC_CI_AS NOT NULL,
[sex] char(10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[id] int NOT NULL,
[age] int NOT NULL
)
GO
-- 开启cdc
EXEC sys.sp_cdc_enable_db
GO
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo'
, @source_name = N'student' -- 表名
, @role_name = N'cdc_admin'--增加的角色
, @capture_instance = N'student_instance'--实例名
, @supports_net_changes = 1
, @filegroup_name = N'PRIMARY';
GO
-- 查看数据库是否启用cdc
SELECT name,is_cdc_enabled FROM sys.databases WHERE is_cdc_enabled = 1;
-- 查看表是否启用cdc
SELECT name,is_tracked_by_cdc FROM sys.tables WHERE is_tracked_by_cdc = 1;
-- 有结果则说明开启成功
1、下载 debezium-connector-sqlserver 下载地址
2、配置 $KAFKA_HOME/config/connect-distributed.properties,详见实时同步Oracle数据,写入Kafka
3、解压下载的tar包到 connectors目录中

cd /usr/software/kafka/kafka_2.12-2.4.0/config/
connect-distributed.sh ./connect-distributed.properties
# 确认是否正确配置connector
curl -s node1:18083/connector-plugins | jq
# 有下面结果说明成功
{
"class": "io.debezium.connector.sqlserver.SqlServerConnector",
"type": "source",
"version": "1.4.1.Final"
},
# 启动connector的两种方法
# 方法1
curl -s -X POST -H "Content-Type: application/json" --data '
{
"name": "sqlserver-kafka-connector",
"config": {
"connector.class" : "io.debezium.connector.sqlserver.SqlServerConnector",
"tasks.max" : "1",
"database.server.name" : "server1",
"database.hostname" : "hostname",
"database.port" : "1433",
"database.user" : "username",
"database.password" : "password",
"database.dbname" : "CDCTest",
"database.history.kafka.bootstrap.servers" : "node1:9092,node2:9092,node3:9092",
"database.history.kafka.topic": "schema-changes.inventory"
}
}' http://node1:18083/connectors | jq
# 方法2
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" http://node1:18083/connectors/ -d @register-sqlserver.json
# register-sqlserver.json 内容如下
{
"name": "sqlserver-kafka-connector",
"config": {
"connector.class" : "io.debezium.connector.sqlserver.SqlServerConnector",
"tasks.max" : "1",
"database.server.name" : "server1",
"database.hostname" : "hostname",
"database.port" : "1433",
"database.user" : "username",
"database.password" : "password",
"database.dbname" : "CDCTest",
"database.history.kafka.bootstrap.servers" : "node1:9092,node2:9092,node3:9092",
"database.history.kafka.topic": "schema-changes.inventory"
}
}
注意:方法2 需要进入到存放 register-sqlserver.json 的目录中
# 启动成功后可以查看到一下内容,说明启动成功
[root@node1 kafka]# curl -s node1:18083/connectors | jq
[
"sqlserver-kafka-connector",
"oracle-kafka-connector"
]
[root@node1 kafka]# curl -s node1:18083/connectors/sqlserver-kafka-connector/status | jq
{
"name": "sqlserver-kafka-connector",
"connector": {
"state": "RUNNING",
"worker_id": "192.168.2.170:18083"
},
"tasks": [
{
"id": 0,
"state": "RUNNING",
"worker_id": "192.168.2.170:18083"
}
],
"type": "source"
}
-- 往student表插入数据
insert into student values(1,'jack',22,'male')
-- server1.dbo.student 为我们需要消费的DML数据
[root@node2 ~]# kafka-topics.sh --list --bootstrap-server node1:9092,node2:9092,node3:9092
TEST.KAFKA.STUDENT
TEST.KAFKA._GENERIC_DDL
__consumer_offsets
connect-configs
connect-offsets
connect-status
schema-changes.inventory
server1
server1.dbo.student
server1.dbo.teacher
shcema-changes.inventory
-- 消费server1.dbo.student
kafka-console-consumer.sh --topic server1.dbo.student --bootstrap-server node1:9092,node2:9092,node3:9092 --from-beginning | jq
{
"before": null,
"after": {
"id": 1,
"name": "jack ",
"age": 22,
"sex": "male "
},
"source": {
"version": "1.4.1.Final",
"connector": "sqlserver",
"name": "server1",
"ts_ms": 1612779384700,
"snapshot": "false",
"db": "CDCTest",
"schema": "dbo",
"table": "student",
"change_lsn": "00000030:000002b8:0002",
"commit_lsn": "00000030:000002b8:0003",
"event_serial_no": 1
},
"op": "c",
"ts_ms": 1612779385938,
"transaction": null
}
如有问题,欢迎一起交流讨论。
文章目录 业务场景 zk保证canal server的高可用,同一时间只有一个canal-server真正在工作。 集群环境 zookeeper部署&配置 下载: 解压 修改配置 分别在三台机器上启动验证zk kafka部署&配置 canal部署&配置 下载 (https://github.com/alibaba/canal/releases) 转载自:https://ww...
Flinkx实时和离线同步Postgresql数据到Kafka 一、环境部署 1.选择一台服务器,安装了Flink的更好,使用git工具把项目clone到本地 或者直接下载源码 2.编译插件 编译需要下载很多依赖,这边比较慢,如果编译过程中报错 找不到DB2、达梦、gbase、ojdbc8等驱动包,这个时候可以使用内部提供的脚本进行安装 ./install_jars.sh ,脚本在bin目录下面。...
文章目录 环境准备 安装maxwell 下载地址 安装 创建元数据存放数据库 被同步的数据库上创建用于数据复制的账号,并授权 配置mysql同步到kafka任务 运行任务 全表同步 可能遇到的问题 Maxwell是一个通过解析MySQL的binlog日志,伪装成Mysql的slave实时将master的数据变化同步给外部系统的一个工具。因为最近有一个项目中有类似需要将Mysql的数据实时同步到Sp...
因为关系型数据库的查询速度有限,正好学习了一下es,相采用mysql与es实时数据的同步,查询从es进行查询,这里记录一下canal如何配置和实现数据同步的,具体步骤如下: 下载地址 链接:https://pan.baidu.com/s/135JUWTpIvvkFHBgR5bvk_g 提取码:0s14 –来自百度网盘超级会员V4的分享 更改mysql的binlog模式为 ROW 将下载...
测试版本: elasticsearch 7.10.2 kibana 7.10.2 logstash 7.10.2 jdk java-11.0.10 1、新建索引index:test2 2、新建配置文件:sqlserver.conf 4、执行: 5、查询数据 ...
下列代码,涉及到数据Kafka接入,数据Spark算子数据处理,Kafka偏移量记录,数据反压,数据批量插入MySql等所有操作步骤。...
一、两主机间数据的实时同步 1.同步原理 利用监控服务(inotify),监控同步数据服务器目录中信息的变化发现目录中数据产生变化,就利用rsync服务推送到备份服务器上 2.实现方式 inotify+rsync方式实现数据同步 sersync 在inotify 软件基础上进行开发的,功能更加强大 3.inotify 异步的文件系统时间监控机制,利用事件驱动机制,而无须通过诸如cron等的轮询机制...
数据的实时同步 要实现数据的实时同步需要利用监控服务inotify,监控同步数据服务器目录中信息的变化,当发现目录中的数据产生变化,就利用rsync服务推送到备份服务器上。 inotify:异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的 轮询机制来获取事件,linux内核从2.6.13起支持 inotify,通过inotify可以监控文 件系统中添加、删除、修改、移动等各...
方案比较 log解析 SQL查询 全库同步 是 否 影响生产库 否 是 同步约束条件 否 只能按数字型timestamp/主键id增量同步 (若直接用timestamp,需要修改源码) log解析=>数据同步 Oracle:ogg MySQL:binlog解析。canal SQL查询=>数据同步 streamsets 基本操作 flume 方案 flume-ng-sql-source读...
需求:每小时同步一次数据,一天最多答十几万条。 由于刚进公司不久,小白只会PHP,所以第一时间会考虑用PHP实现,每次都是先truncate table 在插入表。 PHP初次实现 获取所有的表名 根据表名获取数据 一条一条插入数据(一条一条) 下面是获取所有的数据后进行插入 第二次 PHP优化 每天上班第一件事,看进程有没有挂,果然挂了,经测试原来是内存不足所导致的。因此不能一次性插入所有的数据...