作者回复: 是的。ZooKeeper的watch是one-time trigger。一个Watch收一次通知。
作者回复: ls列出一个znode下的子znode列表,stat是返回一个znode的stat信息。 -w选项是用来一个设置一个watch,适用于ls和stat。
作者回复: 生产环境一般至少3个节点。2个节点的话,1个节点宕了,工作的节点个数就不是2的大多数了,没有容错能力。3个节点的话,1个节点宕了,集群还可以正常工作。
作者回复: 在ZooKeeper上面创建/master这个znode,如果/master这个znode已经存在,这个创建就会失败。只有一个节点创建/master节点成功了,它才可以确认自已成了master。因为master1节点先做的创建,所以它的创建成功了,它就成了master。因为master2后做的创建,它的创建就会失败,它就知道自己没能成为master。 多个节点必须遵循先成功创建/master这个znode,再监听/workers下的worker才能能保证master的唯一性。
作者回复: Master-Worker协同服务的要求: - 系统中有最多有一个master。 - 系统中可以有多个worker。 master监控系统中的worker,通常为worker分配任务。 这个后面我会专门再讲一下。
作者回复: 提前使用"create /workers"创建/workers这个znode。不能带"-e"这个选项。
作者回复: 1. "create -e /workers/w1"是创建/workers/w1这个znode。/workers也是一个znode,这里用作目录。 2. master监视/workers下面代表worker的znode的变化。常见的场景是master在收到worker的变化通知时,进行任务分配,例如把任务分给新worker。例如Kafka的controller就承担master的角色,broker就是worker。controller会把partition分配给新启动的broker。
作者回复: workers使用"create /workers"创建
作者回复: 我猜您是使用持久化znode注册的服务。如果您希望在应用停止后,应用自动被注销,可以使用临时性znode。
作者回复: 大家的问题也帮助我更深刻的理解ZooKeeper。谢谢大家。