只能选择分卷文件的第一部分_Oracle DB实时分析之OGG+Kafka架构(第一弹)

       在大数据时代大量数据需要在不同的系统之间流动、整合。通常核心业务系统的数据存储于业务数据库(OLTP)中。而传统数仓的批量数据同步方式是定期从OLTP系统抽取数据。但是随着业务需求的升级,批量同步无论从实时性,还是对在线OLTP系统的抽取压力都无法满足业务部门的要求。因此像Kafka之类的基于高效消息队列的实时数据采集与分析能力也是各大企业必须要建设的能力之一。 cbde5857a240741e83a2e51e5ac6d2c3.png        目前实时分析的很多场景会涉及到Oracle、MySQL等关系型数据库的实时数据采集工作,同步到Kafka环境之后一般会基于FlinkSQL、Java、Python进行消费程序的开发。由于Oracle数据库的特殊性,通常需要OGG或者Logminer等工具来解析redo日志以实现到Kafka的数据同步。今天我就来介绍下如何通过Oracle GoldenGate技术实现Oracle数据库到Kafka之间的数据实时集成 架构说明 下图是我们将要开发的架构和实时数据流 8aff30a48575886cc68564c098d5e59c.png 我们会通过Oracle VM VirtualBox创建一个Linux环境,在虚拟机中完成所有的开发测试内容。本次测试需要安装的服务如下:
  1. Oracle数据库12c:源端数据库,存储要同步的源表数据
  2. Oracle GoldenGate 12c:源端OOG,用于抽取源端Oracle数据库的数据变更信息,并以中间日志格式(trail log)进行存储,并以DataPump将其输送到另一个目标端OGG(GoldenGate for Big Data 12c)
  3. Oracle GoldenGate for Big Data 12c:目标端OGG,接收源端发送的事务变更日志,并将变更内容推送到Kafka消息队列中Apache Zookeeper/Apache Kafka实例:目标端Kafka消息队列,接收目标端OGG推送过来的数据
开发流程
  1. 启动Oracle数据库
  2. Oracle数据库启用归档日志
  3. 创建ggadmin用户
  4. 创建ESHOP Schema
  5. 初始化GoldenGate Classic
  6. 创建GoldenGate Extract
  7. 安装并运行Apache Kafka
  8. 安装GoldenGate for Big Data
  9. 启动GoldenGate for Big Data Manager
  10. 创建Data Pump
  11. 将事务发布到Kafka
由于内容较多,我们今天先进行1~6部分的开发。 1. 启动Oracle数据库 非商业目的为前提,我们可以从Oracle官网下载并安装Oracle数据库和OGG服务。同时我们也可以直接下载已经预装了数据库和OGG的虚拟机镜像来使用。 虚拟镜像下载地址(需要Oracle账号,可以免费注册) https://www.oracle.com/downloads/developer-vm/community-downloads.html 也可以通过下方连接下载Oracle Big Data Lite Virtual Machine v 4.11(强烈推荐) https://www.oracle.com/database/technologies/bigdatalite-v411.html Oracle Big Data Lite Virtual Machine v 4.11所包含的服务如下:
  • Oracle Enterprise Linux 6.9
  • Oracle Database 12c Release 1 Enterprise Edition (12.1.0.2) - including Oracle Big Data SQL-enabled external tables, Oracle Multitenant, Oracle Advanced Analytics, Oracle OLAP, Oracle Partitioning, Oracle Spatial and Graph, and more.
  • Cloudera Distribution including Apache Hadoop (CDH5.13.1)
  • Cloudera Manager (5.13.1)
  • Oracle Big Data Spatial and Graph 2.4
  • Oracle Big Data Connectors 4.11
  1. Oracle SQL Connector for HDFS 3.8.1
  2. Oracle Loader for Hadoop 3.9.1
  3. Oracle Data Integrator 12c (12.2.1.3.0)
  4. Oracle R Advanced Analytics for Hadoop 2.7.1
  5. Oracle XQuery for Hadoop 4.9.1
  6. Oracle Data Source for Apache Hadoop 1.2.1
  7. Oracle Shell for Hadoop Loaders 1.3.1
Oracle NoSQL Database Enterprise Edition 12cR1 (4.5.12) Oracle JDeveloper 12c (12.2.1.2.0) Oracle SQL Developer and Data Modeler 17.3.1 with Oracle REST Data Services 3.0.7 Oracle Data Integrator 12cR1 (12.2.1.3.0) Oracle GoldenGate 12c (12.3.0.1.2) Oracle R Distribution 3.3.0 Oracle Perfect Balance 2.10.0 下载完毕后会有12个压缩分卷,需要进行解压缩获取.ova虚拟机镜像文件 a701a79d199b4417d1464b782820eaf8.png 下载virtual Box客户端 https://www.virtualbox.org/wiki/Downloads 081219f934f66fe367b169ca763d6ec7.png 安装Virtual Box程序并打开,选择导入 3ba57c0075223a310d32b07d1671851a.png 选择刚刚解压缩成功的ova文件,选择继续 52488e8e84cfe549cc1d5eeb9c952740.png 选择导入,有弹窗时选择同意 7d419d1557c6519eb9645f625a6cb141.png 弹出导入界面 fb4719018c95aa97969d6d2fafe6cef1.png 双击启动 4ac7d56329fd6e31b348c6d896bbf1ca.png BigDataLite-4.11环境登陆
  1. 用户:oracle
  2. 密码:welcome1
6cb276f1e8173547874b53b16462d877.png 双击桌面上的Start/Stop Services图标,然后:
  1. 检查第一项ORCL (Oracle数据库12c),开启服务(空格)
  2. 按回车确认选择
  3. 其他服务设置为off
其他服务设置为off的原因是由于BigDataLite-4.11虚拟机镜像中已经预装了老版本的服务,如ZooKeeper实例等等,在后面我们会安装新版的ZooKeeper以及Kafka环境,因此我们只激活Oracle Database 12C,没有把其他的服务进行激活处理,避免版本冲突的发生 380defb778dbf62c5fb57938d76ad6c8.png 与虚拟机有关的其他信息:
  • Oracle home 文件夹 ($ORACLE_HOME) 为 /u01/app/oracle/product/12.1.0.2/dbhome_1
  • GoldenGate (classic) 安装目录为 /u01/ogg
  • SQL Developer 安装目录为 /u01/sqldeveloper. 可以通过最上端工具栏的SQL Developer图标打开服务
  • Oracle database是基于多租户容器数据库multitenant container database (CDB)安装的
  • Oracle database监听端口为1521
  • root-container的SID为 cdb
  • PDB的SID为 orcl
  • 所有Oracle数据库用户 (SYSSYSTEM, etc.)的密码均为welcome1
  • 连接PDB数据库的tnsname别名为ORCL (可参照 $ORACLE_HOME/network/admin/tnsnames.ora 文件内容)
  • Java home 文件夹 ($JAVA_HOME) 为 /usr/java/latestJDK安装路径为 $JAVA_HOME
2. Oracle数据库启用归档日志 在这一步骤,我们将完成整体架构中如下部分的工作 a76463750488e8b66d3112d21f65ca04.png 我们需要在Oracle中启用归档日志,以便后续可以使用GoldenGate (classic)采集日志 从VM的Linux shell中启动SQL Plus,用户为SYS
sqlplus sys/welcome1 as sysdba
dbf06f084f329a0f325b283735fb5571.png 然后依次运行下列命令(建议逐条执行)
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;ALTER DATABASE FORCE LOGGING;ALTER SYSTEM SWITCH LOGFILE;ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE;SHUTDOWN IMMEDIATE;STARTUP MOUNT;ALTER DATABASE ARCHIVELOG;ALTER DATABASE OPEN;
命令执行完毕界面 bf2ffd40247aaebaa4d64015fbbeb039.png 检查存档日志是否成功启用
ARCHIVE LOG LIST;
可确认日志归档已成功开启 279d03428e241c13d3263cfc82ff865b.png 3. 创建ggadmin用户 下面为GoldenGate (classic)创建一个特殊的Oracle管理员用户。 运行如下代码,创建ggadmin用户
ALTER SESSION SET "_ORACLE_SCRIPT"=TRUE;CREATE USER ggadmin IDENTIFIED BY ggadmin;GRANT CREATE SESSION, CONNECT, RESOURCE, ALTER SYSTEM TO ggadmin;EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE(grantee=>'ggadmin', privilege_type=>'CAPTURE', grant_optional_privileges=>'*');GRANT SELECT ANY DICTIONARY TO ggadmin;GRANT UNLIMITED TABLESPACE TO ggadmin;
85c18ac55c7ff88720897ac5cd4a5a95.png 4. 创建ESHOP Schema 下面需要创建一个新的schema(ESHOP),并且要创建两张表(CUSTOMER_ORDER和CUSTOMER_ORDER_ITEM)用于生成要推送到Kafka中的CDC事件流 使用SQL Plus连接SID为orcl的Oracle PDB
sqlplus sys/welcome1@ORCL as sysdba
b0da766c743dab1c078d09298146c86e.png 运行如下代码
-- 初始化sessionALTER SESSION SET "_ORACLE_SCRIPT"=TRUE;-- 创建表空间CREATE TABLESPACE eshop_tbs DATAFILE 'eshop_tbs.dat' SIZE 10M AUTOEXTEND ON;CREATE TEMPORARY TABLESPACE eshop_tbs_temp TEMPFILE 'eshop_tbs_temp.dat' SIZE 5M AUTOEXTEND ON;-- 创建eshop用户,密码为eshopCREATE USER ESHOP IDENTIFIED BY eshop DEFAULT TABLESPACE eshop_tbs TEMPORARY TABLESPACE eshop_tbs_temp;-- 给eshop用户赋权限GRANT CREATE SESSION TO ESHOP;GRANT CREATE TABLE TO ESHOP;GRANT UNLIMITED TABLESPACE TO ESHOP;GRANT RESOURCE TO ESHOP;GRANT CONNECT TO ESHOP;GRANT CREATE VIEW TO ESHOP;-- 创建 eshop sequencesCREATE SEQUENCE ESHOP.CUSTOMER_ORDER_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;CREATE SEQUENCE ESHOP.CUSTOMER_ORDER_ITEM_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;-- 创建 eshop表CREATE TABLE ESHOP.CUSTOMER_ORDER (ID NUMBER(19) PRIMARY KEY,  CODE VARCHAR2(10),  CREATED DATE,STATUS VARCHAR2(32),  UPDATE_TIME TIMESTAMP);CREATE TABLE ESHOP.CUSTOMER_ORDER_ITEM (ID NUMBER(19) PRIMARY KEY,  ID_CUSTOMER_ORDER NUMBER(19),  DESCRIPTION VARCHAR2(255),  QUANTITY NUMBER(3),CONSTRAINT FK_CUSTOMER_ORDER FOREIGN KEY (ID_CUSTOMER_ORDER) REFERENCES ESHOP.CUSTOMER_ORDER (ID));
875b9d42fc23ef0805bb30b9fe9d5ae8.png 5. 初始化GoldenGate Classic 在这一步骤,我们将完成整体架构中如下部分的工作 573ae10d8445507cfc8325366362fed9.png 下面需要在BigDataListe-4.11虚拟机中设置GoldenGate (classic)实例 在Linux shell中运行如下代码
cd /u01/ogg./ggsci
GoldenGate CLI(命令行界面)会启动 9c6170f4a3219b52de884ed59767c09f.png 在GoldenGate CLI启动Manager
start mgr
以ggadmin用户登陆数据库
dblogin userid ggadmin password ggadmin
1b3d9d715686dc718b3cebd1ec11cc1b.png
add schematrandata orcl.eshop;
可能会报错,显示用户权限不足 7dcc313b9b65134d87f72b5a9dff1217.png 可以通过SQL Developer工具,以SYS用户连接数据库后,为ggadmin用户重新赋予权限
ALTER SESSION SET "_ORACLE_SCRIPT"=TRUE;CREATE USER ggadmin IDENTIFIED BY ggadmin;GRANT CREATE SESSION, CONNECT, RESOURCE, ALTER SYSTEM TO ggadmin;EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE(grantee=>'ggadmin', privilege_type=>'CAPTURE', grant_optional_privileges=>'*');GRANT SELECT ANY DICTIONARY TO ggadmin;GRANT UNLIMITED TABLESPACE TO ggadmin;grant dba to ggadmin container=all;grant create session to ggadmin container=all;
6a678247fbc51b618554d0df26aa280a.png 权限赋予完毕后,重新启动OGG Classic
./ggsci
dblogin userid ggadmin password ggadminadd schematrandata orcl.eshop
d287585908076726f1e847cc29e64154.png 6. 创建 GoldenGate Extract 在这一步骤,我们将完成整体架构中如下部分的工作 d27b3c5db569ba1fb457a7a8f250bbc8.png 创建一个GoldenGate extract来实时监控Oracle archive redo日志,以捕获与ESHOP表相关的数据库事务,并将此SQL修改记录流写入另一个名为trail log的日志文件中 在GoldenGate CLI中运行如下代码
edit params exteshop
在vi界面输入如下代码内容
EXTRACT exteshopUSERID ggadmin,PASSWORD ggadminEXTTRAIL ./dirdat/aaTABLE orcl.eshop.*;
f537848eee3b4e6a5298e28e9626f692.png 保存内容并退出vi,返回GoldenGate CLI 保存的内容将存储在/u01/ogg/dirprm/exteshop.prm 文件中。我们也可以在外部编辑它的内容,而不需要再次从GoldenGate CLI运行edit params exteshop命令来进行 接下来需要在Oracle中注册extract process,在GoldenGate CLI运行以下命令
dblogin userid ggadmin password ggadminregister extract exteshop database container (orcl)
注册成功后,会有如下信息输出 e2cb5c2edc4d39d9709fd9d3e670f99c.png 使用弹出的SCN号来完成extract的配置工作。在GoldenGate CLI中输入如下代码
add extract exteshop, integrated tranlog, scn 13512256add exttrail ./dirdat/aa, extract exteshop
d7b89e9caf47b445a90655afd2863334.png 到这一步,我们就可以启动名为exteshop的GoldenGate extract process了
start exteshop
7ca00d9f267764d332d388d62acb66b4.png 也可以使用以下命令中来检查进程的状态,其中view report exteshop是用来查看extract进程的日志信息
info exteshopview report exteshop
8ac8de675fdfbbbeb3c0defdea104fff.png 最后我们可以验证一下extract过程是否正常工作! 首先我们可以在Linux shell运行如下命令,连接到数据库
sqlplus eshop/eshop@ORCL
然后在原表中插入一条模拟数据
INSERT INTO CUSTOMER_ORDER (ID, CODE, CREATED, STATUS, UPDATE_TIME)VALUES (CUSTOMER_ORDER_SEQ.NEXTVAL, 'AAAA02', SYSDATE, 'DRAFT', SYSTIMESTAMP);INSERT INTO CUSTOMER_ORDER_ITEM (ID, ID_CUSTOMER_ORDER, DESCRIPTION, QUANTITY)VALUES (CUSTOMER_ORDER_ITEM_SEQ.NEXTVAL, CUSTOMER_ORDER_SEQ.CURRVAL, 'Toy Story1', 2);COMMIT;
可确认两条模拟客户数据已插入成功 bf55948ea6b71ae7b2e2db0b42eb941f.png 最后我们退出到GoldenGate CLI界面,执行如下代码
stats exteshop
我们可以看到已经抽取到的日志信息,即往我们的监控表里插入了两条新数据 8361e2d57aac3d5d61c5e8b8b7299a76.png 好了今天就到这里,下期我们再来做后半部分的开发(7~11)
  1. 启动Oracle数据库
  2. Oracle数据库启用归档日志
  3. 创建ggadmin用户
  4. 创建ESHOP Schema
  5. 初始化GoldenGate Classic
  6. 创建GoldenGate Extract
  7. 安装并运行Apache Kafka
  8. 安装GoldenGate for Big Data
  9. 启动GoldenGate for Big Data Manager
  10. 创建Data Pump
  11. 将事务发布到Kafka
谢谢大家~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值