{
  "name": "debezium-mysql-shop",

  "config": {
    "_doc": "Debezium MySQL Source - 直接读 binlog，捕获 INSERT/UPDATE/DELETE 全增量",

    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "tasks.max": "1",

    "_db_doc": "MySQL 必须开启 binlog_format=ROW + binlog_row_image=FULL",
    "database.hostname": "mysql",
    "database.port": "3306",
    "database.user": "debezium",
    "database.password": "debezium-secret-CHANGE-ME",
    "database.server.id": "184054",
    "database.connectionTimeZone": "UTC",

    "_topic_doc": "Debezium 会发到 ${topic.prefix}.${db}.${table}",
    "topic.prefix": "dbz.shop",

    "_filter_doc": "只采集 shop 库的 orders/users 表",
    "database.include.list": "shop",
    "table.include.list": "shop.orders,shop.users",

    "_schema_history_doc": "DDL 变更历史存到独立 Kafka Topic（不能和业务 topic 混）",
    "schema.history.internal.kafka.bootstrap.servers": "broker:9092",
    "schema.history.internal.kafka.topic": "dbz.shop.history",

    "_snapshot_doc": "首次启动做快照（initial）；后续仅读 binlog（schema_only / never）",
    "snapshot.mode": "initial",
    "snapshot.locking.mode": "minimal",

    "_tombstone_doc": "DELETE 时除了 op=d 的消息，还发一条 value=null 的墓碑（compaction 友好）",
    "tombstones.on.delete": "true",

    "_smt_doc": "解 Debezium 包：把 envelope (before/after/op/source) 平展成业务 schema",
    "transforms": "unwrap,route,addTs",
    "transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
    "transforms.unwrap.drop.tombstones": "false",
    "transforms.unwrap.delete.handling.mode": "rewrite",
    "transforms.unwrap.add.fields": "op,table,source.ts_ms",

    "transforms.route.type": "org.apache.kafka.connect.transforms.RegexRouter",
    "transforms.route.regex": "dbz\\.shop\\.shop\\.(.*)",
    "transforms.route.replacement": "shop.$1",

    "transforms.addTs.type": "org.apache.kafka.connect.transforms.InsertField$Value",
    "transforms.addTs.timestamp.field": "_kafka_ts",

    "_converter_doc": "强 schema 场景推荐 Avro + Schema Registry，演示这里仍用 JSON",
    "key.converter": "org.apache.kafka.connect.json.JsonConverter",
    "key.converter.schemas.enable": "false",
    "value.converter": "org.apache.kafka.connect.json.JsonConverter",
    "value.converter.schemas.enable": "false",

    "_error_doc": "对 schema 异常的消息进入 DLQ，主管道不受影响",
    "errors.tolerance": "all",
    "errors.log.enable": "true",
    "errors.log.include.messages": "true",
    "errors.deadletterqueue.topic.name": "dlq.debezium-mysql-shop",
    "errors.deadletterqueue.topic.replication.factor": "3"
  }
}
