mysql ogg kafka_Oracle goldengate 实现mysql到kafka同步配置

本文详细介绍了如何使用Oracle GoldenGate进行MySQL到Kafka的数据同步配置。首先介绍了GoldenGate的技术架构,然后阐述了所需环境,包括JDK、Zookeeper和Kafka的版本。接着,详细讲解了在源端和目标端的配置步骤,包括启动GGSCI、配置Manager、Extract、Pump、Defgen以及Replicat等进程。最后,展示了Kafka接收到的数据格式。
摘要由CSDN通过智能技术生成

一.oracle goldengate技术架构

Oracle GoldenGate 实现原理是通过抽取源端的redo log 或者 archive log ,然后通过TCP/IP投递到目标端,最后解析还原应用到目标端,使目标端实现 同源端数据同步。图1-1 是Oracle GoldenGate 的技术架构。

0818b9ca8b590ca3270a3433284dd417.png

其中target接受的容器包含:kafka,hbase,hdfs,关系数据库等.

0818b9ca8b590ca3270a3433284dd417.png

二. 准备

在实现oracle goldengate 同步配置前,小求认为你已安装了一下环境

1. jdk配置

源端:jdk1.7或以上

目标端:jdk1.8

2.目标端zookeeper配置

版本:kafka_2.11-0.10.1.

3.目标端kafka配置

版本:zookeeper-3.4.8

详情配置,请见小求相关博文

三.源端

1.    环境

1.1  系统账号

账号:192.168.3.207:root/root

路径:/usr/local/soft/ggs_source

1.2  系统环境配置

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

2.    配置

2.1  ogg启动

GGSCI是GoldenGate Software Command Interface的缩写,它提供了十分丰富的命令 来对GoldenGate 进行各种操作,如创建、修改、监控GoldenGate 进程等。

配置命令:

# cd /usr/local/soft/ggs_source

# ./ggsci

2.2  mysql用户登录

# dblogin sourcedb test@localhost:3306,userid root,password root

2.3  配置manager

Manager进程是GoldenGate 的控制进程。如果把所有的 Oracle 进程比喻为军队,那么 Manager 就相当于司令。Manager 进程运行在源端和目标端上,它主要有以下几个方面的 作用:启动、监控、重启GoldenGate 的其他进程,报告错误及事件,分配数据存储空间, 发布阈值报告等。

每个源端或者目标端有且只能存在一个 Manager 进程。其运行状态有两种即 RUNNING(正在运行)和STOPPED(已经停止)。

在Windows 系统上,Manager进程是作为一个服务来启动的,而在类UNIX 系统中, Manager则是一个操作系统进程。

配置命令:

# edit param mgr

port 17809

dynamicportlist 17800-18000

purgeoldextracts ./dirdat/*,usecheckpoints, minkeepdays 7

备注:源端口与目标端口对应

2.4  启动mgr

# start mgr

查看启动进程

# info all

2.5  配置extract

Extract 运行在数据库源端,负责从源端数据表或者日志中捕获数据。在早期的 GoldenGate 版本中,它通常被称为Collect 进程。按照其所处的阶段不同,Extract 的作用 可以按照时间来划分。

初始数据装载阶段:在初始数据装载阶段,Extract 进程直接从源端的数据表中抽取数据。 同步变化捕获阶段:初始数据同步完成以后,Extract 进程负责捕获源端数据的变化 (DML和DDL)。

Extract 进程利用其内在的checkpoint 机制,周期性地检查并记录其读写的位置,通常 是写入到一个本地的trail 文件。这种机制是为了保证如果Extract 进程终止或者操作系统 宕机,重新启动 Extract 进程后,GoldenGate 能够恢复到以前的状态,从上一个断点处继续 往下运行,而不会有任何数据损失。

Extract 进程的状态包括STOPPED(正常停止)、STARTING (正在启动)、RUNNING (正在运行)、ABENDED (Abnomal End 的缩写,表示异常结束)。

配置命令:

# edit param ext_wpkg

extract ext_wpkg

setenv (MYSQL_HOME="/data/mysql/data")

tranlogoptions altlogdest /data/mysql/data/mysql-bin.index

dboptions host localhost,connectionport 3306

sourcedb test, userid root,password root

exttrail /usr/local/soft/ggs_source/dirdat/W3

dynamicresolution

gettruncates

GETUPDATEBEFORES

NOCOMPRESSDELETES

NOCOMPRESSUPDATES

table test.wms_test,TOKENS(TK-MY=@GETENV ('GGENVIRONMENT' , 'OSUSERNAME'));

备注:TOKENS,自定义的,可以去除

table test.wms_entry_warehouse_package;

# ADD EXTRACT ext_wpkg, tranlog,begin now

# ADDEXTTRAIL /usr/local/soft/ggs_source/dirdat/W3, EXTRACT ext_wpkg

2.6  配置pump

Pump 进程运行在数据库源端,其作用非常简单。如果源端使用了本地的trail 文件, 那么Pump 进程就会把trail 以数据块的形式通过TCP/IP协议发送到目标端,这通常也是推 荐的方式。Pump 进程本质是Extract 进程的一种特殊形式,如果不使用trail 文件,那么就 是Extract 进程在抽取完数据以后,直接投递到目标端。

与Pump 进程相对应的叫做Server Collector 进程,这个进程不需要引起人们的关注, 因为在实际操作过程中无需对其进行任何配置,所以对人们来说它是透明的。它运行在目 标端,其任务就是把 Extract/Pump 投递过来的数据块重新组装成trail 文件,人们称之为远 程trail 文件。

配置命令:

# edit param pum_wpkg

extract pum_wpkg

rmthost 192.168.3.65,mgrport 17809

rmttrail /usr/local/ogg/ogg/dirdat/WC

passthru

gettruncates

table test.wms_test;

# ADD EXTRACT pum_wcmd,EXTTRAILSOURCE /usr/local/soft/ggs_source/dirdat/W3;

# ADDRMTTRAIL /usr/local/ogg/ogg/dirdat/WC, EXTRACT pum_wpkg

备注:/usr/local/ogg/ogg/dirdat目标端 ogg路径

2.7  配置defgen

# edit param defgen_wpkg

defsfile /usr/local/soft/ggs_source/dirdef/defgen_wpkg.prm

sourcedb test@localhost:3306,userid root,password root

table test.wms_entry_warehouse_wpkg;

备注:用于生成表字段映射

2.8  生成defgen表字段映射

进入ogg根目录

# ./defgen paramfile/usr/local/soft/ggs_source/dirprm/defgen_wpkg.prm

备注:拷贝dirdef/defgen_wpkg.prm文件到目标端dirdef/目录下

2.9  启动extract和pump

# start ext_wpkg

# start pum_wpkg

# info all

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

四.目标端

1.    环境

1.1  系统账号

账号:182.168.3.65:ogg/ogg

路径:/usr/local/ogg/ogg

1.2  环境变量

# vi ~/.bashrc

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

备注:需要jdk1.8

2.    配置

2.1  配置kafka

定位../dirprm

# vi kafka.props

gg.handlerlist = kafkahandler

gg.handler.kafkahandler.type = kafka

gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties

gg.handler.kafkahandler.TopicName =wms_spark

#gg.handler.kafkahandler.format =avro_op

#gg.handler.kafkahandler.format=delimitedtext

#json

gg.handler.kafkahandler.format = json

gg.handler.kafkahandler.format.insertOpKey = I

gg.handler.kafkahandler.format.updateOpKey = U

gg.handler.kafkahandler.format.deleteOpKey = D

gg.handler.kafkahandler.format.prettyPrint = true

gg.handler.kafkahandler.format.jsonDelimiter = CDATA[]

#gg.handler.kafkahandler.format.generateSchema = true

gg.handler.kafkahandler.format.schemaDirectory = dirdef

#gg.handler.kafkahandler.format.treatAllColumnsAsString = true

gg.handler.kafkahandler.format.includePrimaryKeys = true

#gg.handler.kafkahandler.format.includeColumnNames=true

#gg.handler.kafkahandler.format.fieldDelimiter=♫

gg.handler.kafkahandler.SchemaTopicName=wms_spark_test

gg.handler.kafkahandler.BlockingSend =false

gg.handler.kafkahandler.includeTokens=true

gg.handler.kafka.topicPartitioning=table

gg.handler.kafkahandler.mode =op

#gg.handler.kafkahandler.mode =tx

#gg.handler.kafkahandler.maxGroupSize =100, 1Mb

#gg.handler.kafkahandler.minGroupSize =50, 500Kb

goldengate.userexit.timestamp=utc

goldengate.userexit.writers=javawriter

javawriter.stats.display=TRUE

javawriter.stats.full=TRUE

gg.log=log4j

gg.log.level=INFO

gg.report.time=30sec

#Sample gg.classpath for Apache Kafka

gg.classpath=dirprm/:/usr/local/hadoop/kafka_2.11-0.10.1.0/libs/*:/usr/local/ogg/ogg:/usr/local/ogg/ogg/lib/*

#Sample gg.classpath for HDP

#gg.classpath=/etc/kafka/conf:/usr/hdp/current/kafka-broker/libs/*

javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar

# vi custom_kafka_producer.properties

bootstrap.servers=hadoop-test-01:9092,hadoop-test-02:9092,hadoop-test-03:9092

acks=1

compression.type=gzip

reconnect.backoff.ms=1000

value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer

key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer

# 100KB per partition

batch.size=102400

linger.ms=10000

2.2  启动ogg

# ./ggsci

2.3  配置manager

# edit param mgr

PORT 17809

DYNAMICPORTLIST 17810-17909

AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3

PURGEOLDEXTRACTS /usr/local/ogg/ogg/dirdat/*,usecheckpoints, minkeepdays 3

备注:端口与源端端口对应

2.4  启动mgr

# start mgr

2.5  配置replicat

Replicat 进程,通常也把它叫做应用进程。运行在目标端,是数据传递的最后一站, 负责读取目标端trail 文件中的内容,并将其解析为 DML或DDL语句,然后应用到目标数 据库中。

和Extract 进程一样,Replicat也有其内部的checkpoint 机制,保证进程重新启动后可 以从上次记录的位置开始恢复,而无数据损失的风险。 它的运行状态和 Extract 进程一致,包括 STOPPED、STARTING 、RUNNING 、 ABENDED 。

配置命令:

# edit param rep_wpkg

REPLICAT rep_wpkg

sourcedefs /usr/local/ogg/ogg/dirdef/defgen_wpkg.prm

TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka_wms.props

REPORTCOUNT EVERY 1 MINUTES, RATE

GROUPTRANSOPS 10000

#getUpdateBefores

MAP test.wms_test , TARGET test.wms_test,keycols(ID), colMap(USEDEFAULTS,CREATEDBY=UPDATEDBY);

备注:keyclos设置主键,colMap字段对应

如果默认可以直接:

MAP test.wms_test , TARGET test.wms_test;增加replicat

# add replicat rep_wpkg, exttrail ./dirdat/WC

备注:WC与源端对应

2.6  启动replicat

# start rep_wpkg

# info all

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

五.kafka接受消息格式

{

"table":"test.wms_test",

"op_type":"U",

"op_ts":"2017-08-17 11:04:52.602743",

"current_ts":"2017-08-17T19:04:57.208000",

"pos":"00000000070000013868",

"primary_keys":[

"ID"

],

"tokens":{

"TK-MY":"root"

},

"before":{

"ID":1,

...

},

"after":{

"ID":1,

...

}

}

本章主要利用oracle godengate 实现mysql到kafka同步配置,数据格式为json格式。下章,我们将实现mysql到hbase同步配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值