データベースの同期AnalyticDBについてはPostgreSQLとOSSリアルタイムにカフカによるSQLServerのCDCデータ解析接続

背景

SQLServerのは、リアルタイムデータ同期メカニズムに更新されbinlogのMySQLへの同様のCDCは、CDCテーブルにデータ更新操作を維持します提供します。
ログテーブルに挿入INSERTにおけるCDCオープンソース・テーブル、挿入データときに更新UPDATE、DELETEおよびDELETE活性。CDCによって提供される変更データキャプチャ変更テーブル、クエリ機能を取り込むことによってCDCプロセスは、このデータの一部を捕捉することができます。

使用のCDC条件

1.SQL Server 2008および上記の、エンタープライズ、開発者、および評価;
2開庁サービス(ジョブ)する必要があります。
3.CDCは、ビジネス・ライブラリーの外に追加のディスク領域が必要です。
4.CDCテーブルは主キーまたは一意キーが必要です。
画像
図1:SQLSERVER CDC原則

使用のADB4PGシンク条件

  1. テーブルを構築し、エンドADB4PGで(必要な機能のこの部分に追加することができる場合)が自動的に作成されませんtable文の構築の使用を進め、システム
  2. 各テーブルには主キーまたは一意キーが必要です
  3. 現在サポートされているデータ形式:INTEGER、BIGINT、SMALLINT、NUMERIC、DECIMAL、REAL、DOUBLEPERICISION、BOOLEAN、DATE、TIMESTAMP、VARCHAR

環境の準備

SQLServerの環境準備

  1. 前自己のSQLServerまたはRDSクラウド(例えば雲のSQLServerインスタンスRDS)の例
  2. Windows環境を、既存の、そしてSSMS(SQL Server Management Studioを)インストールし、コマンドの一部は、SSMSで実行されます

テーブルを作成するための環境のSQLServer

-- 创建源表
create database connect
GO
use connect
GO  

create table t1
(
    a int NOT NULL PRIMARY KEY,
    b BIGINT,
    c SMALLINT,
    d REAL,
    e FLOAT,
    f DATETIME,
    g VARCHAR
);



-- 开启db级的cdc
sp_rds_cdc_enable_db

-- 验证数据库是否开启cdc成功
select * from sys.databases where is_cdc_enabled = 1

-- 对源表开启cdc
exec sp_cdc_enable_table @source_schema='dbo', @source_name='t1', @role_name=null;

ADB4PG端部は、ターゲット表を作成します

CREATE DATABASE connect;

create table t1
(
    a int NOT NULL PRIMARY KEY,
    b BIGINT,
    c SMALLINT,
    d REAL,
    e FLOAT,
    f TIMESTAMP,
    g VARCHAR
);

カフカ環境準備

カフカServerのインストール

1.ダウンロードカフカのインストールパッケージとエキス

SQL Server Source Connect目前只支持2.1.0及以上版本的Kafka Connect,故需要安装高版本kafka,实例使用kfakf-2.11-2.1.0。 http://kafka.apache.org/downloads?spm=a2c4g.11186623.2.19.7dd34587dwy89h#2.1.0

2. 编辑$KAFKA_HOME/config/server.properties

修改以下参数

...
## 为每台broker配置一个唯一的id号
broker.id=0

...

## log存储地址
log.dirs=/home/gaia/kafka_2.11-2.1.0/logs

## kafka集群使用的zk地址
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
...
3. 启动kafka server
bin/kafka-server-start.sh config/server.properties

安装Kafka Connect

1. 修改kafka connect配置文件

修改$KAFKA_HOME/config/connect-distributed.properties

## kafka server地址
bootstrap.servers=broker1:9092,broker2:9092,broker3:9092

## 为kafka connector选定一个消费group id
group.id=

## 安装插件的地址,每次kafka connector启动时会动态加载改路径下的jar包,可以将每个插件单独放到一个子路径
plugin.path=

安装需要的kafka-connect插件

1. 将插件jar包放在我们在前面已经配置过的配置的plugin.path路径

sqlserver-source-connector

https://repo1.maven.org/maven2/io/debezium/debezium-connector-sqlserver/?spm=a2c4g.11186623.2.18.7dd34587dwy89h

oss-sink-connector, 需要使用代码自行编译,注意在pom修改依赖的kafka及scala版本号

https://github.com/aliyun/kafka-connect-oss

adb4pg-jdbc-sink-connector,需要下载以下jar包及对应ADB For PG的JDBC驱动
https://yq.aliyun.com/attachment/download/?spm=a2c4e.11153940.0.0.70ed10daVH6ZQO&id=7282

2. 编辑配置文件
# CDC connector的配置文件 sqlserver-cdc-source.json
{
    "name": "sqlserver-cdc-source",
    "config": {
        "connector.class" : "io.debezium.connector.sqlserver.SqlServerConnector",
        "tasks.max" : "1",
        "database.server.name" : "server1",
        "database.hostname" : "database hostname",
        "database.port" : "1433",
        "database.user" : "xxxx",
        "database.password" : "xxxxxx",
        "database.dbname" : "connect",
        "schemas.enable" : "false",
        "mode":"incrementing",
        "incrementing.column.name":"a",
        "database.history.kafka.bootstrap.servers" : "kafka-broker:9092",
        "database.history.kafka.topic": "server1.dbo.t1",
        "value.converter.schemas.enable":"false",
        "value.converter":"org.apache.kafka.connect.json.JsonConverter"
    }
}
# oss sink的配置文件 oss-sink.json
{
     "name":"oss-sink",
     "config": {
        "name":"oss-sink",
        "topics":"server1.dbo.testdata",
        "connector.class":"com.aliyun.oss.connect.kafka.OSSSinkConnector",
        "format.class":"com.aliyun.oss.connect.kafka.format.json.JsonFormat",
        "flush.size":"1",
        "tasks.max":"4",
        "storage.class":"com.aliyun.oss.connect.kafka.storage.OSSStorage",
        "partitioner.class":"io.confluent.connect.storage.partitioner.TimeBasedPartitioner",
        "timestamp.extractor":"Record",
        "oss.bucket":"traffic-csv",
        "partition.duration.ms":"10000",
        "path.format":"YYYY-MM-dd-HH",
        "locale":"US",
        "timezone":"Asia/Shanghai",
        "rotate.interval.ms":"30000"
        }
}

OSSシンカーより詳細な構成については、ドキュメントを参照してくださいhttps://github.com/aliyun/kafka-connect-oss

## adb4pg-jdbc-sink配置文件
{
     "name":"adb4pg-jdbc-sink",
     "config": {
        "name":"adb4pg-jdbc-sink",
        "topics":"server1.dbo.t1",
        "connector.class":"io.confluent.connect.jdbc.Adb4PgSinkConnector",
        "connection.url":"jdbc:postgresql://gp-8vb8xi62lohhh2777o.gpdb.zhangbei.rds.aliyuncs.com:3432/connect",
        "connection.user":"xxx",
        "connection.password":"xxxxxx",
        "col.names":"a,b,c,d,e,f,g",
        "col.types":"integer,bigint,smallint,real,doublepericision,timestamp,varchar",
        "pk.fields":"a",
        "target.tablename":"t1",
        "tasks.max":"1",
        "auto.create":"false",
        "table.name.format":"t1",
        "batch.size":"1"
        }
}

OSSシンカーファイルシステムHDFSパッケージの使用に起因して、OSS関連情報は、$ KAFKA_HOME /設定/コア-site.xmlファイルに維持する必要があります

<configuration>
    <property>
        <name>fs.oss.endpoint</name>
        <value>xxxxxxx</value>
    </property>
    <property>
        <name>fs.oss.accessKeyId</name>
        <value>xxxxxxx</value>
    </property>
    <property>
        <name>fs.oss.accessKeySecret</name>
        <value>xxxxxxx</value>
    </property>
    <property>
        <name>fs.oss.impl</name>
        <value>org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem</value>
    </property>
    <property>
        <name>fs.oss.buffer.dir</name>
        <value>/tmp/oss</value>
    </property>
    <property>
        <name>fs.oss.connection.secure.enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>fs.oss.connection.maximum</name>
        <value>2048</value>
    </property>
</configuration>
3.スタート構成されたカフカ - コネクタプラグ

スタート、削除タスクconnectコマンド

## 启动命令
curl -i -X POST -H "Accept:application/json" -H  "Content-Type:application/json" http://localhost:8083/connectors/ -d @sqlserver-cdc-source.json
curl -i -X POST -H "Accept:application/json" -H  "Content-Type:application/json" http://localhost:8083/connectors/ -d @adb4pg-jdbc-sink.json
curl -i -X POST -H "Accept:application/json" -H  "Content-Type:application/json" http://localhost:8083/connectors/ -d @oss-sink.json

## 删除命令
curl -s -X DELETE http://localhost:8083/connectors/sqlserver-cdc-source
curl -s -X DELETE http://localhost:8083/connectors/adb4pg-jdbc-sink
curl -s -X DELETE http://localhost:8083/connectors/oss-sink

ADBのためにPGでの更新データを取得します。

SQLServerのギフト挿入/以上/デリートデータレコード

insert into t1(a,b,c,d,e,f,g) values(1, 2, 3, 4, 5, convert(datetime,'24-12-19 10:34:09 PM',5), 'h');

更新はカフカのトピックになり得ます

情報は、トピックカフカ-接続を生成するために必要かどうかを確認します

bin/kafka-topics.sh --zookeeper zk_address --list

画像
このようなスクリーンショット、接続-のconfigs、接続・オフセットとして 、接続ステータストピックカフカ-接続はタスクデータの更新状況を格納するために使用されます。スキーマの変更-在庫が話題のSQLServerのテーブル構造を維持することです。
CDCカフカ話題正しいデータが収集されていることを確認するために、カフカconsloe消費者の話題情報によって得ることができます

bin/kafka-console-consumer.sh --bootstrap-server xx.xx.xx.xx:9092 --topic server1.dbo.t1

ADBのためにPG上のデータから同期クエリ

注:異なるデータベース間の同期は、異なるタイムゾーンが同期のタイムゾーンオフセットの結果を引き起こす可能性があるため、データベースの必要性が両側に設けられます。
画像

OSSで更新されたデータを参照してください。

画像

おすすめ

転載: yq.aliyun.com/articles/740747