【问题标题】:Oracle replication data using Apache kafkaOracle 使用 Apache kafka 复制数据
【发布时间】:2025-11-28 23:55:02
【问题描述】:

我想从我的 oracle 数据库中公开数据表并公开到 apache kafka。技术上可行吗? 我还需要从我的 oracle 表中流式传输数据更改并将其通知给 Kafka。 你知道这个用例的好文档吗? 谢谢

【问题讨论】:

  • 如果你只是想读取(选择查询)并推送到Kafka,简单的JDBC代码就足够了。但是,如果您希望实时流式传输 CDC(更改数据捕获),那么您需要某种可以使用 Logminer 或 xstream 读取 CDC 的产品。 Striim(顺便说一下,我为 Striim 工作)有这样的产品。还有其他产品,但我知道没有免费或开源的。 Oracle 的 Golden Gate 可以读取 GG trail 到 kafka,但不确定它是否也可以写入 CDC。希望这会有所帮助。
  • 看起来下面的 Slim 已经或多或少地回复了。
  • 这个问题已经回答了:*.com/questions/29929205/…
  • 这能回答你的问题吗? How to integrate Oracle and Kafka

标签: oracle apache-kafka


【解决方案1】:
  1. 您需要 Kafka Connect JDBC 源连接器才能从 Oracle 数据库加载数据。 Confluent 有一个开源的捆绑连接器。它已与 Confluent 平台的其余部分一起打包和测试,包括模式注册表。使用此连接器就像编写简单的连接器配置并启动独立的 Kafka Connect 进程或向 Kafka Connect 集群发出 REST 请求一样简单。可以在here 找到此连接器的文档

  2. 要将更改数据从 Oracle 事务数据库实时移动到 Kafka,您需要首先使用更改数据捕获 (CDC) 专有工具,该工具需要购买商业许可证,例如 Oracle 的 Golden Gate、Attunity Replicate、Dbvisit复制或 Striim。然后,您可以利用它们都提供的 Kafka Connect 连接器。他们都列出了here

  3. Debezium 是 Redhat 的一个开源 CDC 工具,它计划开发一个不依赖于 Oracle Golden Gate 许可证的连接器。相关的 JIRA 是here

【讨论】:

  • 嗨 Slim,这是一个全面的答案。我只想在这里添加的是 Striim 可以实时读取 CDC 并实时写入具有容错能力的 kafka。 (正如我上面提到的,我在 Striim 工作,所以我知道...-:))。
  • 截至 2018 年,dbvisit 已死,参见例如rmoff.net/2018/12/12/… 通常看起来像是一个消息灵通的帖子。我认为 dbvisit 成功地进行 Oracle 复制很有趣,因此他们确实知道如何读取重做日志,但看起来它需要的还不止这些。小心依赖时间戳的自构建触发器解决方案,因为它们容易受到竞争条件和破坏订单的错误的影响。
【解决方案2】:

您可以使用Kafka Connect 将数据导入/导出到 Kafka。使用 Kafka Connect 非常简单,因为不需要编写代码。您只需要配置您的连接器。

如果没有可用的连接器并且您想提供自己的连接器,您只需要编写代码。已经有 50 多个连接器可用。

Confluent Inc 有一个用于 Oracle 的连接器(“Golden Gate”):https://www.confluent.io/product/connectors/

【讨论】:

    【解决方案3】:

    从表面上看,这在技术上是可行的。但是,请了解该问题对下游应用程序有影响。 因此,要全面解决有关技术可行性的原始问题,请记住以下几点:

    1. 排序/提交语义重要吗?尤其是跨表格。
    2. 跨实例崩溃(Kafka/CDC 组件)的持续表更改是否重要?
    3. 当表定义发生更改时 - 您希望应用程序继续工作,还是会诉诸计划的更改控制?
    4. 是否要移动部分数据子集?
    5. 需要支持哪些数据类型?例如嵌套表支持等。
    6. 您是否需要处理压缩的逻辑更改?关于更新/删除操作?您将如何在消费者方面解决这个问题?

    【讨论】:

      【解决方案4】:

      您也可以考虑使用 OpenLogReplicator。这是一个新的开源工具,可以读取 Oracle 数据库重做日志并向 Kafka 发送消息。由于它是用 C++ 编写的,因此延迟非常低,大约 10 毫秒,但吞吐率相对较高。

      它处于早期开发阶段,但已经有一个工作版本。您可以尝试制作 POC 并检查自己的工作原理。

      【讨论】: