Oracle GoldenGate gg.handlerlist问题:Replicat未在所有Handler故障时ABEND
GoldenGate Replicat多Handler故障行为测试报告
背景
针对配置双Handler的GoldenGate Replicat进程开展测试,分别使用两种Handler顺序:
gg.handlerlist=cassandra,kafkaconnect
或
gg.handlerlist=kafkaconnect,cassandra
测试目标:确保任意Handler故障时,Replicat进程都会触发ABEND(异常终止)。
测试执行
测试1 – Handler顺序:cassandra → kafkaconnect
- 测试1a – Kafka故障、Cassandra正常:停止Kafka服务器,Cassandra正常运行,Replicat未触发ABEND。
- 测试1b – Cassandra故障、未触发Kafka:Cassandra集群宕机,Replicat触发ABEND。
测试2 – Handler顺序:kafkaconnect → cassandra
- 测试2a – Kafka故障、Cassandra正常:停止Kafka服务器,Cassandra正常运行,Replicat触发ABEND。
- 测试2b – Cassandra故障、Kafka正常:Cassandra集群宕机,Kafka正常运行,Replicat未触发ABEND。
结果汇总
| Handler顺序 | 故障Handler | Replicat是否ABEND? |
|---|---|---|
| cassandra → kafkaconnect | Kafka | 否 |
| cassandra → kafkaconnect | Cassandra | 是 |
| kafkaconnect → cassandra | Kafka | 是 |
| kafkaconnect → cassandra | Cassandra | 否 |
结论
GoldenGate Replicat仅将gg.handlerlist中的首个Handler视为致命组件(故障时触发ABEND),第二个Handler则被认定为非致命组件——其错误仅会写入日志,不会导致Replicat进程停止。无论调整gg.handlerlist的顺序,都无法实现“任意Handler故障即触发ABEND”的需求。
相关配置文件
Replicat属性文件(.props)
gg.handlerlist=cassandra,kafkaconnect # Cassandra handler properties gg.handler.cassandra.type=cassandra gg.handler.cassandra.DatastaxJSSEConfigPath=datastaxdriver.properties gg.handler.cassandra.contactPoints=<%= @cassandraHosts %> gg.handler.cassandra.consistencyLevel=LOCAL_QUORUM gg.handler.cassandra.dataCenter=<%= @cassandraDataCenter %> gg.handler.cassandra.compressedUpdates=false # Kafka handler properties gg.handler.kafkaconnect.type=kafkaconnect gg.handler.kafkaconnect.kafkaProducerConfigFile=kafkaconnect.properties gg.handler.kafkaconnect.mode=op gg.handler.kafkaconnect.topicMappingTemplate=<%= @topicName %> gg.handler.kafkaconnect.keyMappingTemplate=${null} gg.handler.kafkaconnect.messageFormatting=op gg.handler.kafkaconnect.metaColumnsTemplate=${objectname[table]},${optype[op_type]},${timestamp[op_ts]},${currenttimestamp[current_ts]},${position[pos]},${primarykeycolumns[primary_keys]} # Date format gg.format.timestamp=yyyy-MM-dd:HH:mm:ss # Regex properties gg.schemareplaceregex=[$] gg.schemareplacestring=_ # Apache Kafka and Cassandra Classpath gg.classpath=<%= @OGGClassPath %> javawriter.bootoptions=-Xmx1G -Xms1G -Duser.timezone=UTC -Djava.class.path=.:ggjava/ggjava.jar:./dirprm gg.log=log4j gg.log.level=INFO # Java environment variables setenv (TZ="UTC")
Replicat参数文件(.prm)
REPLICAT replicat TARGETDB LIBFILE libggjava.so SET property=dirprm/replicat.props REPORTCOUNT EVERY 1 MINUTES, RATE GROUPTRANSOPS 1000 MAP OWNER.TABLE, TARGET OWNER_DEST.TABLE_DEST;
内容的提问来源于stack exchange,提问作者Gabrielenones
相关产品推荐
相关产品推荐

