1、Canal Server 运行后,向主库发送dump协议的时机
- CanalConnecor.getWithoutAck(500) 发起请求时
上面示例代码演示了一个从canal server集群中循环拉取消息的过程:首先设置canal server的zk地址和destination(对应一个canal server)以及订阅的库表(可以通过filter可以对destination进一步过滤筛选)等信息,然后通过调用getWithoutAck方法批量读取,如果读取并且处理没有异常抛出,就可以通过ack确认进行下一批次读取。
- @CanalEventListener 监听时
2、Canal Server 和 zk之间的关系,从master 获取的 bin log数据,后续在哪里?
canal 的EventStore基于本地内存存储实现数据的存储、读取和ack采用类似Disruptor的RingBuffer的实现思路:
RingBuffer定义了3个cursor:
- Put : Sink模块进行数据存储的最后一次写入位置
- Get : 数据订阅获取的最后一次提取位置
- Ack : 数据消费成功的最后一次消费位置