searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Zookeeper实现节点数据的变化监控

2024-10-28 09:27:22
3
0

       在大数据领域,Zookeeper 是一种高可用的分布式协调服务框架,广泛应用于各种分布式系统场景。其中,Watcher API 是 Zookeeper 提供的一项强大功能,它允许我们实时监控节点数据的变化并接收相应的通知。将介绍如何利用 Watcher API 来监控节点数据的变动。

       Watcher API 实现了一种事件机制,当节点数据发生变化时,Zookeeper 会主动向客户端发送事件通知。客户端可以通过注册 Watcher 来接收这些通知。Watcher API 的核心思想基于观察者模式,当节点数据变化时,Zookeeper 会将事件信息发送给监听该节点的客户端,从而实现实时的数据监控与通知。

使用Watcher可以解决应用服务器集群中可能存在的两个问题:

1、当某个通用的配置发生变化后,可以实现自动的让所有服务器的配置统一生效。
2、当集群中某个节点宕机,可以通知集群中的其他节点知道,进行处理。

      为了解决这两个问题,Zookeeper引入了Watcher机制来实现监听和同步的功能,能够让多个节点同时监听某一个对象,当这个对象自身状态发生变化时,会通知所有监听者。Zookeeper中实现Watcher需要有三个部分,分别是Zookeeper服务端、客户端以及客户端的WatchManager。客户端向Zookeeper注册Watcher的同时,会将客户端的Watcher对象存储在客户端的WatchManager中;Zookeeper服务器触发Watcher事件后,会向客户端发送通知,客户端线程从WatchManager中取出对应Watcher执行。

Watch机制

      当Zookeeper中节点 Znode 发生变化时(包括 Znode 的增加、删除、修改,以及子 Znode 的变动),客户端可以通过 Watch 机制接收到通知。要实现 Watch,必须实现 org.apache.zookeeper.Watcher 接口,并将实现类的实例传递给相应的 Watch 方法。在 Zookeeper 中,所有的读操作(如 getData()getChildren()exists())都可以设置 Watch 选项。值得注意的是,Watch 事件具有一次性触发的特性,也就是说,如果被监视的 Znode 发生变化,Zookeeper 会通知设置了该 Watch 的客户端。如果我们需要Watcher,可以自定义Watcher,如果是Boolean型变量,当为true时,则使用系统默认的Watcher,系统默认的Watcher是在Zookeeper的构造函数中定义的Watcher。参数中Watcher为空或者false,表示不启用Wather。

Watch的一次性触发

      当客户端在某个 Znode 上设置了 Watch 后,如果该 Znode 的内容发生变化,客户端将收到相应的 Watch 事件。但如果 /znode1 随后再次发生变化,客户端将无法再接收到新的 Watch 事件,除非重新设置 Watch。

Watch的异步发送至客户端

       Watch 事件是异步发送给客户端的,Zookeeper 保证客户端发送的更新顺序是有序的。若某个 Znode 没有设置 Watcher,客户端在 Watch 被发送到集群之前,对该 Znode 的任何变化都不会被感知,若服务器端没有相应的 Watcher,Znode 的变更不会通知客户端。此外,即使某个 Znode 设置了 Watcher,并在发生变化时通知了客户端,如果客户端在接收到该变化事件后没有立即重新设置 Watch,而其他客户端又对该 Znode 进行了修改,那么客户端将无法接收到该 Znode 的第二次变化通知。因此,在使用 Zookeeper 时,不能期望监控到每一次节点的变化,Zookeeper 只能保证最终一致性,而非强一致性。

设置 Watch 的数据内容

        Znode 的变化方式多种多样,Zookeeper 维护了两个 Watch 列表:一个用于节点数据的 Watch,另一个用于子节点的 Watch。调用 getData()exists() 方法会设置数据 Watch,而 getChildren() 则设置子节点 Watch。用户可以根据不同的返回结果选择合适的 Watch 类型。

总结

     我们可以通过业务实际情况来使用Zookeeper的Watcher来实现节点数据的同步,Watch 是一种轻量级的机制,实际上只是本地 JVM 的回调。服务器端仅仅记录了是否设置了 Watcher 的布尔值。在服务器端处理相应的 Znode 操作,并根据客户端传递的 Watcher 信息进行持久化。同时作为 Watcher 的回调,监听服务器端事件的变化。当批准某次 Znode 变更请求后,会向 Zookeeper 客户端发送通知信息,Zookeeper 客户端在接收到通知信息后,会查找对应路径的 Watcher 列表,并逐个触发相应的回调,以此实现节点数据的同步。

 

0条评论
0 / 1000
刘****航
2文章数
0粉丝数
刘****航
2 文章 | 0 粉丝
刘****航
2文章数
0粉丝数
刘****航
2 文章 | 0 粉丝
原创

Zookeeper实现节点数据的变化监控

2024-10-28 09:27:22
3
0

       在大数据领域,Zookeeper 是一种高可用的分布式协调服务框架,广泛应用于各种分布式系统场景。其中,Watcher API 是 Zookeeper 提供的一项强大功能,它允许我们实时监控节点数据的变化并接收相应的通知。将介绍如何利用 Watcher API 来监控节点数据的变动。

       Watcher API 实现了一种事件机制,当节点数据发生变化时,Zookeeper 会主动向客户端发送事件通知。客户端可以通过注册 Watcher 来接收这些通知。Watcher API 的核心思想基于观察者模式,当节点数据变化时,Zookeeper 会将事件信息发送给监听该节点的客户端,从而实现实时的数据监控与通知。

使用Watcher可以解决应用服务器集群中可能存在的两个问题:

1、当某个通用的配置发生变化后,可以实现自动的让所有服务器的配置统一生效。
2、当集群中某个节点宕机,可以通知集群中的其他节点知道,进行处理。

      为了解决这两个问题,Zookeeper引入了Watcher机制来实现监听和同步的功能,能够让多个节点同时监听某一个对象,当这个对象自身状态发生变化时,会通知所有监听者。Zookeeper中实现Watcher需要有三个部分,分别是Zookeeper服务端、客户端以及客户端的WatchManager。客户端向Zookeeper注册Watcher的同时,会将客户端的Watcher对象存储在客户端的WatchManager中;Zookeeper服务器触发Watcher事件后,会向客户端发送通知,客户端线程从WatchManager中取出对应Watcher执行。

Watch机制

      当Zookeeper中节点 Znode 发生变化时(包括 Znode 的增加、删除、修改,以及子 Znode 的变动),客户端可以通过 Watch 机制接收到通知。要实现 Watch,必须实现 org.apache.zookeeper.Watcher 接口,并将实现类的实例传递给相应的 Watch 方法。在 Zookeeper 中,所有的读操作(如 getData()getChildren()exists())都可以设置 Watch 选项。值得注意的是,Watch 事件具有一次性触发的特性,也就是说,如果被监视的 Znode 发生变化,Zookeeper 会通知设置了该 Watch 的客户端。如果我们需要Watcher,可以自定义Watcher,如果是Boolean型变量,当为true时,则使用系统默认的Watcher,系统默认的Watcher是在Zookeeper的构造函数中定义的Watcher。参数中Watcher为空或者false,表示不启用Wather。

Watch的一次性触发

      当客户端在某个 Znode 上设置了 Watch 后,如果该 Znode 的内容发生变化,客户端将收到相应的 Watch 事件。但如果 /znode1 随后再次发生变化,客户端将无法再接收到新的 Watch 事件,除非重新设置 Watch。

Watch的异步发送至客户端

       Watch 事件是异步发送给客户端的,Zookeeper 保证客户端发送的更新顺序是有序的。若某个 Znode 没有设置 Watcher,客户端在 Watch 被发送到集群之前,对该 Znode 的任何变化都不会被感知,若服务器端没有相应的 Watcher,Znode 的变更不会通知客户端。此外,即使某个 Znode 设置了 Watcher,并在发生变化时通知了客户端,如果客户端在接收到该变化事件后没有立即重新设置 Watch,而其他客户端又对该 Znode 进行了修改,那么客户端将无法接收到该 Znode 的第二次变化通知。因此,在使用 Zookeeper 时,不能期望监控到每一次节点的变化,Zookeeper 只能保证最终一致性,而非强一致性。

设置 Watch 的数据内容

        Znode 的变化方式多种多样,Zookeeper 维护了两个 Watch 列表:一个用于节点数据的 Watch,另一个用于子节点的 Watch。调用 getData()exists() 方法会设置数据 Watch,而 getChildren() 则设置子节点 Watch。用户可以根据不同的返回结果选择合适的 Watch 类型。

总结

     我们可以通过业务实际情况来使用Zookeeper的Watcher来实现节点数据的同步,Watch 是一种轻量级的机制,实际上只是本地 JVM 的回调。服务器端仅仅记录了是否设置了 Watcher 的布尔值。在服务器端处理相应的 Znode 操作,并根据客户端传递的 Watcher 信息进行持久化。同时作为 Watcher 的回调,监听服务器端事件的变化。当批准某次 Znode 变更请求后,会向 Zookeeper 客户端发送通知信息,Zookeeper 客户端在接收到通知信息后,会查找对应路径的 Watcher 列表,并逐个触发相应的回调,以此实现节点数据的同步。

 

文章来自个人专栏
节点状态同步
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0