Skip to main content

CDC Source

下文介绍在向导模式中使用日志采集类型的数据源配置项。 该类型主要针对MySQL、Oracle、SQLServer JDBC、PostgreSQL这四种支持开启日志查询的业务数据库。

配置项操作和解释

  • 操作页面:

image-20220701173942011

  • 参数解释
配置项说明
任务类型日志采集模式通过采集日志信息实现数据实时采集,不同数据源类型有不同的日志管理方案:
MySQL——Binlog
Oracle——LogMiner
SQLServer——CDC
PostgreSQL——WAL
是否分表该配置项仅对MySQL—>Hive的采集任务生效
在分表模式下创建多个分组,按组写入不同的Hive表,实现一个任务完成多对多的实时采集,减少线上任务的配置工作。
支持多选。
当选择多张表时,需要保证选中的表结构是一致的,否则会导致采集任务失败。该场景适用于业务表数据量过大,已经做了分表处理,但是做数据采集时需要一起采集的情况。(该场景无法保证数据按业务顺序写入)
采集起点用户可选择从任务运行时开始、按时间选择、按文件选择三种采集起点:
从任务运行时开始:任务提交后当状态变为"运行中"时,开始实时采集;
按时间选择:以用户选择的时间作为采集起点(非完全精准);
按文件选择:根据用户指定的binlog、LogMiner文件开始采集;
数据操作用户可选择Insert、Update、Delete这三种数据操作。
格式转化嵌套JSON平铺:采集的日志信息,可能会出现多层嵌套格式的JSON,如{"a":1, "b": {"c":3}}。勾选格式转化后,该JSON会被分解为{"a":1,"b_c":3}。(如果写入Hive目标表,必须勾选格式转化)
表结构解析:将采集到的日志信息按源表结构进行还原,方便下游的数据分析。(目前仅支持Oracle数据源)
高级配置以JSON格式添加高级参数,支持的参数请参考Connector Options
写法参考:
{
"scan.fetch-size":200
}

如何开启数据库日志采集

各类数据库开启日志方式不同,下文链接供参考:

常见问题答疑

  • MySQL

    • 采集mysql binlog 发现采集不到数据
      • 先查看binlog是否开启,show variables like '%log_bin%' ;
      • 再确定binlog_format 是否设置为ROW 注意 binlog_format 必须设置为 ROW,因为在 STATEMENT 或 MIXED 模式下,Binlog 只会记录和传输 SQL 语句(以减少日志大小),而不包含具体数据;
      • 如果是通过从节点某个专门的账号连接主节点,这个账号需要拥有全局的 REPLICATION 权限;
  • Oracle

    • 实时采集到的操作标识字段 Operate Time代表什么意思?

      在进行实时采集时会采集Oracle日志中Insert、Update、Delete的操作时间,将其保存为新的字段OperateTime (和TS一级)添加到实时采集后的Json中。

    • Oracle实时采集为什么不能按时间选择采集起点?

      Oracle Logminer中无法获取日志的时间信息,所以无法按时间选择采集起点。

    • Oracle19C开启Logminer应该执行哪些命令?

      Oracle12C以上版本均可参考12C命令进行操作。

    • 选择数据源后,提示'"异常:supplemental_log_data_all is not enabled,please execute sql to enable this config:alter database add supplemental log data (all) columns;" '怎么处理?

      • 先确认Oracle数据库已经开启All等级扩充日志;
      • 若无法对database开启All级别扩充日志,可针对监听表进行all级别扩充日志的开启,并在实时采集任务的高级配置中补充 {"check":false} 参数,绕过底层插件对database权限的验证;
  • PostgreSQL

    • 任务处于 运行中 状态,但长时间没有数据写入写出,怎么办?

      可从PostgreSQL的数据情况切入进行排查,若数据库内长时间无数据写入且数据库连接正常,则需要查看数据库是否存在锁表现象。锁表会导致数据无法写入Postgresql,但实时采集读取的是WAL日志,因此实时采集正常,但由于没有数据写入,所以WAL日志内容无新增。