Kafka在MSSQL中将许多表连接到许多表

时间:2018-09-09 09:39:27

标签: sql-server apache-kafka apache-kafka-connect mssql-jdbc

我目前正在研究Kafka Connect,以将我们的一些数据库流式传输到数据湖。为了测试Kafka Connect,我已经建立了一个包含我们项目数据库之一的数据库。到目前为止,一切都很好。

下一步,我使用以下属性配置了Kafka Connect:

{
  "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
  "timestamp.column.name": "updated_at,created_at",
  "incrementing.column.name": "id",
  "dialect.name": "SqlServerDatabaseDialect",
  "validate.non.null": "false",
  "tasks.max": "1",
  "mode": "timestamp+incrementing",
  "topic.prefix": "mssql-jdbc-",
  "poll.interval.ms": "10000",
}

虽然这适用于我拥有ID和created_at / updated_at字段的大多数表,但不适用于我的表(其中之间有一个表并有一个复合表来解决我的多对多关系)键。请注意,我将通用JDBC配置与Microsoft的JDBC驱动程序一起使用。

是否可以针对这些特殊情况配置Kafka Connect?

1 个答案:

答案 0 :(得分:0)

您可能需要创建多个表,而不是用一个连接器来拉所有表。如果您想使用不同的方法来获取数据,或者使用不同的ID /时间戳列,就会是这种情况。 就像@ cricket_007所说的那样,您可以使用query选项拉回查询结果-可以是SELECT来表达您的多表联接。即使从单个表对象中提取数据,JDBC连接器本身也只是从给定表中发出SELECT *,并带有WHERE谓词来限制基于递增ID /时间戳的所选行。

替代方法是使用基于日志的更改数据捕获(CDC),并将所有更改直接从数据库流式传输到Kafka。

无论使用JDBC还是基于日志的CDC,都可以使用流处理来解析Kafka本身中的联接。例如Kafka Streams或KSQL。我已经将后者写成lot here

您可能还会发现this article有用,详细描述了将数据库与Kafka集成的选项。

免责声明:我为开源KSQL项目背后的公司Confluent工作。