昨天花了一天时间,部署了canal,但是还有很多细节不明白.
版本:
1.0.21
我发现部署之后,没有找到任何的存储文件.按说应该有中继日志这种东西,但是没有发现.
后来官方群中,有大神说它是内存存储.
## memory store RingBuffer size, should be Math.pow(2,n)
canal.instance.memory.buffer.size = 16384
## memory store RingBuffer used memory unit size , default 1kb
canal.instance.memory.buffer.memunit = 1024
## meory store gets mode used MEMSIZE or ITEMSIZE
canal.instance.memory.batch.mode = MEMSIZE
一旦超过16k的event或者超过16m内存空间,则全链路阻塞..
至于什么是全链路阻塞,他们没有解释,我感觉就是canal不接收binlog了..
canal 使用zookeeper实现HA
他的模式是单主双活.
同一时间可以启动多个canal程序,但是只有一个canal程序提供服务.
在zookeeper中,可以看到canal集群中的成员
ls /otter/canal/cluster
也可以看到哪个程序正在作为Master提供服务
get /otter/canal/destinations/songod/running
作为我编写的消费者程序,也可以启动多个.但是同一时间,只有一个消费者生效.这样就实现了HA的功能.
另外需要注意的是,
getWithoutAck 是可以异步ack或者rollback的.
但是ack或者rollback,一定严格按照接收的顺序.
比如getWithoutAck 1,2,3,4
如果直接 ack 3 ,那么canal会认为小于等于3的数据,都已经ack.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-2103008/
,如需转载,请注明出处,否则将追究法律责任。