Curator 三种 Watcher 监听实现

项目背景:

实时 Flink任务中,需要实现不停实时任务,清除关联维表的本地缓存。

方案:

方案采用 Zookeeper 的配置中心的功能,即当需要清除正在运行 Flink App 的维表本地缓存时,通过web端配置 Zookeeper 指定节点上的配置值,Flink App 上 Watch 指定节点上的值,一旦发生变化,Flink 即清除本地维表数据缓存。

Zookeeper特性背景

Curator提供了三种Watcher(Cache)来监听结点的变化

  • Path Cache : 监控一个ZNode的子节点. 当一个子节点增加, 更新,删除时, Path Cache会改变它的状态, 会包含最新的子节点, 子节点的数据和状态
  • Node Cache : 只是监听某一个特定的节点
  • Tree Cache : 可以监控整个树上的所有节点,类似于PathCache和NodeCache的组合

demo说明:

* PathCacheE : PathCache 的实现
* NodeCacheE : NodeCache 的实现
* TreeCacheE : TreeCache 的实现

项目中各个Flink任务对应各自的ZK节点,所以采用 Node Cache 即可

PathCacheE:监控一个ZNode的子节点

/**
 * Path Cache用来监控一个ZNode的子节点. <br>
 * 当一个子节点增加, 更新,删除时, Path Cache会改变它的状态, 会包含最新的子节点, 子节点的数据和状态,而状态的变更将通过PathChildrenCacheListener通知。
 */
public class PathCacheE {
    /**
     * 监控 PATH 子节点的变化
     */
    private static final String PATH = "/example/pathCache";

    public static void main(String[] args) throws Exception {
        TestingServer server = new TestingServer();

        new Thread(new ClientListenerTask(server)).start();
        Thread.sleep(500);

        new Thread(new ClientProviderTask(server)).start();
    }

    /**
     * 负责监控子节点的变化(增加, 更新,删除)
     */
    private static class ClientListenerTask implements Runnable {

        private TestingServer server;

        ClientListenerTask(TestingServer server) {
            this.server = server;
        }

        @Override
        public void run() {
            try {
                CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new ExponentialBackoffRetry(1000, 3));
                client.start();

                PathChildrenCac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值