【问题标题】:Why empheral node does not deleted from zookeeper after sessiontimeout value为什么会话超时值后临时节点没有从 Zookeeper 中删除
【发布时间】:2023-03-09 23:41:01
【问题描述】:
我在 CuratorFrameworkFactory.newClient 方法的帮助下创建了一个临时节点,该方法采用 znodes 地址,sessiontimeoutinms,connectiontimeoutinms,Retry) 。我将 5*1000 作为 sessiontimeoutinms 和 15*1000 作为 connectiontimeoutinms。此方法能够在我的 zookeeper 中创建 EPHEMERAL 节点,但在应用程序运行之前不会删除此 EPHEMERAL 节点。
为什么会发生这种情况,因为 sessiontimeout 是 5 秒。
【问题讨论】:
标签:
hadoop
bigdata
apache-zookeeper
apache-curator
【解决方案1】:
最可能的原因是您的 Zookeeper 心跳设置(也称为 tickTime)较高,并且最小会话超时不能低于 2*tickTime。
【解决方案2】:
为了调试,当创建一个临时节点时,检查 zkCli 中的 ephemeralOwner。该值是会话 ID。
当拥有该节点的客户端时,在 zookeeper 日志中,您应该得到这一行:
INFO [ProcessThread(sid:0 cport:2182)::PrepRequestProcessor@486] -
sessionid 的已处理会话终止:0x161988b731d000c
在这种情况下,ephemeralOwener 是 0x161988b731d000c。如果你不明白,你会得到一些错误。就我而言,这是 EOF 异常,这是因为客户端库和服务器不匹配。