【发布时间】:2018-02-19 10:51:16
【问题描述】:
我正在阅读有关 Connect API 的 Kafka 文档,并试图将其与我的问题域联系起来。我有多个数据库,其中包含需要在任何更新/插入/删除时同步的公用表。一个例子是这样的:
1) 有人更新 DB1 中的表“order_history” - 我希望将更新传达给 DB2/DB3 等。
2) 有人在“purchase_order”中插入了一条记录——我希望将插入传递给 DB2/DB3 等,以便在那些 DB2/DB3 等中进行相同的插入。
3) 表将在所有数据库中 - 因此不会出现缺少表的问题。
这些只能在一组特定的表上完成,而不是整个数据库。我从 Connect API 文档中了解到,我需要提供以下内容:
1) 源连接器导入数据 - 从 SQL/文件系统到 Kafka 主题
2) Sink Connector 导出数据 - 从 kafka 主题到 SQL/文件系统/Hadoop FS
但后来我试图了解这与在任何插入/更新/删除上同步多个数据库表有什么关系——因为 Connect API 仍然涉及主题的写/读——这可能不一定是我的用例。我也看过 Kafka Streams,但在进行数据聚合和计数器管理时,它似乎是一个有效的工具,这也可能不是我的用例。
谁能解释我的假设是否正确,我仍然应该探索 Streams/Connect API?
问候,
【问题讨论】:
-
您真正想要解决什么问题? “我需要同步任何更新/插入/删除”可能有很多用途:) 如果您想要直接表复制,那么有特定于数据库的产品(例如 Oracle GoldenGate)。如果这是您想要共享和传播的应用程序数据,那么 Kafka 可能会有所帮助。你需要更好地描述what和为什么你想做某事,然后我们可以帮助how :)
-
@RobinMoffatt 从问题中很清楚 - 插入/更新/删除到数据库(某些表)是不言自明的。 db 表可以将应用程序数据与其他一些元数据混合在一起。如果这对您有意义,我已经更新了问题
-
自从我发表评论后,您的问题发生了变化 :) 让我问一个问题:您为什么要使用 Kafka 而不是标准的数据库/表复制工具?这些是相同的数据库,还是不同的技术?
-
@RobinMoffatt 因为我们已经为一些消息传递活动实现了 Kafka,除非 Kafka 能够以最小的努力做到这一点,否则使用新工具是没有意义的——这不是“为什么”的问题,而是“可以/不能”。
标签: java-8 apache-kafka-streams apache-kafka-connect