Apache kafka 不使用Kafka Connect复制架构更改

Apache kafka 不使用Kafka Connect复制架构更改,apache-kafka,kafka-consumer-api,apache-kafka-connect,confluent-platform,Apache Kafka,Kafka Consumer Api,Apache Kafka Connect,Confluent Platform,目标是:MySQL->Kafka->MySQL。接收器目标应与生产同步 插入和删除记录是可以的,但我在模式更改方面遇到了问题,例如删除了列。更改未复制到接收器目标 我的消息来源: { "name": "hub-connector", "config": { "connector.class": "io.debezium.connector.mysql.MySqlConnect

目标是:MySQL->Kafka->MySQL。接收器目标应与生产同步

插入和删除记录是可以的,但我在模式更改方面遇到了问题,例如删除了列。更改未复制到接收器目标

我的消息来源:

{
    "name": "hub-connector",
    "config": {
        "connector.class": "io.debezium.connector.mysql.MySqlConnector",
        "database.hostname": "mysql",
        "database.port": "3306",
        "database.user": "debezium",
        "database.password": "dbz",
        "database.server.id": "42",
        "database.server.name": "study",
        "database.include.list": "companyHub",
        "database.history.kafka.bootstrap.servers": "broker:29092",
        "database.history.kafka.topic": "dbhistory.study",
        "include.schema.changes": "true"
    }
}

我的水槽

{
    "name": "companyHub-sink",
    "config": {
        "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
        "tasks.max": "1",
        "connection.url": "jdbc:mysql://172.18.141.102:3306/Hub",
        "connection.user": "user",
        "connection.password": "passaword",
        "topics": "study.companyHub.countryTaxes, study.companyHub.addresses",
        "auto.create": "true",
        "auto.evolve": "true",
        "delete.enabled": "true",
        "insert.mode": "upsert",
        "pk.fields": "id",
        "pk.mode": "record_key",
        "transforms": "dropPrefix, unwrap",
        "transforms.dropPrefix.type":"org.apache.kafka.connect.transforms.RegexRouter",
        "transforms.dropPrefix.regex":"study.companyHub.(.*)$",
        "transforms.dropPrefix.replacement":"$1",
        "transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
        "transforms.unwrap.drop.tombstones": "false",
        "transforms.unwrap.delete.handling.mode": "rewrite"
    }
}

任何帮助都将不胜感激

自动创建和自动演化 小费

确保JDBC用户具有DDL的适当权限

如果启用了auto.create,则如果发现缺少目标表,连接器可以创建该表。由于连接器使用记录模式作为表定义的基础,因此创建是在线进行的,并使用主题中的记录。根据密钥配置设置指定主键


如果启用了auto.evolve,连接器可以在遇到缺少列的记录时通过在目标表上发出ALTER来执行有限的自动演化。由于数据类型的更改和列的删除可能是危险的,连接器不会尝试在表上执行这种演变。也不尝试添加主键约束。相反,如果禁用auto.evolve,则不会执行任何演化,连接器任务将失败,并出现一个错误,说明缺少的列

对于自动创建和自动演化,列的可空性基于架构中相应字段的可选性,如果适用,也基于相应字段的默认值指定默认值。我们使用以下从连接架构类型到数据库特定类型的映射:

架构类型MySQL Oracle PostgreSQL SQLite SQL Server Vertica

此处未提及的数据库不支持自动创建或自动演化

重要的


对于向后兼容的表模式演化,记录模式中的新字段必须是可选的或具有默认值。如果需要删除字段,则应手动更改表架构,以删除相应的列、为其指定默认值或使其可为空。

“由于数据类型更改和删除列可能会有危险,连接器不会尝试在表上执行此类演变”谢谢。。。您是说这是不可能的吗?根据jdbc sink connector文档,不支持更改drop列,尽管我发现下面的文档似乎试图解决这个问题,但请注意,ddl更改由您来处理。。。模式更改主题