Canal Client API

 

快速体验

1.  首先需要先启动canal server,可参见:Canal Server的QuickStart

2.  运行canal client,可参见:canal client的ClientExample

 

如何下载

1.  如果是maven用户,可配置mvn dependency

<dependency>
    <groupId>com.alibaba.otter</groupId>
    <artifactId>canal.client</artifactId>
    <version>x.y.z</version>
</dependency>

 对应的version版本,可见https://github.com/alibaba/canal/releases

 

2.  其他用户,可通过mvn仓库直接下载jar包

mvn仓库下载url :  http://central.maven.org/maven2/com/alibaba/otter/canal.client/

选择对应的version,下载jar/source/javadoc文件即可. 

 

类设计

在了解具体API之前,需要提前了解下canal client的类设计,这样才可以正确的使用好canal. 

 

大致分为几部分:

  • ClientIdentity
    canal client和server交互之间的身份标识,目前clientId写死为1001. (目前canal server上的一个instance只能有一个client消费,clientId的设计是为1个instance多client消费模式而预留的,暂时不需要理会)
  • CanalConnector
    SimpleCanalConnector/ClusterCanalConnector :   两种connector的实现,simple针对的是简单的ip直连模式,cluster针对多ip的模式,可依赖CanalNodeAccessStrategy进行failover控制
  • CanalNodeAccessStrategy
    SimpleNodeAccessStrategy/ClusterNodeAccessStrategy:两种failover的实现,simple针对给定的初始ip列表进行failover选择,cluster基于zookeeper上的cluster节点动态选择正在运行的canal server. 
  • ClientRunningMonitor/ClientRunningListener/ClientRunningData
    client running相关控制,主要为解决client自身的failover机制。canal client允许同时启动多个canal client,通过running机制,可保证只有一个client在工作,其他client做为冷备. 当运行中的client挂了,running会控制让冷备中的client转为工作模式,这样就可以确保canal client也不会是单点.  保证整个系统的高可用性.

javadoc查看:

server/client交互协议

具体的网络协议格式,可参见: CanalProtocol.proto

1. 创建Connector

a.  创建SimpleCanalConnector (直连ip,不支持server/client的failover机制)

CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(AddressUtils.getHostIp(),11111), destination, "", "");
b.  创建ClusterCanalConnector (基于zookeeper获取canal server ip,支持server/client的failover机制)
CanalConnector connector = CanalConnectors.newClusterConnector("10.20.144.51:2181", destination, "", "");
c.  创建ClusterCanalConnector (基于固定canal server的地址,支持固定的server ip的failover机制,不支持client的failover机制
CanalConnector connector = CanalConnectors.newClusterConnector(Arrays.asList(new InetSocketAddress(AddressUtils.getHostIp(),11111)), destination,"", "");

2.  get/ack/rollback使用 

猜你喜欢

转载自agapple.iteye.com/blog/1965940
今日推荐