Flink CDC 中canal-json和debizum-json,大家都是用哪个?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Flink CDC中,canal-json和debezium-json是两种常见的数据格式,用于捕获数据库的变更日志(Change Data Capture, CDC)。选择使用哪种格式通常取决于具体的业务需求、技术栈以及对工具的熟悉程度。以下是两种格式的特点及适用场景分析:
data字段(更新后的数据)和old字段(更新前的数据)。database、table、type(操作类型,如INSERT、UPDATE、DELETE)等。{
"data": [{"id": "1", "name": "Alice"}],
"old": [{"name": "Bob"}],
"type": "UPDATE",
"database": "test_db",
"table": "users"
}
map-null-key.mode),可选值为FAIL、DROP或LITERAL。timestamp-format.standard),可选值为SQL或ISO-8601。database.include、table.include)。before字段(更新前的数据)和after字段(更新后的数据)。source字段(包含数据库名、表名、时间戳等)。{
"before": {"id": 1, "name": "Bob"},
"after": {"id": 1, "name": "Alice"},
"op": "u",
"source": {
"db": "test_db",
"table": "users",
"ts_ms": 1728528674000
}
}
schema-include),可选值为true或false。map-null-key.mode),与Canal类似。encode.decimal-as-plain-number)。根据知识库中的描述,以下是一些实际使用情况的对比: - 默认格式:在阿里云的Flink CDC场景中,debezium-json通常是默认格式,尤其是在Kafka数据源中。 - 兼容性:debezium-json支持更多的数据库类型,而canal-json主要针对MySQL。 - 性能:两者在性能上差异不大,但在特定场景下,canal-json可能更适合MySQL生态。
CREATE TABLE KafkaTable (
id BIGINT,
name STRING,
description STRING,
weight DECIMAL(10, 2)
) WITH (
'connector' = 'kafka',
'topic' = 'products_binlog',
'properties.bootstrap.servers' = 'localhost:9092',
'format' = 'canal-json'
);
CREATE TABLE KafkaTable (
id BIGINT,
name STRING,
description STRING,
weight DECIMAL(10, 2)
) WITH (
'connector' = 'kafka',
'topic' = 'products_binlog',
'properties.bootstrap.servers' = 'localhost:9092',
'format' = 'debezium-json'
);
distributed-tables配置项设为true。schema.inference.strategy配置。通过以上分析,您可以根据具体需求选择合适的格式。