ZK watcher 实现节点的监听

[zk] CuratorFramework的LeaderLatch选主解析 [zk] CuratorFramework的LeaderLatch选主解析 三个要点:分布式锁、顺序选主、监听方式 主要竞选流程 1、参与竞选的LeaderLatch实例在zookeeper上的{latchpath}目录创建临时有序子节点,如{latchpath}/latch-{seq},值默认为"".getBytes()。 2、创建有序节点成功后,回调函数,读取节点{latchpath}目录的所有子节点信息,对子节点的名称按{seq}从小到大排序,判断如果当前创建节点的值为最小的节点值,则断定当前的节点为 阅读详情

 

zk: localhost:2181(CONNECTED) 14] help
ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create [-s] [-e] path data acl
        addauth scheme auth
        quit
        getAcl path
        close
        connect host:port

 

监听器的原理:

 

watcher实现节点的监听

客户端A创建节点

[zk: localhost:2181(CONNECTED) 18] create /testwatcher 123
Created /testwatcher
[zk: localhost:2181(CONNECTED) 19] ls /
[controller_epoch, brokers, zookeeper, hellozk, testwatcher, admin, consumers, zktmp_1230000000021, config, my_zktmp0000000022, zktmp]

客户端B监听节点testwatch 变化 

[zk: 192.168.13.138(CONNECTED) 57] ls /
[controller_epoch, brokers, zookeeper, hellozk, testwatcher, admin, consumers, zktmp_1230000000021, config, my_zktmp0000000022, zktmp]
[zk: 192.168.13.138(CONNECTED) 58] get /testwatcher watch
123
cZxid = 0xd0000057a
ctime = Sun Mar 31 23:18:51 CST 2019
mZxid = 0xd0000057a
mtime = Sun Mar 31 23:18:51 CST 2019
pZxid = 0xd0000057a
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: 192.168.13.138(CONNECTED) 59]
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/testwatcher

客户端A 重新set 修改数据

[zk: localhost:2181(CONNECTED) 20] set /testwatcher 456
cZxid = 0xd0000057a
ctime = Sun Mar 31 23:18:51 CST 2019
mZxid = 0xd0000057b
mtime = Sun Mar 31 23:19:36 CST 2019
pZxid = 0xd0000057a
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

客户端B收到了数据变化的监听

WatchedEvent state:SyncConnected type:NodeDataChanged path:/testwatcher

客户端A再次修改数据,客户端B不会再接受数据,因为watch机制是 只会监听一次变化,再次节点变化,则监听不到,只能再次设置监听任务

 

案例2:实现服务器变化,通知全部订阅节点的client

package com.itcast.zookeeper;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

import java.io.IOException;
import java.util.List;

public class ZKClient2 {

    static ZooKeeper zk = null;

    public static void main(String[] args) throws KeeperException, InterruptedException, IOException {

        zk = new ZooKeeper("192.168.13.130:2181", 3000, new Watcher() {

            //客户端A再次修改数据,客户端B不会再接受数据,因为watch机制是 只会监听一次变化,再次节点变化,则监听不到,只能再次设置监听任务
            //比如/myGirls节点设置了一次beautiful的数据,

            /**
             * 监听到了数据
             * watchedEvent.getState()---SyncConnected
             * watchedEvent.getPath()----/myGirls
             * watchedEvent.getType()----NodeDataChanged
             *
             * 再次将myGirls节点设置成sexy将不会重复监听,徐涛再次设置监听任务
             */

            @Override
            public void process(WatchedEvent watchedEvent) {
                System.out.println("watchedEvent.getState()---" + watchedEvent.getState());
                System.out.println("watchedEvent.getPath()----" + watchedEvent.getPath());
                System.out.println("watchedEvent.getType()----" + watchedEvent.getType());

                if (watchedEvent.getType().equals(Event.EventType.NodeDataChanged)) {
                    try {
                    //true再次监听
                        byte[] data = zk.getData("/myGirls", true, null);
                        System.out.println("变更的数据是:" +new String(data));
                    } catch (KeeperException | InterruptedException e) {
                        e.printStackTrace();
                    }
                }

            }
        });

        //开启监听,数据有变化,则出发客户端监听回调
        zk.getData("/myGirls",true,null);
        Thread.sleep(Integer.MAX_VALUE);
        zk.close();


    }

}

修改节点数据

set /myGirls 7777777778890000

 

发现Client监听到了变化的数据 

 

分布式系统中利用zookeeper集群实现微服务主备切换代码片段(C语言版) 分布式系统中,zookeeper可以应用到多种场景,集群管理,配置管理,服务发现,分布式锁,命名服务等。这里主要提供集群管理中主备切换的代码片段。 阅读详情

相关推荐

【Canal】Canal 的 HAController 是如何利用 ZooKeeper 实现主备选举的?

对于一位拥有 8 年 Flink/ClickHouse/Hudi/Kafka 开发经验,但从未接触 Canal 的工程师而言,理解其的设计是掌握 Canal 跨机房容灾、99.99% SLA 保障能力的关键。Canal 1.1.8 作为一款成熟且经过阿里内部大规模验证的 CDC 组件,其高可用(HA)机制并非简单的主备复制,而是深度依赖 ZooKeeper 的临时节点(Ephemeral Node)和 Watch 机制,实现了一套精密的分布式协调方案。本文将以。

九师兄 69

zk的watch机制使用及原理分析

Zookeeper引入了wacther机制来实现分布式数据的发布/订阅功能。可以让多个订阅者同时监听某一个主题对象,当主题对象自身状态发生改变时就会通知所有订阅者。以上就是watch注册与实现监听的整个过程了。其实 主体逻辑不复杂,只是夹杂着网络通信以及大量的异步化流程 加大了阅读代码的难度。...

我就是我的博客 3124

告别MATLAB依赖:手把手教你用Python实现GCC-PHAT时延估计(附完整代码与对比测试)

本文详细介绍了如何使用Python实现GCC-PHAT时延估计算法,替代传统的MATLAB依赖。通过完整的代码示例和性能对比测试,展示了Python在信号处理领域的强大能力,特别是在广义互相关和TDOA应用中的高效实现。文章还提供了实时音频处理和嵌入式部署的实用技巧,帮助工程师快速掌握这一关键技术。

weixin_42667269的博客 221

zookeeper节点和监听

一、zookeeper节点: 1、PERSISTENT持久化目录节点:客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,他永久存在 2、PERSISENT_SEQUENTIAL 持久化顺序编号目录节点:客户端与zookeeper断开连接后,该节点依旧存在,zookeeper给该节点名称顺序编号 3、EPHEMERAL 临时目录节点:客户端与zookeeper端开连接后,该节点被删除 4、EPHEMERAL_SEQUENTIAL 临时顺序编号目录节点:客户端与zookeeper端开连

weixin_44130094的博客 3014

怎样自己亲手搭建一个四比特加法器

如何用三极管搭建一个四比特加法器 一、前言 作为大一上学期第一个大作业,最终还是拖到了冬学期的第八周,从第七周的周六开始,一直到第八周周五上午课上展示,中间连续熬了好几天的夜,另外,白天凡是有时间都用在研究它了,最终大约是用了30个小时,完成了这个四比特加法器的“从零到一”。 最终,小组得分92,个人分数100(贡献比35%),也不枉自己投入的心血 二、器材 电阻 1 包(10kΩ×100,1kΩ×50) 三极管 1 包(9013×100,LED×6) 跳线 3 短 1.5 长 电源 1 个 USB 线

qq_34771124的博客 1万+

西门子RS485自由口通信Modbus RTU 通信协议

部分西门子的RS485模块不能使用西门子自带的Modbus RTU通信指令,需要通过自己拼接、发送、接收和解析报文完成Modbus RTU通信。通过多次尝试完成该功能: #R_TRIG_Instance(CLK := #触发, Q => #触发上升沿); IF #触发上升沿 THEN // 触发后先将读取完成复位 #读写完成 := 0; END_IF; CASE #功能码 OF 1: // 线圈状态读取 ; 2:

qq_20792765的博客 1万+

Zk监听机制入门和节点属性信息

zk监听主要是监听:节点创建,节点删除,节点改变、子节点改变 我这里用node-1和node-3同时连接node-1 zk客户端监听功能一般步骤: 1、客户端设置监听事件 命令:get 节点 watch (node-1上操作) 2、执行监听 命令:set 节点 改变内容 (node-3上操作) 3、触发事件、回调事件给客户端 node-1上...

weixin_44654375的博客 1443

matlab 用m_map画地形水深图

clear,clc %投影 m_proj('albers equal-area','lat',[5 43],'long',[105 125],'rect','on'); %加载水深文件 [CS,CH]=m_etopo2('contourf',[-7000:500:3000],'edgecolor','none'); %绘制高分辨率陆地和海岸线 m_gshhs_h('patch',[0.1 0.9 ...

qq_44913577的博客 9513

Zookeeper的监听机制及原理解析

ZK在现在之所以能非常好用,它便捷的监听功能是很重要的,本次我们就以监听为题,分析一下ZK的监听是怎么设计和管理的,并在文末写了个demo验证我们的所学

战斧的博客 1万+

LeetCode 热题 100 回顾

力扣最受刷题发烧友欢迎的 100 道题 LeetCode 热题 100 : 题目回顾、解题思路、复杂度分析、代码实现、验证算法

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 9万+

GEE土地分类:土地分类精度评定和分类后影像进行(Kmeans,Gmeans,SNIC (Simple Non-Iterative Clustering)聚类分析和滤波(focal_mode)分析

使用聚类分析和滤波分析来进一步处理土地分类后的影像数据。聚类分析可以帮助您识别影像中的相似区域。您可以使用聚类算法,如K均值聚类或层次聚类,将像素分组到具有相似像素值的群集中。这可以帮助您更好地理解图像中的空间模式和结构,并可能揭示有用的信息。滤波分析可以帮助您平滑图像并去除噪声。常见的滤波器包括中值滤波器和高斯滤波器。这些滤波器可以帮助您消除图像中的随机变化,并使其更易于解释和分析。

此星光明博客 2516

Zookeeper的watcher机制

通过给zookeeper节点添加监听事件,当事件触发时会通知应用程序,如通过get/stat -w监听当前节点信息变更,当更新节点或者删除节点时会触发事件;通过ls -w监听当前节点的子节点数量信息变更,当添加或者移除当前节点子节点时会触发事件。 事件的触发是一次性的,触发后需要再次注册才能继续监听事件。 一 get/stat监听节点变更 # 创建测试节点 [zk: localhost:2181(CONNECTED) 20] create /test 1 Created /test # 注册监听

男儿当自强 546

【华为OD机试真题】4、字符统计及重排 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数, 并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。 如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前

KJ.JK 3289

本地java【动态监听】zk集群节点变化

【README】搭建zk cluster, refer 2https://blog.youkuaiyun.com/PacosonSWJTU/article/details/111404364 【1】 动态监听代码,需要写在 建立zk 连接的watcher 实现类里,如下: public class TestZK { /** * zk server 连接串 */ private String connectString = "192.168.163.201:2181,192.168.163...

PacosonSWJTU的博客 647

RT-DETR改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣本专栏已更新260多种不同的改进方法,所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行。2️⃣所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,紧跟学术热点,适应不同的任务场景。3️⃣团队内发表数篇SCI论文,熟悉完整的发表流程,订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容。4️⃣专栏内容会持续更新,最近更新时间:2024-12-4。项目介绍在大家购买专栏后,加入学习

Limiiiing的博客 2万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Zookeeper循环注册监听器watcher

Zookeeper中的监听器只执行一次,需要在watcher类中重写process方法,以达到重复注册监听器的效果 MyWatcher.java package watch; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.Watcher.Event

weixin_44718747的博客 866

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Zookeeper----watch机制核心(Watcher&&ZK状态&&事件类型)

Watcher&&ZK状态&&事件类型 watch机制测试代码 package bhz.zookeeper.watcher; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteg...

Miracle_Gaaral的博客 429

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Hadoop高可用:ZK选举机制揭秘

Hadoop通过ZooKeeper实现高可用Leader选举机制,确保关键组件NameNode和ResourceManager的主备切换。核心流程包括:1)初始化时各节点竞争创建ZK临时节点,成功者成为Active节点;2)Active节点故障时临时节点消失,备节点通过Watcher监听立即触发新一轮选举;3)采用Epoch、ZXID、MyID三级优先级确保选举有序性。该机制实现了秒级故障转移,通过临时节点和监听机制有效防止脑裂,保证同一时刻只有一个Active节点提供服务,确保HDFS和YARN服务持续可

2601_95450218的博客 384

Zookeeper 分布式锁

随着公司业务的发展,单机应用已经无法支撑现有的用户量,之前采用和Lock锁已经无法满足分布式系统的要求。我们应用程序目前都会运行120台,节假日会扩容至240台,属于多JVM环境。所以需要搭建一套独立的zk集群或者Redisson集群提供分布式锁的功能。

程序猿进阶 1403

zookeeper 实现 配置管理(Configuration Management)

1  Create a Demo Class and run import java.io.IOException; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org

Maya2000的专栏 2645

Zookeeper 注册中心:Broker 上下线时发送端/消费端如何及时更新地址

Zookeeper 注册中心:Broker 上下线时发送端/消费端如何及时更新地址

weixin_43924419的博客 165

zookeeper watch机制核心讲解

zookeepere有watch事件,是一次性触发的,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher。同样,其watcher是监听数据发送了某些变化,那就一定会有对应的事件类型,和状态类型。事件类型:(znode节点相关的)状态类型:(是跟客户端实例相关的)

Ethe的博客 521

Kafka架构-ZooKeeper在Kafka中

摘要:Kafka集群依赖Zookeeper选举Controller Leader(如broker1),负责管理集群状态、分区副本分配和Leader选举。各broker启动时在ZK注册临时节点,Controller通过监听节点变化感知broker状态。若Controller宕机(如broker3),剩余broker会重新竞争注册/controller节点,成功者成为新Controller(controllerepoch+1标识变更次数),确保集群持续运作。整个过程体现了Kafka通过ZK实现的高可用机制。

小楼一夜听春雨,深巷明朝卖杏花 1397

zookeeper基本概念(1)

ZK集群角色 Leader,Follower,Observer Leader服务器是整个zookeeper集群工作机制中的核心 Follower服务器是zookeeper集群状态的跟随者 Observer服务器充当一个观察者的角色 Leader,Follower 设计模式 Observer 观察者设计模式 ZK会话 会话是指客户端和ZK服务器的连接,ZK中的会话叫Session,客...

若疆~赤云 306

ZooKeeper 分布式锁:强一致性下的“排队”哲学

“如果你在为钱打交道,请忘掉 Redis 的速度,拥抱 ZooKeeper 的稳重。在一致性面前,性能是可以妥协的,但数据的准确性是底线。” "ZK 锁的本质不是‘抢’,而是‘排队’。它用短暂的等待,换取了绝对的秩序。在分布式系统的混乱中,秩序是最昂贵的奢侈品。” “不要试图用 ZK 抗高并发。ZK 是用来保命的,不是用来冲刺的。让它做最后的守门员,而不是冲锋的前锋。”

天生我材必有用,千金散尽还复来。 419

【项目经验】Spring Boot + Dubbo + ZooKeeper + Guns

提问:Spring Boot + Spring Cloud 和 Spring Boot + Dubbo + ZooKeeper有什么区别? Spring Boot + Spring Cloud:组件多,功能完备; Spring Boot + Dubbo + ZooKeeper:组件少,非能非完备; Dubbo在2019年还算RPC通信框架,还不算是微服务架构解决方案; 而Spring Clou...

IN THE ZONE 1753
上一篇: 1-​​Zookeeper 基本API使用
下一篇: Java API操作节点
liuhehe321
博客等级 码龄10年 105粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值