文档首页/ 数据复制服务 DRS/ 实时同步/ 自建到自建/ 将Microsoft SQL Server同步到Kafka
更新时间:2025-07-24 GMT+08:00
分享

将Microsoft SQL Server同步到Kafka

支持的源和目标数据库

表1 支持的数据库

源数据库

目标数据库

  • 本地自建Microsoft SQL Server(企业版2012、2014、2016、2017、2019版本,标准版2016 SP2及以上版本、2017、2019版本)
  • ECS自建Microsoft SQL Server数据库(企业版2012、2014、2016、2017、2019版本,标准版2016 SP2及以上版本、2017、2019版本)

Kafka 0.11及以上版本

目前为受限使用阶段。

支持的同步对象范围

在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表2DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查

表2 支持的同步对象

类型名称

使用须知

同步对象范围

  • 支持的字段类型

    TINYINT、SMALLINT、INT、BIGINT、DECIMAL、NUMERIC、FLOAT、REAL、SMALLMONEY、MONEY、BIT、DATE、DATETIME、DATETIME2、DATETIMEOFFSET、TIME、TIMESTAMP、XML、CHAR、VARCHAR、NCHAR、NVARCHAR、BINARY、VARBINARY、IMAGE、HIERARCHYID、NTEXT、TEXT、UNIQUEIDENTIFIER。

  • 不支持的字段类型:SQL_VARIANT、GEOMETRY、GEOGRAPHY。
  • 增量同步的范围
    • 支持DML(Data Manipulation Language):包括INSERT、UPDATE、DELETE。
    • 不支持DDL(Data Definition Language)。

数据库账号权限要求

在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。

表3 数据库账号权限

类型名称

增量同步

源数据库连接账号

需要具备sysadmin权限,或者view server state权限以及待同步数据库的db_datareader或db_owner权限。

使用建议

  • 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。
  • 建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,避免同步对业务造成性能影响。
  • 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响

使用须知

DRS增量同步过程一般包含三个阶段:任务启动阶段、增量阶段、结束任务阶段。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。

表4 使用须知

类型名称

使用和操作约定

任务启动前须知

  • 源数据库参数要求
    • 源数据库模式必须设置为FULL模式。
    • 源数据库必须开启SQL Server Agent代理服务。
    • 源数据库若开启客户端配置中的“强制协议加密(Force Protocol Encrypton)”,必须同时开启“信任服务器证书(trust server certificate)”,如下图1所示:
      图1 查看客户端属性
  • 源数据库对象要求:
    • 源库中不允许存在被禁用的表的聚簇索引,否则会导致同步失败。
    • 源库中不允许存在名称为cdc的用户名或schema。
    • 源库待同步对象的库名、schema名、表名只能包含如下字符:字母、数字、下划线和中划线,库名长度不能超过64个字符。
    • 源库待同步对象的表中列名不能包含如下字符:[]?。
  • 目标数据库参数要求:
    • 目标库为社区Kafka。
    • Kafka的auto.create.topics.enable参数建议为false。
  • 其他使用须知
    • 不支持源数据库主备切换,源数据库主备切换会导致同步任务失败。
    • 不支持源数据库Microsoft SQL Server为TLS 1.0、TLS 1.1协议的同步,如果需要同步,建议源库升级到TLS 1.2及以上版本。
    • SQL Server为源的增量同步基于SQL Server提供的CDC能力,如果SQL Server源库的CDC功能出现异常(如被关闭、事务日志满等情况),则增量同步就会受到影响。因SQLServer限制,开启CDC的表有如下限制:

      在启用 CDC 的表上的列的数据类型从 TEXT 更改为 VARCHAR 或从 IMAGE 更改为 VARBINARY 时,现有行会更新为行外值。 在更新后,CDC 扫描将导致错误,导致DRS任务异常。

      使用 DDL 语句更改已启用 CDC 的表的列大小可能会导致后续 CDC 捕获过程出现问题。

      对于 ALTER TABLE ... SWITCH TO ... PARTITION ... 语句,变更数据捕获 (CDC) 不记录相应数据变更。

      列存索引无法开启CDC。

      开启CDC的表无法做truncate。

      在 SQL Server 上启用变更数据捕获 (CDC) 时,ADR 的主动日志截断功能将被禁用。

增量同步过程须知

  • 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
  • 请勿在目标库做写入操作,否则可能导致数据不一致。
  • 为保证同步任务正常和数据的一致性,如有以上诉求,建议在业务低峰期时重新创建DRS任务。
  • 请勿在Kafka上删除接收DRS数据的topic,否则可能导致任务失败。
  • 不支持DDL操作,源数据库进行的DDL操作不会同步到目标数据库。

    不支持同步到目标端且会造成任务异常的DDL类型:

    ALTER TABLE ADD COLUMN

    ALTER TABLE DROP COLUMN

    ALTER TABLE ALTER COLUMN

    DROP TABLE

    不支持同步到目标端但不会造成任务异常的DDL类型:

    CREATE TABLE

    CREATE INDEX

    DROP INDEX

    ALTER INDEX

  • 不支持大数据类型IMAGE、TEXT、NTEXT的删除操作。
  • 支持任务再编辑追加同步对象。

操作步骤

本小节以自建Microsoft SQL Server->Kafka的同步为示例,介绍如何使用数据复制服务配置公网网络场景下的实时同步任务。

  1. 在“实时同步管理”页面,单击“创建同步任务”。
  2. 在“同步实例”页面,填选区域、项目、任务名称、描述、同步实例信息,单击“开始创建”

    • 任务信息
      图2 同步任务信息
      表5 任务和描述

      参数

      描述

      区域

      当前所在区域,可进行切换。

      项目

      当前区域对应的项目,可进行切换。

      任务名称

      任务名称在4到50位之间,必须以字母开头,可以包含字母、数字、中划线或下划线,不能包含其他的特殊字符。

      描述

      描述不能超过256位,且不能包含! = < > & ' " \ 特殊字符。

    • 同步实例信息
      图3 同步实例信息
      表6 同步实例信息

      参数

      描述

      数据流动方向

      选择“自建-自建”

      源数据库引擎

      选择“Microsoft SQL Server”

      目标数据库引擎

      选择“Kafka”

      网络类型

      此处以“公网网络”为示例,可选“公网网络”“VPC网络”“VPN、专线网络”

      • VPC网络:适合云上同账号同Region同VPC场景下数据库之间的同步。
      • 公网网络:适合通过公网网络把其他云下或其他平台的数据库同步到目标数据库,该类型要求数据库绑定弹性公网IP(EIP)。
      • VPN、专线网络:适合VPN、专线、CC、VPCEP、或者用户已打通VPC对等连接的网络场景,实现其他云下自建数据库与云上数据库同步、云上同Region跨账号、或云上跨Region的数据库之间的同步。

      VPC

      选择可用的虚拟私有云。

      同步实例所在子网

      请选择同步实例所在的子网。也可以单击“查看子网”,跳转至“网络控制台”查看实例所在子网帮助选择。

      默认值为当前所选数据库实例所在子网,请选择有可用IP地址的子网。为确保同步实例创建成功,仅显示已经开启DHCP的子网。

      内网安全组

      请选择内网安全组。内网安全组限制实例的安全访问规则,加强安全访问。

      同步模式

      增量:增量同步通过解析日志等技术,将源端产生的增量数据同步至目标端。

      指定公网IP

      网络类型选择“公网网络”时可见,选择为DRS实例绑定的弹性公网IP。任务创建时,DRS将会自动绑定该弹性公网IP,等待任务结束后将自动解绑该弹性公网IP。指定公网IP数量需要与实例数量匹配。

      公网网络迁移产生的数据传输费用收取标准请参见:弹性公网IP价格计算器

    • 可用区
      图4 可用区
      表7 任务可用区

      参数

      描述

      可用区

      DRS任务创建的可用区,选择跟源或目标库相同的可用区性能更优。

    • 企业项目和标签
      图5 企业项目和标签

      表8 企业项目和标签

      参数

      描述

      企业项目

      企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理。请在下拉框中选择所在的企业项目,其中,default为默认项目。

      更多关于企业项目的信息,请参见《企业管理用户指南》

      如果需要自定义企业项目,请在控制台右上角单击“企业”,进入“企业项目管理”页面创建,具体请参见《企业管理用户指南》中“创建企业项目”的内容。

      标签

      • 可选配置,对同步任务的标识。使用标签可方便管理您的任务。每个任务最多支持20个标签配额。
      • 如果您的组织已经设定DRS的相关标签策略,则需按照标签策略规则为任务添加标签。标签如果不符合标签策略的规则,则可能会导致任务创建失败,请联系组织管理员了解标签策略详情。
      • 任务创建成功后,您可以单击任务名称,在“标签”页签下查看对应标签。关于标签的详细操作,请参见标签管理

    对于创建失败的任务,DRS默认保留3天,超过3天将会自动结束任务。

  3. 在“源库及目标库”页面,同步实例创建成功后,填写源库信息和目标库信息,单击“源库和目标库”处的“测试连接”,分别测试并确定与源库和目标库连通后,勾选协议,单击“下一步”

    测试连接时需要确保DRS任务与源库、目标库的连通性。

    • 网络连通性:确保源库和目标库允许DRS访问,通常至少需要放通DRS的IP。公网网络的DRS任务放通DRS的公网IP,VPC网络、VPN、专线网络的DRS任务放通DRS的内网IP,可参考网络准备章节进行网络打通。
    • 账号连通性:确保源库和目标库允许DRS通过用户名和密码访问。
    图6 源库信息
    表9 源库信息

    参数

    描述

    IP地址或域名

    源数据库Microsoft SQL Server的IP地址或域名。

    端口

    源数据库Microsoft SQL Server服务端口,可输入范围为1~65535间的整数。

    数据库用户名

    源数据库Microsoft SQL Server的用户名。

    数据库密码

    源数据库Microsoft SQL Server的用户名所对应的密码。

    图7 目标库信息
    表10 目标库信息

    参数

    描述

    IP地址或域名

    目标数据库的IP地址或域名。

    安全协议

    支持四种认证方式的选择,PLAINTEXT、SSL、SASL_PLAINTEXT和SASL_SSL,详细说明可参考Kafka认证方式

    源和目标数据库用户名和密码将在同步过程中被加密暂存到数据库和同步实例主机上,待该任务删除后会永久清除。

  4. “设置同步”页面,选择同步策略和同步对象,单击“下一步”

    图8 同步对象

    表11 同步模式和对象

    参数

    描述

    DML同步

    选择需要同步的DML操作,默认都勾选。

    不勾选Delete则不会同步源库增量数据中的Delete语句,可能会导致数据不一致,因此存在数据冲突或任务失败的风险。

    Topic

    选择目标端需要同步到的Topic。

    投送到kafka的数据格式

    选择投送到kafka的数据格式。

    • Avro:可以显示Avro二进制编码,高效获取数据。
    • Json:为Json消息格式。

    详细格式可参考Kafka消息格式

    同步对象

    左侧框是源数据库对象,右侧框是已经选择的对象,同步对象支持表级同步、导入对象文件,您可以根据业务场景选择对应的数据进行同步。

    • 选择导入对象文件时,支持不同表同步到目标端不同的Topic,具体导入步骤和说明可参考导入同步对象
    • 使用导入对象功能时 ,同步Topic策略选择“集中投递到一个Topic”,才能使用对象名修改(对象名映射)功能,否则会按Topic名字格式生成。
    说明:
    • 选择对象的时候支持对展开的库进行搜索,以便您快速选择需要的数据库对象。
    • 如果有切换源数据库的操作或源库同步对象变化的情况,请在选择同步对象前单击右上角的,以确保待选择的对象为最新源数据库对象。
    • 当对象名称包含空格时,名称前后的空格不显示,中间如有多个空格只显示一个空格。
    • 选择的同步对象名称中不能包含空格。

  5. “预检查”页面,进行同步任务预校验,校验是否可进行。

    • 查看检查结果,如有不通过的检查项,需要修复不通过项后,单击“重新校验”按钮重新进行任务预校验。

      预检查不通过项处理建议请参见《数据复制服务用户指南》中的“预检查不通过项修复方法”。

    • 预检查完成后,且所有检查项结果均通过时,单击“下一步”

      所有检查项结果均通过时,若存在请确认项,需要阅读并确认详情后才可以继续执行下一步操作。

  6. “任务确认”页面,设置同步任务的启动时间、任务异常通知设置、SMN主题、时延阈值、任务异常自动结束时间,并确认同步任务信息无误后,勾选协议,单击“启动任务”,提交同步任务。

    图9 任务启动设置

    表12 任务启动设置

    参数

    描述

    启动时间

    同步任务的启动时间可以根据业务需求,设置为“立即启动”或“稍后启动”。

    说明:

    预计同步任务启动后,会对源数据库和目标数据库的性能产生影响,建议选择业务低峰期,合理设置同步任务的启动时间。

    任务异常通知设置

    该项为可选参数,开启之后,选择对应的SMN主题。当同步任务状态、时延指标或数据异常时,系统将发送通知。

    SMN主题

    “任务异常通知设置”项开启后可见,需提前在SMN上申请主题并添加订阅。

    SMN主题申请和订阅可参考《消息通知服务用户指南》

    时延阈值

    在增量同步阶段,源数据库和目标数据库之间的同步有时会存在一个时间差,称为时延,单位为秒。

    时延阈值设置是指时延超过一定的值后(时延阈值范围为0到3600s),DRS可以发送告警通知。告警通知将在时延稳定超过设定的阈值6min后发送,避免出现由于时延波动反复发送告警通知的情况。

    说明:
    • 当时延阈值设置为0时,不会发送通知给收件人。
    • 首次进入增量同步阶段,会有较多数据等待同步,存在较大的时延,属于正常情况,不在此功能的监控范围之内。
    • 设置时延阈值之前,需要设置任务异常通知。

    任务异常自动结束时间(天)

    设置任务异常自动结束天数,输入值必须在14到100之间,默认值14。

    说明:
    • 仅按需计费任务支持设置任务异常自动结束时间,包年/包月任务不支持。
    • 异常状态下的任务仍然会计费,而长时间异常的任务无法续传和恢复。设置任务异常自动结束天数后,异常且超时的任务将会自动结束,以免产生不必要的费用。

  7. 同步任务提交后,您可在“实时同步管理”页面,查看并管理自己的任务

    • 您可查看任务提交后的状态,状态请参见任务状态说明
    • 在任务列表的右上角,单击刷新列表,可查看到最新的任务状态。
    • 对于未启动、状态为配置中的任务,DRS默认保留3天,超过3天DRS会自动删除后台资源,当前任务状态不变。当用户再次配置时,DRS会重新申请资源,此时DRS任务IP会发生改变。
    • 对于公网网络类型的任务,由于DRS需要在任务结束后删除后台资源,所以该任务绑定的弹性公网IP需要等待一段时间,才能恢复为解绑状态。

相关文档