CDC领域的消息对象膨胀率与数据结构设计
消息膨胀
消息对象膨胀率
原始从日志解析出来的内容主要是字节流,在数据同步过程中反序列化成具体的 Java 对象,占用的内存与实际字节流占用内存的比值,就是我们指的 CDC 领域中的消息对象膨胀率。
1 | 消息对象膨胀率=CDC程序中消息JAVA对象占用的内存字节数/原始字节流占用的字节数 |
膨胀率与能力
CDC 工具需要提供强大的数据处理能力,那么必然涉及消息对象膨胀。膨胀后的对象包含丰富的元信息和可读可处理的值对象。以 CloudCanal 为例,这些能力包含库表列裁剪映射、条件过滤、虚拟列、自定义主键、自定义代码等。
膨胀率与性能
更好的内存利用率和同步性能一定要关注消息对象膨胀率。如果在满足 CDC 产品能力诉求的情况下,优化消息对象膨胀率,对同步性能来说十分重要。
CloudCanal 消息膨胀
测试表
平均行长 2~3KB
1 | CREATE TABLE `cms_cw_zd_ws` ( |
全量
原始对象 | CC 内存对象 | 消息对象膨胀率(平均值) |
---|---|---|
Value Map (Value 通过 RS 取得均为 String) | RdbRecord | 2.5 |
增量
原始对象 | CC 内存对象 | 消息对象膨胀率(平均值) |
---|---|---|
字节流 | Event (ByteString) | 7 |
Event | ParsedEntry | 4 |
累计 28 倍