OGG同步数据到Hadoop平台(Kafka)

 

需求

                                                

OGG同步数据到Hadoop平台(Kafka)_第1张图片 系统部署图

  需求很简单,就是从数据中心利用OGG同步数据到应用系统中的kafka。整理如下

环境清单
名称 系统版本 IP地址 OGG版本 其他服务
源端 Linux version 3.8.13-68.3.4.el6uek.x86_64 192.168.1.41

Version 12.3.0.1.0 OGGCORE_12.3.0.1.0_PLATFORMS_170721.0154_FBO

Oracle Release 12.2.0.1.0 Production 

目的端 Linux version 3.10.0-514.el7.x86_64 192.168.3.63

Version 12.3.0.1.0 OGGCORE_OGGADP.12.3.0.1.0GA_PLATFORMS_170828.1608

kafka_2.12-2.0.0

zookeeper-3.4.13

准备

下载

zookeeper:http://zookeeper.apache.org/releases.html#download

kafka:http://kafka.apache.org/downloads

ogg:http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html

文件自行下载,需说明的是源端和目标端的文件不一样,源端需要下载Oracle GoldenGate for Oracle,目标端需要下载Oracle GoldenGate for Big Data,

安装

根据说明安装相关的软件,并做好相关的配置,如环境变量、网络防火墙等,不在细说,不明白的问度娘

这里列举一下自己的安装路径:

文件安装清单
名称 OGG Oracle zookeeper kafka
源端 /oracle/app/ogg123 /oracle/app/oracle/product/12.1.0/db_1/bin -- --
目的端 /usr/local/ogg -- /usr/local/zookeeper-3.4.13 /usr/local/kafka_2.12-2.0.0

配置

配置
名称 源端 目的端
OGG环境变量

1.编辑profile

[oracle@zoedb41 bin]$ vim /etc/profile

2.添加如下

export OGG_HOME=/oracle/app/ogg123

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib

export PATH=$OGG_HOME:$PATH

3.使之生效

[oracle@zoedb41 bin]$ source /etc/profile

4.测试

[oracle@zoedb41 bin]$ ggsci

1.编辑profile

[root@localhost]# $ vim /etc/profile

2.添加如下

export OGG_HOME=/usr/local/ogg
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:

$JAVA_HOME/jre/lib/amd64/server:$JAVA_HOME/jre/lib/amd64/libjsig.so:

$JAVA_HOME/jre/lib/amd64/server/libjvm.so:$OGG_HOME/lib
export PATH=$OGG_HOME:$PATH

3.使之生效

[root@localhost]$ source /etc/profile

4.测试

[root@localhost]$ ggsci

Oracle服务配置


1.为Oracle创建PDB 公用用户C##CDCCONNECT,并授予指定容器数据库DBA权限
2.为Oracle数据库启用OGG支持
SQL> ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;

 

3.启用最小补充日志记录与强制日志记录模式(必须开启)

[OGG基于辅助日志等进行实时传输,故需要打开相关日志确保可获取事务内容]

3.1登录sql plus
   查询当前状态,如果皆为YES则已开启,可直接跳至3. Oracle启用架构级补充日志继续操作
   SELECT supplemental_log_data_min, force_logging FROM v$database;
3.2.开启命令:
  SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

  SQL> ALTER DATABASE FORCE LOGGING;
3.3.开启后验证状态
  SELECT supplemental_log_data_min, force_logging FROM v$database;
3.4.开启后切换日志文件
  SQL> ALTER SYSTEM SWITCH LOGFILE;


4.启用架构级补充日志

4.1.tnsnames.ora配置PDB连接地址
4.2.登录数据库
  DBLOGIN USERID C##CDCCONNECT@zoehdc,password CDCCONNECT
4.3.启用补充日志
  ADD SCHEMATRANDATA schema ALLCOLS

5.开启挖掘服务器(必须开启)
5.1.登录数据库【需要使用CDB$root进行登录】
  DBLOGIN USERID C##CDCCONNECT password CDCCONNECT
5.2.注册挖掘服务器
  REGISTER EXTRACT extkafka DATABASE CONTAINER (zoehdc)

 

   Manager配置

GGSCI (zoedb41 as C##CDCCONNECT@zoecdb/ZOEHDC) 42> edit params mgr

--默认监听端口

PORT 7809

--动态端口列表,当默认监听端口不可用时,会在端口列表中选择一个,范围为256个
DYNAMICPORTLIST 7810-7909
AUTOSTART ER *

--重启参数设置表示重启所有EXTRACT进程,最多3次,每次间隔5分钟
AUTORESTART ER *,RETRIES 3,WAITMINUTES 5,RESETMINUTES 60

--TRAIL文件的定期清理
PURGEOLDEXTRACTS ./dirdat/*,USECHECKPOINTS,MINKEEPDAYS 7

GGSCI (localhost.localdomain) 54> edit params mgr

PORT 7809
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3

Extract进程配置

GGSCI (zoedb41 as C##CDCCONNECT@zoecdb/ZOEHDC) 49> edit param extkafka

--进程名称

extract extkafka

--设置环境变量,这里分别设置了Oracle数据库以及字符集

--SETENV (ORACLE_SID = "zoehdc")
SETENV (NLS_LANG = "AMERICAN_AMERICA.ZHS16GBK")

--OGG连接Oracle数据库的帐号密码
userid  C##CDCCONNECT,password CDCCONNECT
DBOPTIONS ALLOWUNUSEDCOLUMN
discardfile ./dirrpt/exkafka.dsc,purge

--定义trail文件的保存位置以及文件名,文件名只能是2个字母,其余部分OGG会补齐
exttrail ./dirdat/to
FETCHOPTIONS FETCHPKUPDATECOLS

SOURCECATALOG ZOEHDC

--复制表的表名,支持*通配,必须以;结尾
table ODS.PAT_BASIC_INFO;

 

使用PDB用户登录

GGSCI (zoedb41) 1>DBLOGIN USERID C##CDCCONNECT password CDCCONNECT

添加进程

GGSCI (zoedb41 as C##CDCCONNECT@zoecdb/ZOEHDC) 2>add extract extkafka,tranlog,begin now

EXTRACT added.

添加trail文件与extract进程绑定

GGSCI (zoedb41 as C##CDCCONNECT@zoecdb/ZOEHDC)3>add exttrail ./dirdat/to,extract extkafka

EXTTRAIL added.

 
Pump进程配置

GGSCI (zoedb41 as C##CDCCONNECT@zoecdb/ZOEHDC) 60> edit params pumkafka

--指定extract进程名称
extract pumkafka

SETENV(NLS_LANG ="AMERICAN_AMERICA.ZHS16GBK")

--OGG连接Oracle数据库的帐号密码
userid C##CDCCONNECT,password CDCCONNECT

--目标端(kafka)OGG的mgr服务的地址以及监听端口
rmthost 192.168.3.63 mgrport 7809

--目标端trail文件存储位置以及名称
rmttrail /usr/local/ogg/dirdat/to

--复制表的表名,支持*通配,必须以;结尾
SOURCECATALOG ZOEHDC
table ODS.PAT_BASIC_INFO;

 

同extract进程一样:

GGSCI (zoedb41 as C##CDCCONNECT@zoecdb/ZOEHDC) 1> add extract pumkafka,exttrailsource ./dirdat/to

EXTRACT added.

GGSCI (zoedb41 as C##CDCCONNECT@zoecdb/ZOEHDC) 2> add rmttrail ./dirdat/to,extract pumkafka

RMTTRAIL added.

 
映射表

GGSCI (zoedb41 as C##CDCCONNECT@zoecdb/ZOEHDC) 79> edit params ormkafka

--Oracle与MySQL,Hadoop集群(HDFS,Hive,kafka等)等之间数据传输可以定义为异构数据类型的传输,

--故需要定义表之间的关系映射
defsfile /oracle/app/ogg123/dirdef/ods.PAT_BASIC_INFO

--同步的表信息
userid ods@zoehdc,password ods

table ods.PAT_BASIC_INFO;

 

在OGG主目录下执行(oracle用户):

[oracle@zoedb41 ogg123]$ ./defgen paramfile ./dirprm/ormkafka.prm

检查生成的define文件是否存在

[oracle@zoedb41 dirdef]$ ll -l /oracle/app/ogg123/dirdef

将生成的/oracle/app/ogg123/dirdef/ods.PAT_BASIC_INFO发送的目标端ogg目录下的dirdef里:

oracle@zoedb41 dirdef]$ scp -r /oracle/app/ogg123/dirdef/ods.PAT_BASIC_INFO

[email protected]:/usr/local/ogg/dirdef/

检查从源端生成的define文件是否存在

[root@localhost]# ll -l /usr/local/ogg/dirdef/

 

Replicat进程配置  

GGSCI (localhost.localdomain) 1> edit params rekafka

--rep进程名称
REPLICAT rekafka

--在源服务器上定义的表映射文件ormkafka
sourcedefs /usr/local/ogg/dirdef/ods.PAT_BASIC_INFO

--定义kafka一些适配性的库文件以及配置文件,配置文件位于OGG主目录下的dirprm/kafka.props
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props

--复制任务的报告生成频率
--REPORTCOUNT EVERY 1 MINUTES, RATE 

--以事务传输时,事务合并的单位,减少IO操作
--GROUPTRANSOPS 10000

--源端与目标端的映射关系
SOURCECATALOG ZOEHDC
MAP ODS.PAT_BASIC_INFO, TARGET ODS.PAT_BASIC_INFO;

 

添加trail文件与replicat进程绑定

GGSCI (localhost.localdomain) 2> add replicat rekafka exttrail ./dirdat/to,checkpointtable ormkafka.checkpoint

REPLICAT added.

kafka服务配置  

进入config/server.properties

[root@localhost kafka_2.12-2.0.0]# vi config/server.properties 

编辑一下属性

#设置监听地址

listeners=PLAINTEXT://192.168.3.63:9092

 

配置kafka.props

[root@localhost ogg]# cd /usr/local/ogg/dirprm/

[root@localhost ogg]# vim ./dirprm/kafka.props 
gg.handlerlist=kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties
gg.handler.kafkahandler.topicMappingTemplate=test_ogg
gg.handler.kafkahandler.format=json
gg.handler.kafkahandler.mode=op
gg.classpath=dirprm/:/usr/local/kafka_2.12-2.0.0/libs/*:/usr/local/ogg/:/usr/local/ogg/lib/*

 

配置custom_kafka_producer.properties

[root@localhost ogg]# vim ./dirprm/custom_kafka_producer.properties
bootstrap.servers=192.168.3.63: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
batch.size=102400
linger.ms=10000

 

注意:ogg不识别注释,所以properties文件中不能有注释

运行

启动

启动进程
名称 命令(按顺序) 验证
源端

start mgr 

start extkafka

start pumkafka

GGSCI (zoedb41 as C##CDCCONNECT@zoecdb/ZOEHDC) 1> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     RUNNING     EXTKAFKA    00:00:00      00:00:08    
EXTRACT     RUNNING     PUMKAFKA    00:00:00      00:00:00    

目的端

start mgr

start rekafka

GGSCI (localhost.localdomain) 1> info all 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
REPLICAT    RUNNING     REKAFKA     00:00:00      00:00:06  

异常

如果有不是RUNNING可通过查看日志的方法检查解决问题,通过下面两种方法

1.系统

[root@localhost ogg]# vim ggser.log

[root@localhost ogg]# cat ggser.log

[root@localhost ogg]# tail -n 100 ggser.log 

2.ogg命令行,以rekafka进程为例

GGSCI (localhost.localdomain) 1> view report rekafka

测试

 1.现在源端执行sql语句
    conn ods/ods
    update PAT_BASIC_INFO set PATIENT_NAME='农行333' where PATIENT_ID=262;
    commit;

 2.查看源端trail文件状态
    ls -l /oralce/app/ogg123/dirdat/to*
    -rw-rw-rw- 1 oracle oinstall 1464 May 23 10:31 /opt/ogg/dirdat/to000000

 3.查看目标端trail文件状态
    ls -l /usr/local/ogg/dirdat/to*
    -rw-r----- 1 root root 1504 May 23 10:31 /opt/ogg/dirdat/to000000

 4.查看kafka是否自动建立对应的主题,在列表中显示有test_ogg则表示没问题
    [root@localhost kafka_2.12-2.0.0]# bin/kafka-topics.sh --list --zookeeper localhost:2181
    __consumer_offsets
    e
    test-ogg
    test_ogg
    topic-qc

 5.通过消费者看是否有同步消息
    [root@localhost kafka_2.12-2.0.0]# bin/kafka-console-consumer.sh --bootstrap-server 192.168.3.63:9092 --topic test_ogg --from-beginning 
    {"table":"ODS.PAT_BASIC_INFO","op_type":"U","op_ts":"2018-09-04 11:39:56.317593","current_ts":"2018-09-04T12:39:04.642000","pos":"00000000010000004077","before":{"PATIENT_ID":"260","PATIENT_NAME":"建行xx1"},"after":{"PATIENT_ID":"260","PATIENT_NAME":"建行xx12"}}
    {"table":"ODS.PAT_BASIC_INFO","op_type":"U","op_ts":"2018-09-04 12:40:30.402956","current_ts":"2018-09-04T12:40:36.882000","pos":"00000000010000004271","before":{"PATIENT_ID":"262","PATIENT_NAME":"农行"},"after":{"PATIENT_ID":"262","PATIENT_NAME":"农行333"}}  
 

你可能感兴趣的:(数据同步,Hadoop)