Canal探究( 二 )
properties配置文件properties配置分为两部分:
- canal.properties (系统根配置文件 , 配置destinations , 注册IP , 启动端口)
- instance.properties (instance级别的配置文件 , 每个instance一份 , 配置数据库信息 , 监听的表)
canal配置主要分为两部分定义:
- instance列表定义 (列出当前server上有多少个instance , 每个instance的加载方式是spring/manager等)
- common参数定义 , 比如可以将instance.properties的公用参数 , 抽取放置到这里 , 这样每个instance启动的时候就可以共享. 【instance.properties配置定义优先级高于canal.properties】
- memorymemory-instance.xml中使用 , 所有的组件(parser , sink , store)都选择了内存版模式 , 记录位点的都选择了memory模式 , 重启后又会回到初始位点进行解析速度最快 , 依赖最少(不需要zookeeper)场景:一般应用在quickstart , 或者是出现问题后 , 进行数据分析的场景 , 不应该将其应用于生产环境
- zookeeper
- mixed
- period:default-instance.xml中使用 , 集合了zookeeper+memory模式 , store选择了内存模式 , 其余的parser/sink依赖的位点管理选择了持久化模式 , 目前持久化的方式主要是写入zookeeper , 保证数据集群共享支持HA , 可用于生产环境 , 集群化部署
一份 instance bean 定义 , 需要包含 eventParser , evnetSink , evnetStore , metaManager , alarmHandler 的5个模块定义 , ( alarmHandler 主要是一些报警机制处理 , 因为简单没展开 , 可扩展)
instance.xml设计初衷:
允许进行自定义扩展 , 比如实现了基于数据库的位点管理后 , 可以自定义一份自己的instance.xml , 整个canal设计中最大的灵活性在于此
HA模式配置canal的ha分为两部分:
- canal server: 不同server上的instance要求同一时间只能有一个处于running , 其他的处于standby状态 , 不然就是对mysql dump的重复请求 。 这里是instance/destination级别的负载均衡 , 而不是server
- canal client: 为了保证有序性 , 一份instance同一时间只能由一个canal client进行get/ack/rollback操作 , 否则客户端接收无法保证有序 。
Canal Server:
文章插图
- canal server要启动某个canal instance时都先向zookeeper进行一次尝试启动判断 (实现:创建EPHEMERAL节点 , 谁创建成功就允许谁启动)
- 创建zookeeper节点成功后 , 对应的canal server就启动对应的canal instance , 没有创建成功的canal instance就会处于standby状态
推荐阅读
- Canalys公布Q3国内手机出货量 小米逆势增长排名第四
- iOS虚拟定位技术探究
- 因为一次redis缓存穿透,全面探究redis能做什么
- 隐匿在语音识别背后的智能音箱之战
- 阿里P8带你深入看源码,探究多线程原理,只靠这份384页笔记
- 创业邦|2020凤凰网科技创新趋势论坛正式召开,探究中国科技力量崛起之路
- 一个神烦取名字的IT人|区块链技术在食品溯源领域的应用探究