Kafka connect可以在批量模式下使用自定义查询吗?

时间:2019-10-18 19:00:23

标签: apache-kafka apache-kafka-connect

我正尝试每7天发送一次记录。这是我正在处理的配置,但它 即使查询在数据库服务器上生成记录也无法正常工作。

{
    "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
    "tasks.max": 1,
    "mode": "bulk",
    "connection.url": "jdbc:mysql://mysql:3300/test_db?user=root&password=password",
    "query": "SELECT * FROM test_table WHERE DATEDIFF(CURDATE(), test_table.modified) = 7;",
    "topic.prefix": "test-jdbc-",
    "poll.interval.ms": 10000
}

1 个答案:

答案 0 :(得分:1)

JDBC源连接器通过使用JDBC驱动程序将数据从关系数据库导入Apache Kafka主题。 数据正在定期加载,要么基于时间戳递增,要么批量加载。最初,尽管在创建JDBC连接器时处于模式增量或批量状态,但在时间戳列上仅加载新行或修改行之后,它将所有数据加载到主题中。

批量:此模式未过滤,因此根本不会增量。它将在每次迭代时从表中加载所有行。如果要定期转储整个表,最终删除条目,下游系统可以安全地处理重复表,这将很有用。 因此,您无法使用批量模式连续加载过去7天

时间戳列:在此模式下,包含修改时间戳的单个列用于跟踪上次处理数据的时间,并仅查询自该时间以来已被修改的行。您可以在此处加载增量数据。但是,第一次创建时它将如何工作,它将加载数据库表中所有可用的数据,因为对于JDBC连接器,这些都是新数据。稍后它将仅加载新的或修改的数据。

现在按照您的要求,您似乎正在尝试按某个时间间隔加载所有数据,这些时间间隔将配置为“ poll.interval.ms”:10000。我看到您的JDBC连接设置符合定义,但查询可能无法正常运行使用查询如下。似乎JDBC连接器将查询包装为表格,如果添加大小写则无法使用。

"query": "select * from (select * from test_table where  modified > now() - interval '7' day) o",

尝试以下设置

{
  "name": "application_name",
  "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
  "key.converter": "org.apache.kafka.connect.json.JsonConverter",
  "value.converter": "org.apache.kafka.connect.json.JsonConverter",
  "connection.url": "jdbc:mysql://mysql:3300/test_db",
  "connection.user": "root",
  "connection.password": "password",
  "connection.attempts": "1",
  "mode": "bulk",
  "validate.non.null": false,
  "query": "select * from (select * from test_table where  modified > now() - interval '7' day) o",
  "table.types": "TABLE",
  "topic.prefix": "test-jdbc-",
 "poll.interval.ms": 10000
  "schema.ignore": true,
  "key.converter.schemas.enable": "false",
  "value.converter.schemas.enable": "false"

}