SQL Server 数据实时传输到 Kafka

问题描述 投票:0回答:2

我想将实时数据从SQL Server直接添加到Kafka,我发现https://debezium.io/docs/connectors/sqlserver/

提供了一个SQL Server连接器

在文档中,它说它将为每个表创建一个主题。我试图了解该架构,因为我有 500 个客户端,这意味着我有 500 个数据库,每个数据库都有 500 个表。这是否意味着它将创建 250000 个主题,还是我需要为每个客户端提供单独的 Kafka 集群,并且每个集群/节点将根据数据库中的表数量拥有 500 个主题?

这是将 SQL 数据发送到 Kafka 的最佳方式还是我们应该在表上有插入/更新/删除时通过代码向 Kafka 队列发送事件?

apache-kafka apache-kafka-connect debezium
2个回答
2
投票

使用 Debezium,您将陷入一张表到一个主题的映射。然而,有一些创造性的方法可以解决这个问题。

根据描述,您似乎有某种具有 SQL Server 后端的产品,并且有 500 个表。该产品已被 500 个或更多客户使用,每个人都有自己的数据库实例。

您可以为一个客户端创建一个连接器并读取所有 500 个表并将其发布到 Kafka。此时您将拥有 500 个 Kafka 主题。您可以通过为每个客户端/数据库实例创建单独的连接器,将数据从所有其他数据库实例路由到相同的 500 个主题。我假设由于这是产品的后端数据库,因此表名称、模式名称等都是相同的,并且 debezium 连接器将为表生成相同的主题名称。如果不是这种情况,您可以使用主题路由 SMT

您可以通过在主题中添加一些元数据列来区分 Kafka 中的数据。通过添加 SMT,可以在连接器中轻松完成此操作。元数据列可以是 client_id、client_name 或其他内容。

至于你的另一个问题,

这是将 SQL 数据发送到 Kafka 的最佳方式还是我们应该在表上有插入/更新/删除时通过代码向 Kafka 队列发送事件?

答案是“视情况而定!”。 如果是一个简单的事务性应用程序,我只需将数据写入数据库即可,而不用担心其他任何事情。

答案还取决于您为什么要向 Kafka 传递数据。如果您希望将数据/业务事件传递到 Kafka 来执行一些需要事务完整性和严格 SLA 的下游业务处理,那么从应用程序写入数据可能是有意义的。但是,如果您要将数据发布到 Kafka 以供其他人用于分析或任何其他原因,那么使用 K-Connect 方法是有意义的。

有一个获得许可的替代方案,Qlik Replicate,它具有非常相似的功能。


0
投票

好吧,如果您有很多客户端,那么专门的解决方案会更好,例如作为服务运行的专门程序,从 SQL Server 获取更改跟踪并将其发送到 KAFKA 或直接发送到您的客户端,而不使用 KAFKA。一个 delphi 或 python 应用程序来做这件事会更好,缺点是你需要一些优秀的开发人员来编程。

关于 Debezium,您需要知道它仅支持 CDC,而不支持来自 SQL Server 的 CT,您真的需要 CDC(捕获数据更改)吗?没有办法通过CT(改变航迹)吗?如果您的 SQL Server 中的 CDC 处于活动状态,请考虑写入磁盘上的所有增量,因此取决于您的应用程序,但对此进行分析,也许大量数据将存储在 CDC 表上。所以如果你真的不需要 CDC,其他解决方案 <> Debezium 可能会更好,但如果你需要 CDC,Debezium 就可以了。

关于KAFKA,我认为它是目前更好的免费现成解决方案。

关于实时,实际上,使用此解决方案可以接近实时。

© www.soinside.com 2019 - 2024. All rights reserved.