初识Debezium – Kafka生态中的CDC工具

1. Debezium是什么?

file

Debezium is a change data capture (CDC) platform that can stream database changes onto Kafka topics. CDC is a popular technique with multiple use cases, including replicating data to other databases, feeding analytics systems, extracting microservices from monoliths and invalidating caches.

Debezium是一个可以把变化数据从数据库传输到KafkaTopic的一个CDC(变化数据捕捉)平台。
它使用了数据库的特性实现了基于日志的变化数据捕捉,具有以下特性:

  1. 确保所有数据变化被捕捉。
  2. 以非常低的延时产生产生变化时间,同时又避免了过于频繁的轮询数据库造成CPU占用增长。例如在MySQL或者PostgreSQL,延迟在毫米级别。
  3. 不需要任何对已有数据结构的修改,例如:增加"最近更新时间(LastUpdated)"字段。
  4. 可以捕捉到删除事件。
  5. 可以捕捉到历史数据和一些额外的元数据。例如事务ID。具体额外有哪些信息,取决于数据库的功能和配置。

CDC是一种非常流行的技术,具有丰富应用场景,例如:

  1. 数据库主从复制
  2. 实时分析
  3. 单体应用拆分微服务时双写
  4. 刷新缓存
  5. so on...

2. Debezium做了什么事?

file

简单来说,Debezium是一种数据传输介质,它把数据的变化从数据源抽取出来,序列化成网络消息,通过网络传输到输出的系统,再反序列化成数据。

在这个过程中Debezium做的事情有:

  1. 变化数据的抽取
  2. 变化的数据的格式化、序列化
  3. 把序列化后的标准数据传输到目标系统
  4. 在目标系统把标准数据反序列化成对应的数据格式

2.1. MySQL中如何实现变化数据的抽取和监听?

2.1.1. SnapshotReader

SnapshotReader.execute()

  1. 列出当前账号可以访问的所有数据库
  2. 列出步骤一中取得数据库中的所有普通表
  3. 为数据库获取生成DDL语句
  4. 为表生成DDL语句
  5. 读取表的数据生成Record发送到队列中

2.1.2. BinlogReader

  1. BinlogReader.doStart()中注册了各种Binlog事件处理。
  2. 在BinlogReader 构造函数中,初始化BinlogClient,并注册Binlog事件分发器
  3. BinlogReader.handleEvent()中接收订阅到的Binlog事件并进行分发。最后交由BinlogReader.doStart()中各种注册的BinlogEventHandler进行处理。

2.2. 除此之外Debezium还做了什么事情?

  • 过滤: 通过配置要捕获变化数据的数据字段的黑白名单,实现数据的过滤。
  • 脱敏: 可以通过配置指定字段,掩盖其内容,避免敏感信息泄露。
  • 监控: 通过Java的JMX机制监控Connectors的运行时指标,更好地观测运行时状态。
  • 自定义清洗 (基于Kafka Connect SMT框架实现,支持自定义扩展)

3. Debezium在Kafka生态中的定位?

file

Kafka Connect中的Source Connector

4. Debezium的替代品是什么?

简言之就是还有哪些CDC工具。国内比较常用的当属Canal了。

5. Debezium与Canal优劣对比?

优势:

  1. 更好的融入了Kafka Connect生态
    • SinkConnector(输出端)更加丰富。
    • 依靠Kafka Connect Transformer,使得能更加容易的通过前置拦截器和后置拦截器来实现Filter、Transformer、Routing等更丰富的功能。
    • 开放的Serializer和Deserializer,使得传输协议更加丰富,可以根据场景选择内容丰富的传输协议,或者高效的压缩传输协议。
  2. Debezium不仅仅只支持采集MySQL,还支持采集Mongo、SQLServer、Postgres等其他类型数据库.

劣势:

  1. Debezium是国外产品,中文文档较少。Canal是阿里产品,中文文档较多。
  2. Canal对国内RDS支持较好,支持从OSS中读取Binlog,结合阿里云RDS自动备份Binlog到OSS的机制,避免了Binlog被Rotate覆盖无法读取的问题。
  3. Canal提供了更加友好的运维界面(Canal admin),而Debezium暂时还没有,需要手动运维。

References

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇