最近发表
canal编写了自己的driver模块,提供了基本的增删改查功能,并提供了直接获取原始binlog字节流的功能,其他模块在这个模块的基础上对binlog字节进行解析,parser模块底层实际上就是通过driver模块来与数据库建立连接的。
filter模块用于对binlog进行过滤。在实际开发中,一个mysql实例中可能会有多个库,每个库里面又会有多个表,可能我们只是想订阅某个库中的部分表,这个时候就需要进行过滤。也就是说,parser模块解析出来binlog之后,会进行一次过滤之后,才会存储到store模块中。
canal store模块用于存储parser模块解析后的binlog,以供client获取,其实现借鉴了Disruptor的RingBuffer,简而言之,你可以把其当做一个环形队列。
JDK序列化 2018-09-09 20:36:35
ObjectEncoder/ObjectDecoder使用JDK序列化机制编解码,因此我们可以使用Java对象作为请求和响应参数,限制是对象必须实现Serializable。JDK序列化机制的缺点是:序列化的性能以及序列化后对象占用的字节数比较多。优点是:这是对JDK默认支持的机制,不需要引入第三方依赖。
在实际开发中,为了简化开发,通常请求和响应都使用使用Java对象表示,对使用者屏蔽底层的协议细节。例如一些RPC框架,支持把用户定义的Java对象当做参数去请求服务端,服务端响应也是一个Java对象。