SQL 服务器数据实时到Kafka

SQL Server Data to Kafka in real time

我想将来自 SQL 服务器的实时数据直接添加到 Kafka,我发现 https://debezium.io/docs/connectors/sqlserver/

提供了一个 SQL 服务器连接器

在文档中,它说它将为每个 table 创建一个主题。我试图了解架构,因为我有 500 个客户端,这意味着我有 500 个数据库,每个数据库都有 500 tables。这是否意味着它将创建 250000 个主题,或者我是否需要为每个客户端单独的 Kafka 集群,并且每个 cluster/node 将根据数据库中 table 的数量有 500 个主题?

这是向 Kafka 发送 SQL 数据的最佳方式吗?还是只要 table 上有 insert/update/delete,我们就应该通过代码向 Kafka 队列发送事件?

使用 debezium 时,您只能使用一个 table 到一个主题的映射。但是,有一些创造性的方法可以解决这个问题。

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

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

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

关于你的另一个问题,

Is it the best way to send SQL data to Kafka or should we send an event to Kafka queue through code whenever there is an insert/update/delete on a table?

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

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

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