1.简介 canal [kə"næl],译意为水道/管道/沟渠,主要用途是基于 Mysql 数据库增量日志解析,提供增量数据 订阅 和 消费。应该是阿里云DTS(Data Transfer Service)的开源版本。 2.提供的能
canal [kə"næl],译意为水道/管道/沟渠,主要用途是基于 Mysql 数据库增量日志解析,提供增量数据 订阅 和 消费。应该是阿里云DTS(Data Transfer Service)的开源版本。
Canal与DTS提供的功能基本相似:
1)基于mysql的Slave协议实时dump binlog流,解析为事件发送给订阅方。
2)单Canal instance,单DTS数据订阅通道均只支持订阅一个RDS,提供给一个消费者。
3)可以使用canal-client客户端进行消息消费。
4)也可以通过简单配置,也可以不需要自行使用canal-client消费,可以选择直接投递到kafka或者RocketMQ集群,用户只需要使用消息队列的consumer消费即可。
5)成功消费消息后需要进行Ack,以确保一致性,服务端则会维护客户端目前的消费位点。
Mysql的主从复制分成三步:
canal 就是模拟了这个过程。
canal 1.1.4开始支持admin管理,通过canal-admin为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WEBUI操作界面,方便更多用户快速和安全的操作,替代了过去繁琐的配置文件管理。
整体部署架构如下。
说明:
Instance模块
EventParser模块的类图设计如下
每个EventParser都会关联两个内部组件:CanalLogPositionManager , CanalHAController
EventParser根据HAController获知连到哪里,通过LogPositionManager获知从哪个位点开始解析,之后便通过Mysql Slave协议拉取binlog进行解析,推入EventSink
目前只提供了一个带有实际作用的实现:GroupEventSink
GroupEventSink用于将多个instance上的数据进行归并,常用于分库后的多数据源归并。
EventStore的类图如下
官方提供的实现类是
MemoryEventStoreWIthBuffer,内部采用的是一个RingBuffer:
这些位点信息通过MetaManager进行管理。这也解释了为什么一个canal instance只能支撑一个消费者:EventStore的RingBuffer只为一个消费者维护信息。
数据格式已经在前文给出,Canal和DTS客户端均采取:
拉取事件 -> 消费 -> 消费成功后ACK
这样的消费模式,并支持消费不成功时进行rollback,重新消费该数据。
下面是一段简单的客户端调用实例(略去异常处理):
// 创建CanalConnector, 连接到localhost:11111
CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(AddressUtils.getHostIp(),11111), destination, "", "");
connector.connect(); // 连接
connector.subscribe(); // 开始订阅binlog
// 开始循环拉取
while (running) {
Message message = connector.getWithoutAck(1024); // 获取指定数量的数据
long batchId = message.getId();
for (Entry entry : message.getEntries()){
// 对每条消息进行处理
}
connector.ack(batchId); // ack
}
5.1 优点
1)性能优异、功能全面
2)运维方便
3)多语言支持
5.2 缺点
好了,花了10分钟应该对canal有大致了解了,下一期,阿丸计划手把手教你搭建canal集群和admin管理平台,记得关注哦。
看到这里了,原创不易,点个关注、点个赞吧,你最好看了~
知识碎片重新梳理,构建Java知识图谱:https://GitHub.com/saigu/JavaKnowledgeGraph(历史文章查阅非常方便)
--结束END--
本文标题: 「从零单排canal 01」 canal 10分钟入门(基于1.1.4版本)
本文链接: https://www.lsjlt.com/news/6569.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-09
2024-05-09
2024-05-09
2024-05-09
2024-05-09
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0