我有一个传统数据库,该数据库的主键列为字符串(是的,我知道)。我想使用JDBC kafka源连接器
将Postgres数据库中的increment
转储到kafka主题中
下面是我重现问题的尝试
create table test(
id varchar(20) primary key,
name varchar(10)
);
INSERT INTO test(
id, name)
VALUES ('1ab', 't'),
('2ab', 't'),
('3ab', 't')
我的配置
{"name" : "test_connector",
"config" : {
"connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
"connection.url": "jdbc:postgresql://12.34.5.6:5432/",
"connection.user": "user",
"connection.password": "password",
"key.converter": "org.apache.kafka.connect.storage.StringConverter",
"topic.prefix": "incre_",
"mode": "incrementing",
"value.converter": "io.confluent.connect.avro.AvroConverter",
"query" :"SELECT cast(replace(id, 'ab','') as integer) as id , name from test ORDER BY id ASC",
"incrementing.column.name":"id",
"value.converter.schema.registry.url": "http://schema-registry_url.com",
"key.converter.schema.registry.url": "http://schema-registry_url.com",
"offset.flush.timeout.ms": 2000,
}
}
发布配置后,进行HTTP curl时状态为RUNNING
。我检查工人日志时也没有错误日志
当我尝试做控制台用户时,kafka主题中也没有数据
我还尝试了其他几种组合,例如添加"table.whitelist": "test"
。
我尝试的另一件事是关注这两个链接
https://rmoff.net/2018/05/21/kafka-connect-and-oracle-data-types/
https://www.confluent.io/blog/kafka-connect-deep-dive-jdbc-source-connector,但无济于事,甚至是像SELECT * from (SELECT id, name from test where ...)
答案 0 :(得分:0)
恐怕您不能在varchar id
模式下使用incrementing
,因为它不是递增的列/类型。根据{{3}},
递增列:包含每一行唯一ID的单个列,保证较新的行具有更大的ID,即
AUTOINCREMENT
列。请注意,此模式只能检测新行。 无法检测到对现有行的更新,因此此模式应仅 用于不可变数据。一个可能使用此模式的示例 是在数据仓库中流化事实表时,因为这些是 通常只能插入。
答案 1 :(得分:0)
所以几个小时后使用不同的配置。我回到官方document并意识到了
使用自定义查询而不是加载表,从而使您可以联接来自多个表的数据。只要查询不包括其自身的筛选,您仍可以将内置模式用于增量查询(在这种情况下,使用时间戳列)。请注意,这将您限制为每个连接器只有一个输出,并且由于没有表名,因此在这种情况下,主题“前缀”实际上是完整的主题名称。
所以关键是"topic.prefix": "incre_test"
按照之前的设置进行操作,正确的配置应为
{"name" : "test_connector",
"config" : {
"connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
"connection.url": "jdbc:postgresql://12.34.5.6:5432/",
"connection.user": "user",
"connection.password": "password",
"key.converter": "org.apache.kafka.connect.storage.StringConverter",
"topic.prefix": "incre_test",
"mode": "incrementing",
"value.converter": "io.confluent.connect.avro.AvroConverter",
"query" :"SELECT cast(replace(id, 'ab','') as integer) as id , name from test ORDER BY id ASC",
"incrementing.column.name":"id",
"value.converter.schema.registry.url": "http://schema-registry_url.com",
"key.converter.schema.registry.url": "http://schema-registry_url.com",
"offset.flush.timeout.ms": 2000,
}
}