更新时间:2022-05-20 GMT+08:00
分享

将MySQL同步到Kafka

支持的源和目标数据库

表1 支持的数据库

源数据库

目标数据库

  • RDS for MySQL
  • Kafka

前提条件

  • 已登录数据复制服务控制台。
  • 账户余额大于等于0元。
  • 满足实时同步支持的数据库类型和版本,详情请参见支持的数据库
  • 当用户创建DRS任务使用的是子帐号时,请先确认已添加过委托。创建委托方法,可参考委托管理

使用建议

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

使用须知

在创建同步任务前,请务必阅读以下使用须知。

表2 使用须知

类型名称

使用和操作限制

数据库权限设置

  • 源数据库账号需要具备如下权限:SELECT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT、RELOAD。

同步对象约束

  • 支持表数据的同步。
  • 不支持非MyISAM和非InnoDB表的同步。

源数据库要求

  • MySQL源数据库的binlog日志必须打开,且binlog日志格式必须为Row格式。
  • 在磁盘空间允许的情况下,建议源数据库binlog保存时间越长越好,建议为3天。
  • 源数据库expire_logs_days参数值为0,可能会导致同步失败。
  • 增量同步时,必须设置MySQL源数据库的server_id。如果源数据库版本小于或等于MySQL5.6,server_id的取值范围在2-4294967296之间;如果源数据库版本大于或等于MySQL5.7,server_id的取值范围在1-4294967296之间。
  • 源数据库中的库、表名不能包含:'<`>/\以及非ASCII字符。

目标数据库要求

  • 目标库为社区Kafka。

操作须知

  • 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。
  • 数据类型不兼容时,可能引起同步失败。
  • 源库为RDS for MySQL实例时,不支持带有TDE特性并建立具有加密功能表。
  • 实时同步过程中,如果修改了源库的用户名、密码,会导致同步任务失败,需要在数据复制服务控制台将上述信息重新修改正确,然后重试任务可继续进行实时同步。一般情况下不建议在同步过程中修改上述信息。
  • 实时同步过程中,如果修改了源库端口,会导致同步任务失败。针对该情况,系统自动更新为正确的端口,重试任务后即可进行同步。一般情况下不建议在同步过程中修改端口。
  • 实时同步过程中,对于因修改IP地址导致同步任务失败的情况,系统自动更新为正确的IP地址,需要重试任务可继续进行同步。一般情况下,不建议修改IP地址。
  • 不支持外键级联操作。
  • 不支持源数据库恢复到之前时间点的操作(PITR)。
  • 支持断点续传功能,但是对于无主键的表可能会出现重复插入数据的情况。
  • 不支持强制清理binlog,否则会导致同步任务失败。
  • 当在同步过程中,对MyISAM表执行修改操作时,可能造成数据不一致。
  • 选择表级对象同步时,同步过程中不建议对表进行重命名操作。
  • 由于kafka的机制,topic名字格式不能以"__" , "."开头,或以".internal","-internal" 结尾,这些命名格式的topic会被当做为kafka的内部topic,业务无法使用。
  • 建议将expire_log_day参数设置在合理的范围,确保恢复时断点处的binlog尚未过期,以保证服务中断后的顺利恢复。
  • 该链路不支持SSL安全连接。

操作步骤

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

    图1 同步任务信息
    表3 任务和描述

    参数

    描述

    区域

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

    任务名称

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

    描述

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

    图2 同步实例信息
    表4 同步实例信息

    参数

    描述

    数据流动方向

    选择“出云”

    源数据库引擎

    选择“MySQL”

    目标数据库引擎

    选择“Kafka”

    网络类型

    此处以“公网网络”为示例。目前支持可选公网网络、VPC网络、VPN网络和专线网络。

    源数据库实例

    用户创建的RDS for MySQL实例。

    同步实例所在子网

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

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

    同步类型

    • 增量。

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

      无需中断业务,实现同步过程中源业务和数据库继续对外提供访问。

    企业项目

    对于已成功关联企业项目的用户,仅需在“企业项目”下拉框中选择目标项目。

    如果需要自定义企业项目,请前往项目管理服务进行创建。关于如何创建项目,详见《项目管理用户指南》。

    标签

    • 可选配置,对同步任务的标识。使用标签可方便管理您的任务。每个任务最多支持10个标签配额。
    • 任务创建成功后,您可以单击任务名称,在“标签”页签下查看对应标签。关于标签的详细操作,请参见标签管理

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

    图3 源库信息
    表5 源库信息

    参数

    描述

    数据库实例名称

    默认为创建同步任务时选择的关系型数据库实例,不可进行修改。

    数据库用户名

    源数据库的用户名。

    数据库密码

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

    源数据库的数据库用户名和密码,会被系统加密暂存,直至删除该迁移任务后自动清除。

    图4 目标库信息
    表6 源库信息

    参数

    描述

    IP地址或域名

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

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

    图5 同步模式
    表7 同步对象

    参数

    描述

    DML同步

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

    同步Topic策略

    同步Topic策略,可选择“集中投递到一个Topic”或者“自动生成Topic名字”。

    Topic

    选择目标端需要同步到的Topic,同步Topic策略选择“集中投递到一个Topic”时可见。

    Topic名字格式

    Topic名字格式,同步Topic策略选择“自动生成Topic名字”时可见。

    Topic名字格式支持database和tablename两个变量,其他字符都当做常量。分别用$database$代替数据库名,$tablename$代替表名。

    例如:配置成$database$-$tablename$时,如果数据库名称为db1,表名为tab1,则Topic名字为db1-tab1。如果是DDL语句,$tablename$为空,则Topic名字为db1。

    由于kafka的机制,Topic名字格式不能以"__" , "."开头,或以".internal","-internal" 结尾,这些命名格式的Topic会被当做为kafka的内部Topic,业务无法使用。

    同步到kafka partition策略

    同步到kafka partition策略。

    • 按库名+表名的hash值投递到不同Partition:适用于单表的查询场景,表内保序,表与表之间不保序,可以提高单表读写性能,推荐使用此选项。
    • 全部投递到Partition 0:适用于有事务要求的场景,事务保序,可以保证完全按照事务顺序消费,写入性能比较差,如果没有强事务要求,不推荐使用此选项。投递到Partition 0必须是自动创建Topic,选择已有Topic不支持该选项。
    • 按表的主键值hash值投递到不同的Partion:适用于一个表一个Topic的场景。

    投送到kafka的数据格式

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

    • Avro:可以显示Avro二进制编码,高效获取数据。
    • JSON:为Json消息格式,方便解释格式,但需要占用更多的空间。
    • JSON-C:一种能够兼容多个批量,流式计算框架的数据格式。

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

    同步对象

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

    • 选择对象的时候支持搜索,以便您快速选择需要的数据库对象。
    • 在同步对象右侧已选对象框中,可以使用对象名映射功能进行源数据库和目标数据库中的同步对象映射,具体操作可参考对象名映射
    • 选择导入对象文件,具体步骤和说明可参考导入同步对象

  5. 在“数据加工”页面,选择需要加工的列,进行列加工。

    • 如果不需要数据加工,单击“下一步”。
    • 如果需要加工列,参考数据加工章节,设置相关规则。
    图6 数据加工

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

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

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

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

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

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

    图8 任务启动设置
    表8 任务启动设置

    参数

    描述

    启动时间

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

    说明:

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

    任务异常通知设置

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

    SMN主题

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

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

    时延阈值

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

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

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

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

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

    说明:

    异常状态下的任务仍然会计费,而长时间异常的任务无法续传和恢复。设置任务异常自动结束天数后,异常且超时的任务将会自动结束,以免产生不必要的费用。

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

    • 您可查看任务提交后的状态,状态请参见任务状态说明
    • 在任务列表的右上角,单击刷新列表,可查看到最新的任务状态。

分享:

    相关文档

    相关产品

close