Apache kafka 不使用Kafka Connect复制架构更改
目标是:MySQL->Kafka->MySQL。接收器目标应与生产同步 插入和删除记录是可以的,但我在模式更改方面遇到了问题,例如删除了列。更改未复制到接收器目标 我的消息来源: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
{
"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更改由您来处理。。。模式更改主题