我目前正在研究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?
答案 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工作。