基于查询的JDBC源连接器Kafka

基于查询的JDBC源连接器Kafka,jdbc,apache-kafka,apache-kafka-connect,Jdbc,Apache Kafka,Apache Kafka Connect,我有一个遗留数据库,它有一个主键列作为字符串。是的,我知道。我想使用JDBC kafka源连接器从postgres DB增量转储到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"

我有一个遗留数据库,它有一个主键列作为字符串。是的,我知道。我想使用JDBC kafka源连接器从postgres DB增量转储到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。当我检查工作日志时,它也没有错误日志 当我尝试做一个控制台使用者时,卡夫卡主题中也没有数据 我还尝试了其他几种组合,比如在表中添加。白名单:test

我尝试的另一件事是跟踪这两个链接
但是没有任何帮助,即使是建议使用的智能技巧,如SELECT*from SELECT id,name from test where…

恐怕您不能在递增模式下使用varchar id,因为它不是递增列/类型。根据,

递增列:每行包含唯一ID的单列,其中较新的行保证有较大的ID,即 自动递增列。请注意,此模式只能检测新行。 无法检测到对现有行的更新,因此此模式仅适用于 用于不可变的数据。您可以使用此模式的一个示例 是在数据仓库中对事实表进行流式处理时,因为这些事实表是 通常仅插入


所以在玩了几个小时不同的配置之后。我回到官员面前,意识到了这一点

使用自定义查询而不是加载表,从而允许您连接多个表中的数据。只要查询不包含自己的筛选,在这种情况下,您仍然可以使用内置模式进行增量查询,使用时间戳列。请注意,这将每个连接器限制为一个输出,因为没有表名,所以在本例中,主题“前缀”实际上是完整的主题名

所以关键是这个主题。前缀: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,

    }
}

我在文档中没有遇到过这一点,但在使用查询时要记住这一点