Ogg 支持一张表投递多个topic
验证如下
cd /service/ogg
进入 ogg采集目录
然后使用 ./ggsci 命令进入 ogg 命令行
采集进程
配置 采集进程
edit param extp
extract extp
setenv (nls_lang="american_america.ZHS16GBK")
userid oggadmin@pacs, password root1234
reportcount every 30 minutes, rate
discardfile /service/ogg/dirrpt/trail.dsc, append, megabytes 4096
discardrollover at 3:00
warnlongtrans 2h, checkinterval 300
exttrail /service/ogg/dirdat/pc
--dynamicresolution
dboptions allowunusedcolumn
fetchoptions nousesnapshot
fetchoptions fetchpkupdatecols
Tranlogoptions integratedparams (max_sga_size 256)
GETUPDATEAFTERS
--TRANLOGOPTIONS DBLOGREADER
GETUPDATEBEFORES
TABLE oms.T_MA_TB_SHOP_INFO ;
wq! 保存配置 ,添加一个ext1的进程
GGSCI (localhost.localdomain as ogg@orcl) 9> add extract extp,tranlog,begin now
EXTRACT added.
GGSCI (localhost.localdomain as ogg@orcl) 10> add exttrail /service/ogg/dirdat/pc,extract extp
EXTRACT added.
然后启动采集进程
start extp
停止命令 stop extp
投递进程1
cd /service/ogg2
进入 ogg投递目录
然后使用 ./ggsci 命令进入 ogg2 命令行
配置 投递进程repzc
edit param repzc
REPLICAT repzc
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka_paczc.props
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10000
map oms.T_MA_TB_SHOP_INFO ,target oms.T_MA_TB_SHOP_INFO ;
添加replicat 设置trail文件与检查点
GGSCI (localhost.localdomain) 26> add replicat repzc exttrail /service/ogg/dirdat/pc
REPLICAT added.
配置kafka文件
然后新起一个窗口 使用root用户进入
cd /service/ogg2/dirprm
[root@localhost dirprm]# vi kafka_paczc.props
gg.handlerlist = kafkahandler
gg.handler.kafkahandler.type = kafka
gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer_pactest.properties
#gg.handler.kafkahandler.format =json
#gg.handler.kafkahandler.format=delimitedtext
gg.handler.kafkahandler.topicMappingTemplate= TP_pacs_uat
#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= TP_bi_pacs_zc
gg.handler.kafkahandler.BlockingSend =false
gg.handler.hdfs.format.pkUpdateHandling=update
gg.handler.kafkahandler.includeTokens=true
gg.handler.kafka.topicPartitioning=table
gg.handler.kafkahandler.keyMappingTemplate=${
primaryKeys}
#gg.handler.kafkahandler.topicMappingTemplate=${
tableName}
#gg.handler.kafkahandler.keyMappingTemplate=${
primaryKeys}
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+8
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec
gg.classpath=dirprm/:/service/software/kafka_2.10-0.10.0.1/libs/*:/service/ogg/ggjava/resources/lib/*
javawriter.bootoptions=-Xmx1024m -Xms1024m -Djava.class.path=ggjava/ggjava.jar
[root@localhost dirprm]# vi custom_kafka_producer_pactest.properties
bootstrap.servers=10.88.108.25:9092,10.88.108.26:9092,10.88.108.27:9092
#bootstrap.servers=10.11.12.41:9092,10.11.12.42:9092,10.11.12.43:9092
#bootstrap.servers=10.11.12.41:19192,10.11.12.42:29292,10.11.12.43:39392
acks=1
reconnect.backoff.ms=1000
max.request.size = 502400000
send.buffer.bytes = 502400000
value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
batch.size=16384
linger.ms=0
配好 然后切换到 ogg2命令行 使用start REPZC 启动 进程1
投递进程1 投递到kafka TP_pacs_uat
投递进程2
cd /service/ogg2
进入 ogg投递目录
然后使用 ./ggsci 命令进入 ogg2 命令行
配置 投递进程repzc
edit param rep3
REPLICAT rep3
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka_paczc2.props
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10000
map OMS.T_MA_TB_SHOP_INFO ,target OMS.T_MA_TB_SHOP_INFO ;
添加replicat 设置trail文件与检查点
GGSCI (localhost.localdomain) 26> add replicat repzc exttrail /service/ogg/dirdat/pc
REPLICAT added.
配置kafka文件
然后新起一个窗口 使用root用户进入
cd /service/ogg2/dirprm
[root@localhost dirprm]# vi kafka_paczc2.props
注意 :这里的 gg.handler.kafkahandler.topicMappingTemplate= topic_pacs_sit 一点要和上面的不一样
gg.handlerlist = kafkahandler
gg.handler.kafkahandler.type = kafka
gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer_pactest.properties
#gg.handler.kafkahandler.format =json
#gg.handler.kafkahandler.format=delimitedtext
gg.handler.kafkahandler.topicMappingTemplate= topic_pacs_sit
#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= topic_pacs_sit
gg.handler.kafkahandler.BlockingSend =false
gg.handler.hdfs.format.pkUpdateHandling=update
gg.handler.kafkahandler.includeTokens=true
gg.handler.kafka.topicPartitioning=table
gg.handler.kafkahandler.keyMappingTemplate=${
primaryKeys}
#gg.handler.kafkahandler.topicMappingTemplate=${
tableName}
#gg.handler.kafkahandler.keyMappingTemplate=${
primaryKeys}
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+8
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec
gg.classpath=dirprm/:/service/software/kafka_2.10-0.10.0.1/libs/*:/service/ogg/ggjava/resources/lib/*
javawriter.bootoptions=-Xmx1024m -Xms1024m -Djava.class.path=ggjava/ggjava.jar
配好 然后切换到 ogg2命令行 使用start REP3 启动 进程2
投递进程1 投递到kafka topic_pacs_sit
验证结果如下:
分别去两个topic 去查询 有没有相关表数据 进入
TP_pacs_uat查询结果如下
topic_pacs_sit查询结果如下
即可说明 同一表只要配置一个采集进程 多个投递进程 ,即可分别投递到不同的topic
问题记录:
如果投递没有数据进入kafka
用 命令 info 投递进程名 查询进程信息
可以看到没进数据的 采集 REP3 读取的 位置不对
使用 alter REP3 extseqno 0087,extrba 0 重新初始化 即可