代码先锋网 代码片段及技术文章聚合

实时同步sqlserver数据,写入kafka

技术标签: Kafka  Debezium  kafka  大数据

序言

本文使用的是debezium连接器来实时同步SQL server数据,再写入到kafka消息队列中。

一、sqlserver开启CDC机制

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;

-- 有结果则说明开启成功

二、配置connector

1、下载 debezium-connector-sqlserver 下载地址

2、配置 $KAFKA_HOME/config/connect-distributed.properties,详见实时同步Oracle数据,写入Kafka

3、解压下载的tar包到 connectors目录中
在这里插入图片描述

三、启动connector

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

四、同步sqlserver数据到kafka

-- 往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
}

如有问题,欢迎一起交流讨论。

上一篇:实时同步Oracle数据,写入Kafka

版权声明:本文为qq_42599616原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42599616/article/details/113759431

智能推荐

mysql+canal+kafka数据实时同步

文章目录 业务场景 zk保证canal server的高可用,同一时间只有一个canal-server真正在工作。 集群环境 zookeeper部署&配置 下载: 解压 修改配置 分别在三台机器上启动验证zk kafka部署&配置 canal部署&配置 下载 (https://github.com/alibaba/canal/releases) 转载自:https://ww...

Flinkx实时和离线同步Postgresql数据到Kafka

Flinkx实时和离线同步Postgresql数据到Kafka 一、环境部署 1.选择一台服务器,安装了Flink的更好,使用git工具把项目clone到本地 或者直接下载源码 2.编译插件 编译需要下载很多依赖,这边比较慢,如果编译过程中报错 找不到DB2、达梦、gbase、ojdbc8等驱动包,这个时候可以使用内部提供的脚本进行安装 ./install_jars.sh ,脚本在bin目录下面。...

Maxwell 配置实时将MySQL数据同步到Kafka

文章目录 环境准备 安装maxwell 下载地址 安装 创建元数据存放数据库 被同步的数据库上创建用于数据复制的账号,并授权 配置mysql同步到kafka任务 运行任务 全表同步 可能遇到的问题 Maxwell是一个通过解析MySQL的binlog日志,伪装成Mysql的slave实时将master的数据变化同步给外部系统的一个工具。因为最近有一个项目中有类似需要将Mysql的数据实时同步到Sp...

canal实时同步mysql数据添加至kafka同步至elasticsearch

因为关系型数据库的查询速度有限,正好学习了一下es,相采用mysql与es实时数据的同步,查询从es进行查询,这里记录一下canal如何配置和实现数据同步的,具体步骤如下: 下载地址 链接:https://pan.baidu.com/s/135JUWTpIvvkFHBgR5bvk_g 提取码:0s14 –来自百度网盘超级会员V4的分享 更改mysql的binlog模式为 ROW 将下载...

logstash同步sqlserver数据

测试版本: 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、查询数据  ...

猜你喜欢

SparkStreaming实时消费Kafka数据,批量写入Mysql数据库,Java版本

       下列代码,涉及到数据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优化 每天上班第一件事,看进程有没有挂,果然挂了,经测试原来是内存不足所导致的。因此不能一次性插入所有的数据...