Oracle Goldengate(ogg)配置和安装 投递消息至kafka

一、环境信息

ogg安装分为两个版本,源端和目标端安装版本信息不同,源端版本大于或等于oracle版本,目标端大于或等于源端ogg版本即可,具体信息如下

版本ip主机名映射
源端Oracle GoldenGate 11.2.1.0.3 for Oracle on Linux x86-64192.168.56.20jzy
目标端Oracle GoldenGate for Big Data 12.3.1.1.1 on Linux x86-64192.168.56.10jzy01

ogg资源至官网下载,或者通过如下提供资源安装

链接:https://pan.baidu.com/s/1PjfnHsrsFvGIrODz6FmYIA
提取码:kx3e

下载包含如下内容

# 源端
V34339-01.zip
# 目标端
V971332-01.zip

二、源端安装

2.1 源端ogg相关

  1. 建立目录并解压ogg至对应目录
mkdir /opt/soft/ogg

unzip V34339-01.zip -d /opt/soft/ogg/

# 解压后得到一个ogg的tar类型压缩包,在该目录下进行解压
tar xf fbo_ggs_Linux_x64_ora11g_64bit.tar

# 使oracle用户具有ogg的权限
chown -R oracle:oinstall /opt/soft/ogg/
  1. 配置环境变量

    编辑文件vi /etc/profile

export OGG_HOME=/opt/soft/ogg
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export PATH=$OGG_HOME:$PATH
  1. 使环境变量生效
source /etc/profile
  1. 使用oracle用户测试ogg命令
su - oracle
ggsci
  1. 初始化ogg目录
create subdirs

2.2 源端Oracle相关

  1. oracle打开归档模式
su - oracle
sqlplus / as sysdba
  1. 检查是否为归档模式
archive log list 

​ 如下disabled为关闭,enabled则为开启
在这里插入图片描述

  1. 顺序执行打开归档模式,如归档模式已打开则跳过
shutdown immediate (立即关闭数据库)
startup mount (启动实例并加载数据库,但不打开)
alter database archivelog; (更改数据库为归档模式)
alter database open; (打开数据库)
alter system archive log start; (启用自动归档)
  1. Oracle打开日志相关

    OGG基于辅助日志等进行实时传输,故需要打开相关日志确保可获取事务内容,通过下面的命令查看该状态

select force_logging, supplemental_log_data_min from v$database;

在这里插入图片描述

​ 若为NO,则需要通过命令修改

alter database force logging;
alter database add supplemental log data;
  1. Oracle开启全列补充日志

    使用如下命令查看是否开启

select supplemental_log_data_all from v$database;  

​ 若为No,则通过如下命令开启

alter database add supplemental log data(all) columns;

在这里插入图片描述

  1. Oracle创建复制用户

    首先root用户建立相关文件夹,并赋予权限

mkdir -p /home/oracle/app/oracle/oggdata/orcl
chown -R oracle:oinstall /home/oracle/app/oracle/oggdata/orcl

​ 执行如下sql

SQL> create tablespace oggtbs datafile '/home/oracle/app/oracle/oggdata/orcl/oggtbs01.dbf' size 1000M autoextend on;

Tablespace created.

SQL>  create user ogg identified by ogg default tablespace oggtbs;

User created.

SQL> grant dba to ogg;

Grant succeeded.
  1. Oracle创建一个表用于测试ogg投递消息
create user test_ogg  identified by test_ogg default tablespace users;
grant dba to test_ogg;
conn test_ogg/test_ogg;
create table test_ogg(id int ,name varchar(20),primary key(id));

三、目标端安装

  1. 建立目录并解压ogg至对应目录
mkdir /opt/soft/ogg

unzip V971332-01.zip -d /opt/soft/ogg/

# 解压后得到一个ogg的tar类型压缩包,在该目录下进行解压
cd /opt/soft/ogg
tar xf fbo_ggs_Linux_x64_ora11g_64bit.tar
  1. 配置环境变量

    编辑文件vim /etc/profile,末尾添加如下内容

# OGG_HOME
export OGG_HOME=/opt/soft/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
  1. 使环境生效
source /etc/profile
  1. ogg初始化目录
cd /opt/soft/ogg

ggsci

create subdirs

四、开始配置投递

投递消息配置(以test_ogg表为例)

4.1 OGG源端配置

  1. 切换到oracle用户,执行如下命令
su - oracle

cd /opt/soft/ogg

ggsci

# 登入ogg数据库
GGSCI (jzy) 1> dblogin userid ogg password ogg
Successfully logged into database.
  1. 编辑globals文件(上文1中进入目录cd请严格执行,因为配置文件中很多采用./格式,如果不希望产生错误请全部修改为绝对路径)
GGSCI (jzy) 2> edit param ./globals

# 添加如下内容
oggschema ogg
  1. 配置管理器mgr(开启用于管理各个进程)
GGSCI (jzy) 3> edit param mgr

# 添加如下内容
PORT 7809
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3

注:

PORT即mgr的默认监听端口;

DYNAMICPORTLIST动态端口列表,当指定的mgr端口不可用时,会在这个端口列表中选择一个,最大指定范围为256个;

AUTORESTART重启参数设置表示重启所有EXTRACT进程,最多5次,每次间隔3分钟;

PURGEOLDEXTRACTS即TRAIL文件的定期清理

  1. 添加复制表
GGSCI (jzy) 4> add trandata test_ogg.test_og

# 查看是否添加
GGSCI (jzy) 5> info trandata test_ogg.test_ogg

注:

这里以test_ogg为例,只有一张表,实际生产环境可能有多个表需要复制,这里支持统配符的形式,可以使用通配符添加多个复制表,如:add trandata test_ogg.*这种形式即可添加库中所有的表为复制表

  1. 配置extract进程 注意:所有进程名不能超过8个字符,否则报错
GGSCI (jzy) 6> edit param extkafka

#添加如下内容
extract extkafka
dynamicresolution
SETENV (ORACLE_SID = "orcl")
SETENV (NLS_LANG = "american_america.AL32UTF8")
userid ogg,password ogg
exttrail /opt/soft/ogg/dirdat/to
table test_ogg.test_ogg;

注:

说明:

第一行指定extract进程名称;

dynamicresolution动态解析;

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

userid ggs,password ggs即OGG连接Oracle数据库的帐号密码,即前面的复制帐号ogg;

exttrail定义trail文件的保存位置以及文件名,注意这里文件名只能是2个字母,其余部分OGG会补齐;此外如果投递目标方也有其他源投递进去,请注意不要与其他源的trail文件保存位置名重复

table即复制表的表名,支持*通配,必须以;结尾,==多表投递可以使用table test_ogg.*的形式

  1. 添加extract进程
GGSCI (jzy) 7> add extract extkafka,tranlog,begin now

# 如果报错ERROR: Could not create checkpoint file,可能是初始化目录没有创建完成,再次执行create subdirs即可

​ 添加trail文件的定义与extract进程绑定

GGSCI (jzy) 10> add exttrail /opt/soft/ogg/dirdat/to,extract extkafka
  1. 配置pump进程

pump进程本质上来说也是一个extract,只不过他的作用仅仅是把trail文件传递到目标端,配置过程和extract进程类似,只是逻辑上称之为pump进程

GGSCI (jzy) 11> edit param pukafka

# 添加如下内容
extract pukafka
passthru
dynamicresolution
userid ogg,password ogg
rmthost 192.168.56.10 mgrport 7809
rmttrail /opt/soft/ogg/dirdat/to
table test_ogg.test_ogg;

注:

第一行指定extract进程名称;

passthru即禁止OGG与Oracle交互,我们这里使用pump逻辑传输,故禁止即可;

dynamicresolution动态解析;

userid ogg,password ogg即OGG连接Oracle数据库的帐号密码;

rmthostmgrport即目标端(kafka)OGG的mgr服务的地址以及监听端口;

rmttrail即目标端trail文件存储位置以及名称。

  1. 分别将本地trail文件和目标端的trail文件绑定到extract进程:
#本地
GGSCI (jzy) 12> add extract pukafka,exttrailsource /opt/soft/ogg/dirdat/to
#目标端
GGSCI (jzy) 13> add rmttrail /opt/soft/ogg/dirdat/to,extract pukafka
  1. 配置define文件

Oracle与MySQL,Hadoop集群(HDFS,Hive,kafka等)等之间数据传输可以定义为异构数据类型的传输,故需要定义表之间的关系映射,在OGG命令行执行:

GGSCI (jzy) 14> edit param test_ogg

defsfile /opt/soft/ogg/dirdef/test_ogg.def
userid ogg,password ogg
table test_ogg.test_ogg;

支持通配符形式table test_ogg.*;

  1. 进入OGG主目录下执行如下命令
[root@jzy ~]# su - oracle
[oracle@jzy ~]$ cd /opt/soft/ogg/
[oracle@jzy ogg]$ ./defgen paramfile dirprm/test_ogg.prm
  1. 执行后将会在dirdef目录下生成test_ogg.test_ogg文件,将该文件发送到目标端同等目录下
[oracle@jzy ogg]$ exit
[root@jzy ~]# scp -r /opt/soft/ogg/dirdef/test_ogg.def root@jzy01:/opt/soft/ogg/dirdef/

4.2 OGG目标端配置

  1. 配置管理器mgr
cd /opt/soft/ogg

ggsci

GGSCI (jzy01) 2> edit param mgr

# 添加如下内容
PORT 7809
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
  1. 配置checkpoint
GGSCI (jzy01) 3> edit param ./GLOBALS

# 添加如下内容
CHECKPOINTTABLE test_ogg.checkpoint
  1. 配置replicat进程
GGSCI (jzy01) 4> edit param rekafka

# 添加如下内容
REPLICAT rekafka
sourcedefs /opt/soft/ogg/dirdef/test_ogg.test_ogg
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props
REPORTCOUNT EVERY 1 MINUTES, RATE 
GROUPTRANSOPS 10000
MAP test_ogg.test_ogg, TARGET test_ogg.test_ogg;

注:

REPLICATE rekafka定义rep进程名称;

sourcedefs即在在源ogg端发送过来的表映射文件;

TARGETDB LIBFILE即定义kafka一些适配性的库文件以及配置文件,配置文件位于OGG主目录下的dirprm/kafka.props;

REPORTCOUNT即复制任务的报告生成频率;

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

MAP即源端与目标端的映射关系,多表支持通配符形式,如:MAP test_ogg.*, TARGET test_ogg.*;

  1. 配置kafka.props
[root@jzy01 ~]# cd /opt/soft/ogg/dirprm/
[root@jzy01 dirprm]# vim 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.format.includePrimaryKeys=true
gg.handler.kafkahandler.mode=op
gg.classpath=dirprm/:/opt/soft/kafka212/libs/*:/opt/soft/ogg/:/opt/soft/ogg/lib/*

注:

gg.classpath该行配置的路径相关为该服务器上kafka的lib路径
生成的topic可以使用如下形式动态生成,每一张表对应一个topic:
gg.handler.kafkahandler.topicMappingTemplate=${tableName}

  1. 配置kafka连接参数
vim custom_kafka_producer.properties

# 添加如下内容
bootstrap.servers=192.168.56.10: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
  1. 添加trail文件到replicat进程
GGSCI (jzy01) 5> add replicat rekafka exttrail /opt/soft/ogg/dirdat/to,checkpointtable test_ogg.checkpoint

以上所有内容配置完成,下面可以对配置中得test_ogg做相关测试。

五、 测试

  1. 目标端打开kafka相关
[root@jzy01 dirprm]# zkServer.sh start

[root@jzy01 dirprm]# kafka-server-start.sh /opt/soft/kafka212/config/server.properties
  1. 启动ogg所有进程

启动顺序:

源mgr -> 目标mgr -> 源extract -> 源pump -> 目标replicat

源端

start mgr
start extkafka
start pukafka

目标端

start mgr
start rekafka

可以通过info all查看所有进程启动信息

在这里插入图片描述

如果启动不了,可以去ogg主目录查看相关日志信息

在这里插入图片描述

  1. 改变测试表信息,插入一条数据
conn test_ogg/test_ogg
insert into test_ogg values(1,'zhangsan');
commit;
  1. 此时表信息发生变化,可以去目标端服务器查看kafka自动创建了test_ogg的topic,消费test_ogg消息可以查看到变化的信息,如下
# 查看topic,发现自动创建的topic
[root@jzy01 ~]# kafka-topics.sh --zookeeper jzy01:2181 --list
test_ogg

# 消费topic,查看投递信息如下
[root@jzy01 ~]# kafka-console-consumer.sh --bootstrap-server jzy01:9092 --from-beginning --topic test_ogg
{"table":"TEST_OGG.TEST_OGG","op_type":"I","op_ts":"2021-04-19 14:31:36.729546","current_ts":"2021-04-19T14:31:41.548000","pos":"00000000000000001062","after":{"ID":1,"NAME":"zhangsan"}}
  1. 改变测试表信息,插入一条数据
conn test_ogg/test_ogg
insert into test_ogg values(1,'zhangsan');
commit;
  1. 此时表信息发生变化,可以去目标端服务器查看kafka自动创建了test_ogg的topic,消费test_ogg消息可以查看到变化的信息,如下
# 查看topic,发现自动创建的topic
[root@jzy01 ~]# kafka-topics.sh --zookeeper jzy01:2181 --list
test_ogg

# 消费topic,查看投递信息如下
[root@jzy01 ~]# kafka-console-consumer.sh --bootstrap-server jzy01:9092 --from-beginning --topic test_ogg
{"table":"TEST_OGG.TEST_OGG","op_type":"I","op_ts":"2021-04-19 14:31:36.729546","current_ts":"2021-04-19T14:31:41.548000","pos":"00000000000000001062","after":{"ID":1,"NAME":"zhangsan"}}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Oracle GoldenGateOracle公司提供的一款高性能、可靠的实时数据复制和数据同步软件,可以实现不同数据库之间的数据同步、数据复制和数据集成等功能。下面是Oracle GoldenGate在线配置步骤: 1. 创建OGG用户和OGG数据目录 首先需要创建OGG用户和OGG数据目录。可以使用以下SQL语句创建OGG用户,并授予必要的权限: ``` CREATE USER ogg IDENTIFIED BY ogg; GRANT DBA TO ogg; ``` 然后创建OGG数据目录: ``` mkdir /u01/app/ogg ``` 2. 下载并安装Oracle GoldenGate软件 从Oracle官网下载相应版本的Oracle GoldenGate软件,然后解压缩到指定目录。假设解压缩到目录/opt/ogg19c。 3. 配置OGG参数文件 在/opt/ogg19c下创建一个名为dirprm的目录,并在该目录下创建OGG的参数文件。参数文件主要包括OGG的连接信息、数据源信息、数据目标信息等。以下是一个简单的参数文件示例: ``` GGSCI> edit params ggs.prm extract ggs userid ogg, password ogg rmthost 192.168.1.100, mgrport 7809 rmttrail /u01/app/ogg/dirdat/lt table test.*; replicat ggr userid ogg, password ogg assumetargetdefs map test.*, target test.*; ``` 4. 配置OGG进程文件 在/opt/ogg19c下创建一个名为dirrpt的目录,并在该目录下创建OGG的进程文件。进程文件主要包括OGG的抽取进程、传输进程、应用进程等信息。以下是一个简单的进程文件示例: ``` GGSCI> edit params mgr.prm port 7809 userid ogg, password ogg ``` 5. 启动OGG管理进程 在/opt/ogg19c下执行以下命令启动OGG管理进程: ``` ./ggsci GGSCI> start mgr ``` 6. 启动OGG抽取进程和应用进程 在/opt/ogg19c下执行以下命令启动OGG抽取进程和应用进程: ``` ./ggsci GGSCI> start extract ggs GGSCI> start replicat ggr ``` 7. 监控OGG进程状态 在/opt/ogg19c下执行以下命令可以查看OGG进程状态: ``` ./ggsci GGSCI> info all ``` 以上就是Oracle GoldenGate在线配置的基本步骤。需要根据具体的数据源和数据目标情况进行相应的参数配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值