Java 8 用于同步数据库表的Apache Kafka Connect/Streams API

Java 8 用于同步数据库表的Apache Kafka Connect/Streams API,java-8,apache-kafka-streams,apache-kafka-connect,Java 8,Apache Kafka Streams,Apache Kafka Connect,我正在阅读关于Connect API的卡夫卡文档,并试图将其与我的问题域联系起来。我有多个数据库,这些数据库有公共表,我需要在任何更新/插入/删除时同步这些表。exmaple是这样的: 1) 有人更新了DB1中的表“order_history”——我希望将更新传递给DB2/DB3等 2) 有人在“采购订单”中插入了一条记录——我希望将插入信息传递给DB2/DB3等,以便在这些DB2/DB3等中进行相同的插入 3) 这些表将在所有的数据库中,因此没有丢失表的问题 这些操作只能在一组特定的表上执行,

我正在阅读关于Connect API的卡夫卡文档,并试图将其与我的问题域联系起来。我有多个数据库,这些数据库有公共表,我需要在任何更新/插入/删除时同步这些表。exmaple是这样的:

1) 有人更新了DB1中的表“order_history”——我希望将更新传递给DB2/DB3等

2) 有人在“采购订单”中插入了一条记录——我希望将插入信息传递给DB2/DB3等,以便在这些DB2/DB3等中进行相同的插入

3) 这些表将在所有的数据库中,因此没有丢失表的问题

这些操作只能在一组特定的表上执行,而不能在整个数据库上执行。我从Connect API文档中了解到,我需要提供以下内容:

1) 源连接器将数据从SQL/文件系统导入Kafka主题

2) 接收器连接器将数据从kafka主题导出到SQL/File system/Hadoop FS

但是,我试图理解这与在任何插入/更新/删除上同步多个数据库表有什么关系,因为Connect API仍然涉及主题的写入/读取,这可能不一定是我的用例。我也看过Kafka Streams,但它在进行数据聚合和计数器管理时似乎是一个有效的工具,同样也不可能是我的用例

有谁能解释一下我的假设是否正确,我还是应该探索Streams/Connect API吗


关于,

是的,您可以使用Kafka Connect将更改从一个数据库应用到另一个数据库。您通常会使用CDC工具直接从源数据库的重做/事务日志中获取事件,这会将每个事件推送到Kafka主题。例如Oracle GoldenGate或Debezium项目

一旦讨论了Kafka主题,就可以使用Kafka Connect的JDBC接收器将这些更改推送到目标数据库

这可能不符合您的要求的地方是,如果您还想直接在目标中镜像删除,因为通常CDC记录将有一列指示操作(例如,“D”表示删除),并且您将在目标上插入一行,并使用此值

但是,如果您希望将一组表从一个DB镜像到另一个DB,那么应该使用数据库复制工具,而不是Kafka

卡夫卡的适用范围是,如果您希望将事件从一个地方流到另一个地方(并且希望存储删除事件,而不是从目标中删除它们),您可以选择使用相同的数据到达其他目标,或者驱动其他直接应用程序。这可能是卡夫卡流,卡夫卡消费者-或任何其他众多的技术和工具,与卡夫卡集成


对于Kafka流,如果您想对从源数据库中提取的数据进行一些处理,例如,联接/过滤/聚合,那么这将非常有用。除了直接使用Kafka Streams编写Java代码外,您现在还可以选择在Kafka之上使用类似SQL的接口。

是的,您可以使用Kafka Connect将更改从一个数据库应用到另一个数据库。您通常会使用CDC工具直接从源数据库的重做/事务日志中获取事件,这会将每个事件推送到Kafka主题。例如Oracle GoldenGate或Debezium项目

一旦讨论了Kafka主题,就可以使用Kafka Connect的JDBC接收器将这些更改推送到目标数据库

这可能不符合您的要求的地方是,如果您还想直接在目标中镜像删除,因为通常CDC记录将有一列指示操作(例如,“D”表示删除),并且您将在目标上插入一行,并使用此值

但是,如果您希望将一组表从一个DB镜像到另一个DB,那么应该使用数据库复制工具,而不是Kafka

卡夫卡的适用范围是,如果您希望将事件从一个地方流到另一个地方(并且希望存储删除事件,而不是从目标中删除它们),您可以选择使用相同的数据到达其他目标,或者驱动其他直接应用程序。这可能是卡夫卡流,卡夫卡消费者-或任何其他众多的技术和工具,与卡夫卡集成


对于Kafka流,如果您想对从源数据库中提取的数据进行一些处理,例如,联接/过滤/聚合,那么这将非常有用。除了直接使用Kafka Streams编写Java代码外,您现在还可以选择在Kafka之上使用类似SQL的接口。

您实际上想要解决什么问题?“我需要在任何更新/插入/删除时进行同步”可以用于很多事情:)如果您想要直接表复制,则有特定于数据库的产品(例如Oracle GoldenGate)。如果这是您想要共享和传播的应用程序数据,那么Kafka可能会有所帮助。您需要更好地描述您想做什么以及为什么要做某事,然后我们可以帮助您解决以下问题:)@RobinMoffatt从问题中可以非常清楚地看出-插入/更新/删除到数据库(某些表)是不言自明的。db表可以将应用程序数据与其他元数据混合。我已经更新了问题,如果这对您有意义您的问题在我发表评论后发生了变化:)让我问一个问题:为什么您要使用Kafka而不是标准的DB/表复制工具?这些是相同的DBs,还是不同的技术?@RobinMoffatt,因为我们已经为一些消息传递活动实施了Kafka,除非Kafka能够以最小的努力做到这一点,否则使用新的工具是没有意义的——这不是“为什么”的问题,而是“可以/不能”的问题。你实际上想解决什么问题?“我需要同步任何更新/插入/删除”可以用于很多事情:)如果你想