文章

OGG-15051 错误

OGG-15051 错误

前言

启动 Replicat 进程的时候出现 OGG-15051 错误的解决方法,在网上搜索到的解决方法并不适用于我的环境,所以记录一下

OGG-15051 错误

在目标端 ogg Kafka 环境 Replicat 进程启动时,遇到以下错误: ```shell 2025-02-26 22:07:45 INFO OGG-03059 Operating system character set identified as UTF-8.

2025-02-26 22:07:45 INFO OGG-02695 ANSI SQL parameter syntax is used for parameter parsing.

2025-02-26 22:07:45 INFO OGG-03528 The source database character set, as determined from the table definition file, is UTF-8. REPLICAT r_ftest sourcedefs ./dirdef/mapping_uat_ka.def TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka_wms_ftest.props

2025-02-26 22:07:45 INFO OGG-15052 Using Java class path: ./ggjava/ggjava.jar:dirprm:.dirprm/:/opt/datasophon/kafka-2.4.1/:/home/ogg/ogg21/:/home/ogg/ogg21/lib/. Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/Producer at oracle.goldengate.handler.kafka.impl.KafkaProperties.getProducerInstance(KafkaProperties.java:152) at oracle.goldengate.handler.kafka.KafkaHandler.init(KafkaHandler.java:162) at oracle.goldengate.datasource.AbstractDataSource.addDataSourceListener(AbstractDataSource.java:592) at oracle.goldengate.datasource.factory.DataSourceFactory.getDataSource(DataSourceFactory.java:161) at oracle.goldengate.datasource.UserExitDataSourceLauncher.(UserExitDataSourceLauncher.java:45) at oracle.goldengate.datasource.UserExitMain.main(UserExitMain.java:109) Caused by: java.lang.ClassNotFoundException: org.apache.kafka.clients.producer.Producer at java.net.URLClassLoader.findClass(URLClassLoader.java:387) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ... 6 more

2025-02-26 22:07:46 WARNING OGG-00869 java.lang.ClassNotFoundException: org.apache.kafka.clients.producer.Producer.

Source Context : SourceModule : [gglib.ggdal.adapter.java] SourceID : [ggdal/Adapter/Java/JavaAdapter.cpp] SourceMethod : [HandleJavaException] SourceLine : [274] ThreadBacktrace : [16] elements : [/home/ogg/ogg21/libgglog.so(CMessageContext::AddThreadContext())] : [/home/ogg/ogg21/libgglog.so(CMessageFactory::CreateMessage(CSourceContext, unsigned int, …))] : [/home/ogg/ogg21/libgglog.so(_MSG_String(CSourceContext, int, char const, CMessageFactory::MessageDisposition))] : [/home/ogg/ogg21/libggjava.so()] : [/home/ogg/ogg21/libggjava.so(ggs::gglib::ggdal::CJavaAdapter::Open())] : [/home/ogg/ogg21/replicat(ggs::gglib::ggdal::CDALAdapter::Open(ggs::gglib::ggunicode::UString const&))] : [/home/ogg/ogg21/replicat(GenericImpl::Open(ggs::gglib::ggunicode::UString const&))] : [/home/ogg/ogg21/replicat(odbc_param(char, char, ggs::gglib::ggapp::ReplicationContextParams const&))] : [/home/ogg/ogg21/replicat(get_infile_params(ggs::gglib::ggapp::ReplicationContextParams&, ggs::gglib::ggdatasource::DataSourceParams&, ggs::gglib::ggdatatarget::DataTargetP arams&, ggs::gglib::ggmetadata::MetadataContext&))] : [/home/ogg/ogg21/replicat()] : [/home/ogg/ogg21/replicat(ggs::gglib::MultiThreading::MainThread::ExecMain())] : [/home/ogg/ogg21/replicat(ggs::gglib::MultiThreading::Thread::RunThread(ggs::gglib::MultiThreading::Thread::ThreadArgs))] : [/home/ogg/ogg21/replicat(ggs::gglib::MultiThreading::MainThread::Run(int, char**))] : [/home/ogg/ogg21/replicat(main)] : [/lib64/libc.so.6(__libc_start_main)] : [/home/ogg/ogg21/replicat()]

2025-02-26 22:07:46 ERROR OGG-15051 Java or JNI exception: java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/Producer.

2025-02-26 22:07:46 ERROR OGG-01668 PROCESS ABENDING. ~~~

解决方法


1. 确认 Kafka 客户端 JAR 文件存在

  • 操作步骤
    1. 登录到 OGG 服务器,检查 Kafka 客户端 JAR 文件路径:
      1
      
      ls /opt/datasophon/kafka-2.4.1/libs/kafka-clients-*.jar
      
    2. 如果文件不存在,需下载匹配的 Kafka 客户端 JAR(版本需与 Kafka 服务端一致):
      • 从 Maven 仓库下载(例如 kafka-clients 2.4.1
      • 将文件复制到目标路径:
        1
        
        cp kafka-clients-2.4.1.jar /opt/datasophon/kafka-2.4.1/libs/
        

2. 调整 OGG 的 Java 类路径配置

  • 操作步骤
    1. 编辑 OGG 的 Kafka Handler 配置文件 dirprm/kafka_wms_ftest.props,确保包含以下内容:
      1
      
      gg.classpath=/opt/datasophon/kafka-2.4.1/libs/*:/path/to/other/dependencies/*
      

      示例:

      1
      
      gg.classpath=/opt/datasophon/kafka-2.4.1/libs/*:/home/ogg/ogg21/lib/*
      
    2. 保存文件并重启 Replicat 进程。

    我的原因是因为在配置文件中指定的类路径错误,导致无法加载Producer


3. 验证 Kafka 客户端版本兼容性

  • 操作步骤
    1. 检查 OGG 21c 官方文档支持的 Kafka 版本
      • 如果版本不兼容,升级 Kafka 客户端 JAR 文件:
        1
        2
        3
        
        #
        wget https://repo1.maven.org/maven2/org/apache/kafka/kafka-clients/3.0.0/kafka-clients-3.0.0.jar
        cp kafka-clients-3.0.0.jar /opt/datasophon/kafka-2.4.1/libs/
        

4. 检查文件权限

  • 操作步骤
    1. 确认 OGG 安装的用户(如ogguser)对 Kafka JAR 文件有读取权限:
      1
      
      chmod -R 755 /opt/datasophon/kafka-2.4.1/libs/
      
    2. 验证权限:
      1
      
      ls -l /opt/datasophon/kafka-2.4.1/libs/kafka-clients-*.jar
      

5. 更新 GLOBALS 文件(可选)

  • 操作步骤
    1. 在 OGG 安装目录下的GLOBALS文件中,显式指定 Java 类路径:
      1
      
      JVMCLASSPATH /opt/datasophon/kafka-2.4.1/libs/*
      

6. 验证环境变量

  • 操作步骤
    1. 设置环境变量(临时生效):
      1
      
      export CLASSPATH=/opt/datasophon/kafka-2.4.1/libs/*:$CLASSPATH
      
    2. 启动 Replicat 进程测试。

7. 重启 Replicat 进程

  • 操作步骤
    1. 在 GGSCI 命令行中停止并重启 Replicat:
      1
      2
      
      GGSCI> stop replicat r_ftest
      GGSCI> start replicat r_ftest
      

8. 查看详细日志

  • 操作步骤
    1. 检查 Replicat 日志文件(位于dirrpt/r_ftest.rpt):
      1
      
      cat dirrpt/r_ftest.rpt
      
    2. 根据日志中的具体错误调整配置。

总结

  • 根本原因: OGG 的 Java 类路径未正确包含 Kafka 客户端 JAR 文件(如kafka-clients-xxx.jar),导致运行时无法加载Producer类。
  • 关键解决步骤
    1. 确认 Kafka 客户端 JAR 文件存在且版本兼容。
    2. 在 OGG 配置文件或GLOBALS中显式指定类路径。
    3. 检查权限和环境变量设置。
本文由作者按照 CC BY 4.0 进行授权