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

Oracle GoldenGate Kafka Connect Handler发送Kafka消息超时问题排查

Oracle GoldenGate for Big Data与Docker Confluent Kafka集成超时问题

问题现象

将Oracle GoldenGate for Big Data(Kafka Connect handler)与Docker部署的Confluent Kafka集成时,Handler启动正常,可读取trail文件且映射功能正常,但向Kafka发送消息时持续抛出超时错误:

=ERROR 2025-11-04 19:25:21.000317 [kafka-producer-network-thread | producer-1] -
KAFKACONNECT-00052 A failure occurred sending the operation message at position [00000000000000003841]
to Kafka to topic [GGRES.GG_TABLE].
org.apache.kafka.common.errors.TimeoutException: Expiring 14 record(s) for GGRES.GG_TABLE-0:
120000 ms has passed since batch creation

环境配置

  • Docker Compose部署Confluent Platform 7.4.0/7.6.0:
    • Kafka Broker:端口9092
    • Kafka Connect:端口8083
    • Schema Registry:端口8081
    • Control Center:端口9021
  • Oracle GoldenGate for Big Data部署在外部非Docker服务器

Kafka Broker配置片段

broker:
  image: confluentinc/cp-kafka:7.4.0
  ports:
    - "9092:9092"
  environment:
    KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092'
    KAFKA_LISTENERS: 'PLAINTEXT://broker:29092,PLAINTEXT_HOST://0.0.0.0:9092'
    KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'

GoldenGate Kafka Connect Handler配置

gg.handlerlist=kafkaconnect
gg.handler.kafkaconnect.type=kafkaconnect
gg.handler.kafkaconnect.kafkaProducerConfigFile=/u01/app/ogg23/ggdeploy/etc/conf/ogg/ora2kafka_producer.properties
gg.handler.kafkaconnect.mode=op
gg.handler.kafkaconnect.topicMappingTemplate=${fullyQualifiedTableName}
gg.handler.kafkaconnect.keyMappingTemplate=${primaryKeys}
gg.handler.kafkaconnect.messageFormatting=row
gg.handler.kafkaconnect.java.home=/usr/lib/jvm/java-17-openjdk
gg.classpath=/u01/app/ogg23/gghome/lib/kafka/*
jvm.bootoptions=-Xmx512m -Xms32m

生产者配置文件(ora2kafka_producer.properties)

bootstrap.servers=IP_ADDRESS:9092
key.converter=io.confluent.connect.avro.AvroConverter
key.converter.schema.registry.url=http://IP_ADDRESS:8081
value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://IP_ADDRESS:8081

已完成的排查项

✅ Broker可达:

nc -vz IP_ADDRESS 9092
Connection succeeded

✅ 主题存在且可写入:

docker exec -it broker kafka-topics --bootstrap-server IP_ADDRESS:9092 --describe --topic GGRES.GG_TABLE

✅ 可手动生产消息:

echo "test" | kafka-console-producer --broker-list localhost:9092 --topic GGRES.GG_TABLE

✅ Schema Registry可达:

curl -s http://IP_ADDRESS:8081/subjects | jq .
[
  "GGRES.GG_TABLE-key",
  "GGRES.GG_TABLE-value"
]

但GoldenGate仍持续抛出超时错误:

=ERROR 2025-11-04 19:25:21.000318 [kafka-producer-network-thread | producer-1] - KAFKACONNECT-00052 A failure occurred sending the operation message at position [00000000000000004254] to Kafka to topic [GGRES.GG_TABLE].
org.apache.kafka.common.errors.TimeoutException: Expiring 14 record(s) for GGRES.GG_TABLE-0:120000 ms has passed since batch creation
=ERROR 2025-11-04 19:25:21.000318 [kafka-producer-network-thread | producer-1] - KAFKACONNECT-00052 A failure occurred sending the operation message at position [00000000000000001734] to Kafka to topic [GGRES.GG_TABLE].
org.apache.kafka.common.errors.TimeoutException: Expiring 14 record(s) for GGRES.GG_TABLE-0:120000 ms has passed since batch creation
Exception in thread "main" oracle.goldengate.util.GGException: Error detected handling transaction commit event.  See the replicat RKAFKA.log file for more information.
    at oracle.goldengate.datasource.UserExitDataSource.commitTransaction(UserExitDataSource.java:2749)
    at oracle.goldengate.datasource.UserExitDataSource.commitTx(UserExitDataSource.java:2269)

环境信息

  • Oracle GoldenGate for Big Data 23.x
  • Confluent Platform 7.4.0 / Kafka Connect 7.6.0
  • Java 17
  • 运行环境:Linux(Docker + 外部OGG服务器)

疑问

  1. 为何Broker可达且手动生产消息正常的情况下,GoldenGate的Kafka Connect handler仍持续超时?
  2. 是否需要调整特定的Kafka Broker配置或handler的Java堆内存?
  3. Confluent 7.4.0(Kafka)与GoldenGate Kafka客户端(6.2.0 jars)版本不匹配是否会导致该问题?

问题解答

1. 超时核心原因

虽然nc能测试TCP连通性,但Kafka客户端与Broker的通信依赖Broker返回的可访问监听地址:
当前Broker配置的KAFKA_ADVERTISED_LISTENERS中,PLAINTEXT_HOST指向localhost:9092,外部OGG服务器的Kafka客户端连接Broker后,会收到这个localhost地址,而外部服务器无法将其解析到Docker内的Broker,导致实际数据传输连接失败,最终触发超时。

2. 配置调整方案

(1)修正Broker监听地址

修改Docker Compose中Broker的KAFKA_ADVERTISED_LISTENERS,将localhost替换为Docker宿主机的实际IP地址:

KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://broker:29092,PLAINTEXT_HOST://宿主机实际IP:9092'

重启Broker后,客户端会获取到正确的外部可访问地址,解决通信链路问题。

(2)优化生产者参数

在ora2kafka_producer.properties中添加以下参数,优化超时策略和消息发送逻辑:

# 延长请求超时时间
request.timeout.ms=300000
# 延长元数据更新超时时间
metadata.max.age.ms=300000
# 调整批量大小和延迟,避免消息堆积过大
batch.size=16384
linger.ms=5
(3)调整Java堆内存

当前jvm.bootoptions设置的-Xmx512m可能不足以处理大事务或批量消息,建议调整为:

jvm.bootoptions=-Xmx1024m -Xms256m

避免内存不足导致的消息处理延迟。

3. 版本兼容性影响

Confluent 7.4.0对应Kafka 3.4.0,而GoldenGate自带的6.2.0 Kafka客户端对应Kafka 2.8.x,跨大版本的客户端与Broker确实可能存在兼容性问题:

  • 优先查阅Oracle官方的GoldenGate for Big Data兼容性矩阵,确认支持的Kafka/Confluent版本;
  • 若版本不兼容,可替换GoldenGate的Kafka客户端jar包为与Confluent 7.4.0匹配的版本(需同步替换kafka-clients、confluent-common等相关依赖jar)。

内容的提问来源于stack exchange,提问作者Mendbayar Alzakhgui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 02:54:51