本文重点介绍使用StreamSets Data Collector实时同步SQL Server数据到HBase的方案及实现。不涉及StreamSets的具体介绍。
关于StreamSets各种Stages的配置细节和性能优化,请自行学习官方文档。
软件 | 版本 |
---|---|
StreamSets Data Collector | 3.16.0 |
SQL Server | 2008 R2 企业版 |
HBase | 2.1.0+cdh6.3.2 |
数据同步要点
1、SQL Server中的目标库表开启CDC。
2、构建StreamSets Pipeline,使用SQL Server CDC Client监控目标库表,实时捕获CDC数据,流入数据管道(Pipelines),经过对数据进行必要的业务处理,选择需要的CDC数据写入HBase。
CDC简介
CDC全称为Change Data Capture,是一种数据库架构设计模式,核心思想是监测并捕获数据库变动,包括数据的插入,更新,删除等,然后将这些操作按照发生顺序记录下来,提供给其他服务使用。
CDC常用于:
1、(异构)数据库之间的数据同步或备份。
2、同步业务数据库数据进入数据仓库。
数据同步操作
这里以一个示例来说明数据同步的具体操作。约定如下:
数据库服务 | 库 | 表 | 列 |
---|---|---|---|
SQL Server | test | user | id, name |
HBase | default | user | cf:id, cf:name |
建表:
SQL Server
CREATE TABLE test.dbo.user (
id int NOT NULL,
name varchar(100) NULL,
CONSTRAINT NewTable_PK PRIMARY KEY (id)
) GO
HBase
create 'test', 'cf'
在本地文件系统创建目录
mkdir -p /opt/streamsets/sqlserver_cdc
SQL Server库表启用CDC
这里只描述主要的启用步骤,更多细节请自行学习。
注意事项
1、SQL Server自2008版本开始支持CDC,并且只有开发版和企业版支持启用CDC。
2、SQL Server启用CDC,要求SQL Server代理处于运行状态,可在SQL Server配置管理工具中启用SQL Server代理。
启用CDC
启用CDC分为两步:
1、对目标数据库启用CDC。
2、对目标表启用CDC。
对目标数据库启用CDC
启用
USE test GO
EXEC sys.sp_cdc_enable_db GO
检查启用状态
SELECT name, is_cdc_enabled
FROM sys.databases
WHERE NAME = 'test'
当is_cdc_enabled
值为1时,表示已开启CDC。
对目标表启用CDC
启用(以下是最简方式,更多命令说明请自行学习)
EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'user',
@role_name = NULL
GO
检查启用状态
SELECT name, is_tracked_by_cdc FROM sys.tables
WHERE object_id = object_id('dbo.user')
当is_tracked_by_cdc
值为1时,表示已开启CDC。
查看帮助
EXEC sys.sp_cdc_help_change_data_capture 'dbo', 'user' GO
可以看到capture_instance
值为dbo_user
,请记住这个值,后面会用。
构建StreamSets Pipeline
本示例用到的Stages
Stage | Type | 简介 |
---|---|---|
SQL Server CDC Client | Origin | SQL Server CDC客户端,可以多线程获取SQL Server库表CDC数据。 |
Expression Evaluator | Processor | 表达式评估器,用于处理数据域。 |
Stream Selector | Processor | 流选择器,通过设定条件,可将符合不同条件的数据进行分流。 |
HBase | Destination | HBase存储,将数据写入HBase表。 |
Local FS | Destination | 本地文件系统存储,将数据写入本地文件系统。 |
更多信息请自行学习官方文档。
创建Pipeline
1、登陆StreamSets,进入主页,在界面左侧可以看到 Create New Pipeline 按钮,点击创建。
2、编辑Pipeline信息,并保存
3、保存之后进入Pipeline编辑界面
4、点击 Error Records 选项卡,配置错误记录处理方式,选择 Discard。
生产环境中,请选择合适的处理方式。
配置SQL Server CDC Client
1、创建Stage。按照下图操作,选择目标Stage即可。
2、在画布上选中 SQL Server CDC Client 1,按下图进行主要配置。
配置Expression Evaluator
1、创建Stage。按照下图操作,选择目标Stage即可。
2、在画布上选中 Expression Evaluator 1,按下图进行主要配置。
3、连接Stages。
配置Stream Selector
1、创建Stage。按照下图操作,选择目标Stage即可。
2、在画布上选中 Stream Selector 1,按下图进行主要配置。
3、连接Stages。
配置HBase
1、创建Stage。按照下图操作,选择目标Stage即可。
2、在画布上选中 HBase 1,按下图进行主要配置。
3、连接Stages。
配置Local FS
1、创建Stage。按照下图操作,选择目标Stage即可。
2、在画布上选中 Local FS 1,按下图进行主要配置。
3、连接Stages。
启动
至此,Pipeline构建完成,可以启动了。
启动之后,可以进行测试。
在SQL Server的user表中进行数据的增加、删除、更新操作,观察HBase和本地文件系统的文件变化。
没有意外的话,增加、更新的数据会同步到HBase的user表中,删除和其他操作的数据会记录到本地文件系统的文件中。
配置说明
这里对本文涉及的StreamSets Stages的相关配置进行简单的说明,更多细节请自行学习官方文档
SQL Server CDC Client
选项卡 | 配置 | 说明 |
---|---|---|
JDBC | JDBC Connection String | jdbc配置,按照常规配置即可。 |
CDC | Table Configs/Capture Instance Name | SQL Server表的CDC捕获实例,上文提到了查看这个实例名的方法。 这个配置可以使用正则,以获取多个实例的数据。例如配置为 dbo_user%,则可以获取库中所有前缀为 dbo_user的实例的数据。 |
Credentials | Username 和 Password | SQL Server认证信息。 |
Expression Evaluator
选项卡 | 配置 | 说明 |
---|---|---|
General | Required Fields | 必要的数据域列表,缺少其中任何一个域的记录都会被发送到Error。 |
Expressions | Field Expressions | 定义输出域。增加域或者覆盖已存在的域。 |
Stream Selector
选项卡 | 配置 | 说明 |
---|---|---|
General | Required Fields | 必要的数据域列表,缺少其中任何一个域的记录都会被发送到Error。 |
Conditions | Condition | 定义条件,符合条件的数据会分流到相应的数据出口。 |
HBase
选项卡 | 配置 | 说明 |
---|---|---|
General | Stage Library | Stage库,指定Stage的库版本。 |
HBase | ZooKeeper Quorum | 同HBase ZooKeeper Quorum配置。 |
HBase | Table Name | HBase表名。 |
HBase | Row Key | 指定Row Key域。 |
HBase | Fields | 域映射配置,配置数据流域和HBase表列的映射关系。 |