问题:
集群模式下,客户端与instance断开连接,zookeeper running节点 自动被删除了。并且查看canal.log,无任何异常信息输出。 请问这是目前的bug么,还是说zookeeper配置问题 ?
我所期望的:
客户端断开链接后,running节点依然存在,下次客户端连接上来,可以继续使用之前的信息,包括cursor信息。
ps:貌似看到类似问题是1.0.3解决。现在是啥版本。。。
原提问者GitHub用户ghost
主要是canal 1.0.2版本下,当一个instance只有一个客户端链接,而且这个客户端链接断开时,会自动停止。下一次客户端启动时,会自动从所有的instance的cluster机器列表中随机选择一台,重新建立链接,这时instance会重新启动.
目前是否关闭在canal 1.0.3版本会做成可配置的模式,允许用户定义. (PS. 1.0.3目前还未正式发布,清明过后会release)
canal.properties中新增参数: #as far as possible to stop canal instance where client disconnect canal.stopInstanceAsPossible = true / false # false代表客户端断开时,不主动关闭instance,即你锁期望的保留running节点
还有一点要说明,你选择了zookeeper的集群模式配置启动了canal server,它会定时记录cursor信息到zookeeper中,默认的刷新频率可见 canal.zookeeper.flush.period这参数,默认为1秒。
所以下一次重新链接时,重新启动instance,会继续从最后一次提交到zookeeper中的cursor位置进行启动,会有一定的重复数据.
目前canal 1.0.2还有一个已知bug ,会有个NPE问题,导致重新链接时会出现启动失败。
所以目前canal 1.0.2使用了集群部署instance,发生切换或者客户端主动断开链接,会导致instance环境不可用,如果想使用集群部署,还是等一下canal 1.0.3版本,如有问题,可进群讨论(wiki首页有群号信息)或者继续在issue上留言.
原回答者GitHub用户agapple
在Canal的集群模式中,当客户端与instance断开连接时,zookeeper上的running节点会被删除。这是Canal的正常行为,因为running节点代表了当前活跃的instance,如果instance断开连接,running节点就会被删除。这样做的目的是为了确保Canal集群的稳定性和可靠性。
如果您希望客户端断开连接后,running节点依然存在,可以考虑使用Canal的单节点模式。在单节点模式下,running节点不会被删除,即使客户端断开连接也不会影响running节点的存在。但是,使用单节点模式可能会影响Canal的性能和可靠性,因为单节点模式无法提供高可用性和负载均衡的功能。
关于您提到的Canal的版本问题,目前最新的稳定版本是Canal 1.1.5,建议您升级到最新版本以获得更好的性能和稳定性。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。