SQLserver通过OGG for bigdata对接Kafka

1. OGG五大进程的功能


  1. Manager进程是GoldenGate的控制进程,运行在源端和目标端上。它主要作用有以下几个方面:启动、监控、重启Goldengate的其他进程,报告错误及事件,分配数据存储空间,发布阀值报告等。在目标端和源端有且只有一个manager进程

  2. Extract运行在数据库源端,负责从源端数据表或者日志中捕获数据。Extract的作用可以按照阶段来划分为:
    – 初始时间装载阶段:在初始数据装载阶段,Extract进程直接从源端的数据表中抽取数据
    – 同步变化捕获阶段:初始数据同步完成以后,Extract进程负责捕获源端数据的变化(DML和DDL)

  3. Data Pump进程运行在数据库源端,其作用是将源端产生的本地trail文件,把trail以数据块的形式通过TCP/IP 协议发送到目标端,这通常也是推荐的方式。pump进程本质是extract进程的一种特殊形式,如果不使用trail文件,那么extract进程在抽 取完数据以后,直接投递到目标端,生成远程trail文件。

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

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


2. OGG 对接 Kafka

1. Kafka安装

zookeeper

  1. 下载;

  2. 部署;
    – 路径自己选择

  3. 设置环境变量:

     Export zookeeper=/home/**/kafka/zookeeper
     Export PATH=$zookeeper:$PATH
    
  4. 修改zookeeper/conf下的配置文件:

     zoo_sample.cfg ; 
     Datadir :$ZOOKEEPER_HOME/data;端口默认
    
  5. 启动zookeeper:

     zookeeper/bin/.zkSerer.sh start  sudo 执行
    

kafka

  1. 下载;

  2. 部署:
    – 路径自定

  3. 设置环境变量:

     export KAFKA_HOME=/home/**/kafka/kafka_2.11
     export PATH=$KAFKA_HOME/bin:$PATH
    
  4. 修改/kafka/kafka_2.11/config下的配置文件
    1.zookeeper.properties:

     dataDir=/home/kk/kafka/zookeeper
     dataLogDir=/home/kk/kafka/logs/zookeeper
     # the port at which the clients will connect
     clientPort=2181
     # disable the per-ip limit on the number of connections since this is a non-production config
     maxClientCnxns=0
    

    2.SerVer.properties

     # The address the socket server listens on. It will get the value returned from
     # java.net.InetAddress.getCanonicalHostName() if not configured.
     listeners=PLAINTEXT://127.0.0.1:9092
     advertised.listeners=PLAINTEXT://127.0.0.1:9092
     zookeeper.connect=127.0.0.1:2181
    

    写执行/停止脚本

     .startKafka.sh
     /home/kk/kafka/kafka_2.11/bin/zookeeper-server-start.sh /home/kk/kafka/kafka_2.11/config/zookeeper.properties &
     /home/kk/kafka/kafka_2.11/bin/kafka-server-start.sh /home/kk/kafka/kafka_2.11/config/server.properties &
     
     .stopKafka.sh
     /home/kk/kafka/kafka_2.11/bin/zookeeper-server-stop.sh /home/kk/kafka/kafka_2.11/config/zookeeper.properties &
     /home/kk/kafka/kafka_2.11/bin/kafka-server-stop.sh /home/kk/kafka/kafka_2.11/config/server.properties &
    

    赋权

     Sudo chmod -R 775 .**.sh  .**sh
    

    启动kafka

     ./.**.sh
    

jdk

  1. 安装;

  2. 部署;

  3. 环境变量:

    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-jdk/
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export JRE_HOME=$JAVA_HOME/jre
    

2.测试

  1. 先启动zookeeper -> kafka.
  2. Zookeeper 启动时会生成服务文件,放入系统进程。 名字为zookeeper.serVer.pid
  3. 运行kafka启动脚本。
  4. 发布主题:./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
  5. 查看主题:./kafka-topics.sh --list --zookeeper localhost:2181

3.安装ogg for bigdata

  1. 下载;

  2. 部署;

  3. 环境变量:

     #OGG
     export OGG_HOME=/home/kk/OGG_BD
     export PATH=$OGG_BD:$PATH
     export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/server/ 
    
  4. 进入$OGG_HOME运行ggsci;

  5. 初始化目录;

安装完成

3.开始进行数据对接

  • 源端为sqlserVer 10.100.4.182
  1. 创建数据库,添加数据表。

  2. 在ODBC中添加数据源

  3. 在OGG中添加manager进程

     PORT 7809
    
  4. 在OGG中添加extract进程

     Add extract	msext, tranlog, begin now
     Add rmttrail /home/kk/OGG_BD/dirdat/ms, extract msext
     Edit	param extract:
     EXEXACT MSEXT 
     SOURCEDB HR 
     TRANLOGOPTIONS MANAGESECONDARYTRUNCATIONPOINT 
     //此选项要求Extract进程定期检查和删除CDC捕获作业,从而为捕获的数据提供更好的性能和更少的占用空间。
     RMTHOST ****,MGRPORT 7809 
     RMTTRAIL /home/kk/OGG_BD/dirdat/ ms 
     TABLE HRSCHEMA.EMP;
    
  • 目标端为kafka 10.100.4.184
  1. 安装kafka,已经ogg for bigdata

  2. 在OGG中添加manager进程

     Port 7809
    
  3. 在OGG中添加checkpoint进程

     Edit param ./GLOBALS:
     Checkpointtable hrschema.checkpoint
    
  4. 在OGG中添加replicate进程

     Edit param tokafka:
     REPLICAT tokafka
     sourcedefs /home/kk/OGG_BD/dirdef/emp.def
     TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props
     REPORTCOUNT EVERY 1 MINUTES, RATE 
     GROUPTRANSOPS 10000
     MAP emp.def, TARGET emp.def;
    
  5. 配置kafka.props

     Cd ~/OGG_BD/dirprm
     Vi kafka.props
     
     gg.handlerlist=kafkahandler //handler类型
     gg.handler.kafkahandler.type=kafka
     gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties //kafka相关配置
     gg.handler.kafkahandler.topicMappingTemplate=test_ogg //kafka的topic名称,无需手动创建	
     gg.handler.kafkahandler.format=json //传输文件的格式,支持json,xml等
     gg.handler.kafkahandler.mode=op  //OGG for Big Data中传输模式,即op为一次SQL传输一次,tx为一次事务传输一次
     gg.classpath=dirprm/:/opt/kafka_2.11-1.1.0/libs/*:/opt/ogg/:/opt/ogg/lib/*
    
  6. 配置 custom_kafka_prodicer.properties

     Vi custom_kafka_prodicer.properties:
     
     bootstrap.servers=10.100.4.184:9092 //kafkabroker的地址
     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
    
  7. 把trail添加到replicat中

     Add replicat rekafka exttrail ~/OGG_BD/dirdat/ms,checkpointtable hrschema.checkpoint
    

配置完成

测试

4. 创建标准报告配置

源端mgr->源端extract->目标端mgr->目标端trail->目标端replicate

目标端为Kafka单机。

启动kafka

启动源端mgr
启动源端extract

5. 问题总结

Problems:
2019-01-24 14:54:14 WARNING OGG-01223 Oracle GoldenGate Capture for ODBC, MSEXT.prm: Unknown error sending data over TCP. Please check if intended receiver program is running (for example server or manager).

问题已解决: 重启两台服务器,并打开目标端的ipv6.因为源端并未指定使用ipv4协议,默认使用ipv6协议  (在./GLOBALS设置)

启动目标端mgr
启动目标端replicate

Problems:
2019-01-25 10:37:02 ERROR OGG-03510 The source database character set is unknown, and the SOURCECHARSET parameter is not specified.

问题已解决:由于windows下sqlserver数据库的字符集与目标端默认字符集不匹配导致这一问题。去源端的数据库中去查找字符集,发现只有排序规则(window sqlserver的排序规则就是字符集变种)。
在目标端的replicate配置文件中添加sourcecharset  Chinese_PRC_CI_AS;依然错误,无法识别这个字符集。
翻看sourcecharset的默认字符集中没有 Chinese_PRC_CI_AS

SELECT COLLATIONPROPERTY( 'chinese_prc_ci_as', 'codepage' )
查看代码页如果是936代表gbk  20936 代表gb2312
查到为gbk字符集 设置sourcecharset gbk

参考

感谢伦哥
Oracle 对接 kafka

你可能感兴趣的:(OGG,linux,Windows)