You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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顺序故障HandlerReplicat是否ABEND?
cassandra → kafkaconnectKafka否
cassandra → kafkaconnectCassandra是
kafkaconnect → cassandraKafka是
kafkaconnect → cassandraCassandra否

结论

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:07:35