SQL Server数据实时传输到Kafka



我想直接将SQL server中的实时数据添加到Kafka中,我发现有一个SQL server连接器由https://debezium.io/docs/connectors/sqlserver/

在文档中,它表示将为每个表创建一个主题。我试图理解体系结构,因为我有500个客户端,这意味着我有500多个数据库,每个数据库都有500个表。这是否意味着它将创建250000个主题,还是我需要为每个客户端单独的Kafka集群,并且根据数据库中的表数,每个集群/节点将有500个主题?

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

使用debezium,您只能使用一个表到一个主题的映射。然而,有一些创造性的方法可以绕过它

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

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

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

至于你的另一个问题,

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

答案是">这取决于";。如果它是一个简单的事务应用程序,我只需将数据写入数据库,而不必担心其他任何事情。

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

有一个许可的替代品,Qlik Replicate,它能够做一些非常类似的事情。

相关内容

  • 没有找到相关文章

最新更新