我正尝试每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
}
答案 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"
}