`
bit1129
  • 浏览: 1069964 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[Zookeeper学习笔记之三]Zookeeper会话超时机制

 
阅读更多

首先,会话超时是由Zookeeper服务端通知客户端会话已经超时,客户端不能自行决定会话已经超时,不过客户端可以通过调用Zookeeper.close()主动的发起会话结束请求,如下的代码输出内容

Created /zoo-739160015

CONNECTED
CONNECTED

.............
CONNECTED
CONNECTED

CONNECTED
CLOSED
CLOSED

 

上述代码是针对standalone mode下的zookeeper server运行的,虽然代码中有意的让会话超时,可实际上会话并没有超时,一直处于CONNECTED状态,服务器端的znode /zoo-739160015也一直存在,现在大概了解Zookeeper有会话超时自动重建的功能,是否与此有关,待验证后再来更新这段

 

import org.apache.zookeeper.*;

import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadLocalRandom;

public class CreateGroup implements Watcher {
    private static final int SESSION_TIMEOUT = 3000;
    private volatile static boolean shutdown;
    private ZooKeeper zk;
    private CountDownLatch connectedSignal = new CountDownLatch(1);

    public void connect(String hosts) throws IOException, InterruptedException {
        zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this);
        connectedSignal.await();
    }

    @Override
    public void process(WatchedEvent event) { // Watcher interface
        if (event.getState() == Watcher.Event.KeeperState.SyncConnected) {
            connectedSignal.countDown();
        }
    }

    public void create(String groupName) throws KeeperException,
            InterruptedException {
        String path = "/" + groupName;
        String createdPath = zk.create(path, null/*data*/, ZooDefs.Ids.OPEN_ACL_UNSAFE,
                CreateMode.EPHEMERAL); //The znode will be deleted upon the session is closed.
        System.out.println("Created " + createdPath);
    }

    public void close() throws InterruptedException {
        zk.close();
    }

    public static void main(String[] args) throws Exception {
        final CreateGroup createGroup = new CreateGroup();
        String groupName = "zoo" + ThreadLocalRandom.current().nextInt();
        createGroup.connect(Host.HOST);
        createGroup.create(groupName);
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(!shutdown) {
                   ZooKeeper.States s =  createGroup.zk.getState();
                    System.out.println(s);
                    try {
                        Thread.sleep(5*1000); //Session should be timeout since the session timeout is set to 3 ms
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
        Thread.sleep(60*1000);
        createGroup.close();
        Thread.sleep(10*1000);
        shutdown = true;
    }
}

 

Zookeeper会话管理的特性:

1.在一个会话过程中,如果客户端发现zookeeper server已经不可达,zookeeper client library会自动寻找zookeeper集群server中的另一个server,然后建立会话,因此,即使有台zookeeper server不可用,会话状态仍然可以继续

2.Zookeeper会话具有请求顺序性保证,同一个会话的多次请求会排队,zookeeper按照FIFO的顺序进行处理客户端的请求,例如一个会话中,客户端连续发起修改znode和删除znode的请求,那么在zookeeper服务器端,zookeeper会先更新后删除,而不会先删除后更新

3.如果客户端一个Zookeeper实例对应多个会话,那么,2提到的顺序性将不能保证。何为一个zookeeper对应多个会话?目前不明白,先把书中的原话放到这里

 

Sessions offer order guarantees, which means that requests in a session are executed in FIFO (first in, first out) order. Typically, a client has only a single session open, so its requests are all executed in FIFO order. If a client has multiple concurrent sessions, FIFO ordering is not necessarily preserved across the sessions. Consecutive sessions of the same client, even if they don’t overlap in time, also do not necessarily preserve FIFO order. Here is how it can happen in this case:

  1. Client establishes a session and makes two consecutive asynchronous calls to create /tasks and /workers.
  2. First session expires.
  3. Client establishes another session and makes an asynchronous call to create /assign.

In this sequence of calls, it is possible that only /tasks and /assign have been created, which preserves FIFO ordering for the first session but violates it across sessions.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
6 楼 bit1129 2014-08-09  
swingseagull 写道
开篇博客有点让人摸不着头脑哦,一上来就是笔记三,接下来那篇怎么又成笔记二了 

第一次听说zk,完全不懂它是个什么东东。对博主的第三点有关多session的说明,根据英文连猜带蒙,意思应该是一般情况下,客户端都只有一个session,但也有可能同时建立多个session,或是连续建立多个session的情况



等我弄清楚了再来整理,到时就有头脑了。。。zk是分布式系统的标配了,作为集群的协调管理服务器
5 楼 swingseagull 2014-08-09  
开篇博客有点让人摸不着头脑哦,一上来就是笔记三,接下来那篇怎么又成笔记二了 

第一次听说zk,完全不懂它是个什么东东。对博主的第三点有关多session的说明,根据英文连猜带蒙,意思应该是一般情况下,客户端都只有一个session,但也有可能同时建立多个session,或是连续建立多个session的情况
4 楼 bit1129 2014-07-31  
josico 写道
麻烦着重讲一下 zk主要用在哪 哪样的实例场景下会使用 为什么zk现在可以基本算作集群的标配 有些我还不是太明白 请赐教了  哈哈
bit1129 写道
josico 写道
麻烦问一下  zookeeper 学习笔记 一  在哪


学习笔记一还在草稿箱里,呵呵。。还没写好,关于分布式的一些基础




呵呵,好,这个后面会总结,:-)
3 楼 josico 2014-07-31  
麻烦着重讲一下 zk主要用在哪 哪样的实例场景下会使用 为什么zk现在可以基本算作集群的标配 有些我还不是太明白 请赐教了  哈哈
bit1129 写道
josico 写道
麻烦问一下  zookeeper 学习笔记 一  在哪


学习笔记一还在草稿箱里,呵呵。。还没写好,关于分布式的一些基础

2 楼 bit1129 2014-07-30  
josico 写道
麻烦问一下  zookeeper 学习笔记 一  在哪


学习笔记一还在草稿箱里,呵呵。。还没写好,关于分布式的一些基础
1 楼 josico 2014-07-30  
麻烦问一下  zookeeper 学习笔记 一  在哪

相关推荐

    ZooKeeper会话超时以及重连机制.pdf

    ### ZooKeeper会话超时及重连机制详解 #### 一、ZooKeeper会话超时机制 在分布式系统中,ZooKeeper作为一款流行的协调服务框架,为开发者提供了高效且可靠的协调服务。其中,会话管理是ZooKeeper的重要组成部分之...

    zookeeper学习笔记

    ### Zookeeper 学习笔记 #### 一、Zookeeper 简介与安装配置 **Zookeeper** 是一个分布式协调服务框架,它提供了一种高效可靠的机制来维护集群中的配置信息、命名服务以及提供分布式锁等功能,使得开发人员能够...

    Zookeeper学习笔记.pdf

    此外,Watch机制是Zookeeper的关键特性,客户端可以对节点设置Watch,当节点状态改变时,Zookeeper会向客户端发送一次性通知,从而实现事件驱动的通信。 Zookeeper的时间管理是通过Zxid(事务ID)来实现的,每个...

    2021尚硅谷技术之Zookeeper笔记

    在2021年的尚硅谷技术分享中,这些笔记涵盖了ZooKeeper的核心概念、安装配置、数据模型、会话与 watches、集群搭建以及常见应用场景。 **1. ZooKeeper核心概念** ZooKeeper的核心概念包括ZNode、ACL(访问控制列表...

    Zookeeper学习笔记.docx

    ZooKeeper 学习笔记 ZooKeeper 是一个开源的分布式协调服务,由 Hadoop 的创始人 Doug Cutting 等人开发。它为分布式应用提供了一个高效、可靠的协调机制,帮助开发者快速构建高可用、可扩展的分布式系统。 ...

    Zookeeper学习笔记

    【Zookeeper学习笔记】 Zookeeper是一个分布式协调服务,它的核心目标是简化分布式环境下的数据管理与系统协调。作为Apache Hadoop和HBase的重要组件,Zookeeper提供了简单的原语集,支持分布式应用程序之间的通信...

    基于Java语言的Zookeeper学习笔记设计源码

    该项目为基于Java语言的Zookeeper学习笔记设计源码,总计包含20个文件,具体构成包括15个Java源文件、3个PNG图片文件以及1个Markdown文件。此外,项目还包含1个XML配置文件,适用于学习和实践Zookeeper相关知识。

    ZooKeeper学习笔记

    - **会话管理**:客户端与ZooKeeper服务器之间的连接称为会话。每次客户端连接到一个新的服务器时,都会创建一个新的会话。会话的生命周期决定了客户端能够访问ZooKeeper服务的时间范围。 #### 集群架构 - **选举...

    zookeeper学习笔记.pptx

    本文适合但不限于软件开发人员阅读。本文档能够使阅读者对zookeeper有一个宏观且全面的了解,内容主要包含zookeeper架构、数据模型、读写及工作原理、典型应用场景、指令汇总等,

    hadoop,hbase,zookeeper安装笔记

    hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记

    zookeeper客户端会话频繁超时解决方案 broker无法连接客户端触发自动关闭解决方案

    记录一次自己碰到的问题, 亲测有效 zookeeper客户端会话频繁超时解决方案 broker无法连接客户端触发自动关闭解决方案 zookeeper客户端会话频繁超时解决方案 broker无法连接客户端触发自动关闭解决方案

    Zookeeper学习资源和笔记(附代码)

    Zookeeper是Apache Hadoop项目下的一个子项目,它是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现。Zookeeper的设计目标是为分布式应用提供一致性服务,它主要用来解决分布式...

    zookeeper笔记

    ### Zookeeper概述 Zookeeper是一种分布式协调服务框架,它的核心任务是为用户的分布式应用程序提供一系列的协调...无论是从其提供的服务还是从其内部的机制来看,Zookeeper都是值得深入学习和掌握的重要技术之一。

    zookeeper完整学习笔记

    Zookeeper 是分布式系统中不可或缺的工具,它通过强大的协调和同步机制解决了许多分布式环境中的难题。了解并掌握Zookeeper 的基本概念、术语、架构以及API的使用,对于开发和维护分布式应用至关重要。特别是在...

    zookeeper一站式学习资料

    会话是客户端与Zookeeper服务器之间的通信链接,会话期间可以发送请求并接收响应,同时支持超时和重新连接机制。Watcher是Zookeeper的事件监听机制,允许客户端注册对特定Znode的变更或事件监听,一旦发生变化,...

    zookeeper笔记.pdf

    ZooKeeper笔记 ZooKeeper是一个分布式应用程序协调服务,提供了一个树形命名空间,用于存储和管理数据。 ZooKeeper主要用于分布式应用程序的配置管理、名称服务、分布式同步和提供组服务等。 ZooKeeper命令 * ...

    zookeeper学习之三(Curator客户端)

    ZooKeeper的大多数操作默认都是异步的,而Curator通过提供回调机制简化了异步调用的处理。开发者可以注册监听器来接收操作完成的通知,或者使用Future对象进行阻塞等待。 4. ** Recipes**: Curator提供了一系列...

    zookeeper笔记和搭建

    资源名称:zookeeper笔记和搭建 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    ZooKeeper笔记.pdf

    - **Watcher机制**:Watcher是一种事件监听机制,可以在ZNode变化时收到通知,实现对Zookeeper的实时监控。 总结来说,Zookeeper作为一个高可用的分布式协调服务,通过其强大的数据模型和API,为分布式系统提供了...

    zookeeper资料

    “zookeeper学习笔记.vsdx”可能是一个Visio图表,用于可视化Zookeeper的数据结构、工作流程或架构;而“zookeeper-trunk”可能是一个源码仓库,包含Zookeeper的源代码,适合深入理解其内部机制和进行二次开发。 ...

Global site tag (gtag.js) - Google Analytics