b. 创建example目录,并修改instance.properties
canal.instance.mysql.slaveId = 1234 ##另外一台机器改成1235,保证slaveId不重复即可 canal.instance.master.address = 172.16.0.158:3306注意: 两台机器上的instance目录的名字需要保证完全一致,HA模式是依赖于instance name进行管理,同时必须都选择default-instance.xml配置
启动两台机器的canal,启动后,你可以查看logs/example/example.log,只会看到一台机器上出现了启动成功的日志。查看一下zookeeper中的节点信息,也可以知道当前工作的节点为172.16.0.157:11111
Canal pom版本需要1.0.22或以上,否则zkclient可能发生冲突
<dependency><groupId>com.alibaba.otter</groupId>
<artifactId>canal.client</artifactId>
<version>1.0.22</version>
</dependency>
Canal POC
消费位点Canal client接收到日志之后要提交ack确认
connector.ack(batchId); // 提交确认canal server在接收了客户端的ack后,就会记录客户端提交的最后位点,如果canal client没有提交位点,则下一次canal client启动的时候 会将最后记录的位点把日志重新推送过来,直到canal client提交ack确认为止。
订阅延迟Canal-server单点模式下,订阅延迟平均22.65毫秒,HA模式下,订阅延迟平均24.16毫秒,具体数据请参考附录。
宕机消息是否丢失停止正在工作的172.16.0.157的canal server,这时172.16.0.158会立马启动example instance,提供新的数据服务。与此同时,客户端也会随着canal server的切换,通过获取zookeeper中的最新地址,与新的canal server建立链接,继续消费数据,整个过程自动完成。