开发者社区> 问答> 正文

集群模式下,客户端与instance断开连接,zookeeper running节点 自动被删除了

问题:

集群模式下,客户端与instance断开连接,zookeeper running节点 自动被删除了。并且查看canal.log,无任何异常信息输出。 请问这是目前的bug么,还是说zookeeper配置问题 ?

我所期望的:

客户端断开链接后,running节点依然存在,下次客户端连接上来,可以继续使用之前的信息,包括cursor信息。

ps:貌似看到类似问题是1.0.3解决。现在是啥版本。。。

原提问者GitHub用户ghost

展开
收起
绿子直子 2023-05-09 16:10:56 99 0
2 条回答
写回答
取消 提交回答
  • 主要是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

    2023-05-10 11:09:35
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    在Canal的集群模式中,当客户端与instance断开连接时,zookeeper上的running节点会被删除。这是Canal的正常行为,因为running节点代表了当前活跃的instance,如果instance断开连接,running节点就会被删除。这样做的目的是为了确保Canal集群的稳定性和可靠性。

    如果您希望客户端断开连接后,running节点依然存在,可以考虑使用Canal的单节点模式。在单节点模式下,running节点不会被删除,即使客户端断开连接也不会影响running节点的存在。但是,使用单节点模式可能会影响Canal的性能和可靠性,因为单节点模式无法提供高可用性和负载均衡的功能。

    关于您提到的Canal的版本问题,目前最新的稳定版本是Canal 1.1.5,建议您升级到最新版本以获得更好的性能和稳定性。

    2023-05-09 17:36:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《MSE 微服务网关》 立即下载
微服务引擎 MSE 治理中心重磅发布 立即下载
阿里云微服务引擎 MSE 2.0 线上发布 立即下载