ZK

分布式锁

懵懂的女人 提交于 2020-02-10 18:29:04
https://www.cnblogs.com/austinspark-jessylu/p/8043726.html 分布式锁的几种实现方式 目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。 在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。有的时候,我们需要保证一个方法在同一时间内只能被同一个线程执行。在单机环境中,Java中其实提供了很多并发处理相关的API,但是这些API在分布式场景中就无能为力了。也就是说单纯的Java Api并不能提供分布式锁的能力。所以针对分布式锁的实现目前有多种方案。 针对分布式锁的实现,目前比较常用的有以下几种方案: 基于数据库实现分布式锁 基于缓存(redis,memcached,tair)实现分布式锁 基于Zookeeper实现分布式锁

springcloud之服务注册与发现(zookeeper注册中心)-Finchley.SR2版

青春壹個敷衍的年華 提交于 2020-02-08 05:32:22
新年第一篇博文,接着和大家分享springcloud相关内容;本次主要内容是使用cloud结合zookeeper作为注册中心来搭建服务调用,前面几篇文章有涉及到另外的eureka作为注册中心,有兴趣的朋友会回顾下上几篇文章。 springcloud版本说明 docker快速启动一个zookeeper服务 zk-server服务提供者 zk-client服务消费者 启动多个zk-server服务提供者 git源码地址: https://github.com/shenniubuxing3/springcloud-Finchley.SR2 springcloud版本说明 由于市面上其版本比较多,版本不一可能造成了读者尝试时版本问题,所以这里指明当前作者写文章时使用的cloud版本 springboot版本: 1 <parent> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-parent</artifactId> 4 <version>2.0.7.RELEASE</version> 5 <relativePath/> <!-- lookup parent from repository --> 6 </parent> springcloud版本: 1 <properties>

ZooKeeper原理解析

♀尐吖头ヾ 提交于 2020-02-07 11:16:27
文章目录 1.ZooKeeper介绍 1.1文件系统 1.2监听机制 1.3监听工作原理 1.4ZooKeeper典型应用场景 1.4.1命名服务 1.4.2配置管理 1.4.3集群管理 1.4.4分布式锁 1.4.5队列管理 2.ZooKeeper特点 3.Zookeeper原理解析 3.1集群角色描述 3.2Paxos 算法概述(ZAB 协议) 3.2.1ZooKeeper的全新集群选主 3.2.2ZooKeeper的非全新集群选主 3.3数据同步 3.4ZooKeeper工作流程 3.4.4Leader工作流程 3.4.2Follower工作流程 3.4.3Observer工作流程 1.ZooKeeper介绍 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现。它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如 分布式同步,配置管理,集群管理,命名管理,队列管理 。它被设计为易于编程,使用文 件系统目录树作为数据模型。服务端跑在 java 上,提供 java 和 C 的客户端 API。 1.1文件系统 ZooKeeper 的命名空间就是 ZooKeeper 应用的文件系统,它和 linux 的文件系统很像,也是树 状,这样就可以确定每个路径都是唯一的,对于命名空间的操作必须都是绝对路径操作

搭建zookeeper集群,无废话

*爱你&永不变心* 提交于 2020-02-07 00:40:43
1、集群规划 本次集群搭建采用伪集群,即在一台主机上分别使用三个端口进行搭建,接下来就不多废话,直接上步骤 文件夹 主机ip 端口 zk1 192.168.146.21 2181 zk2 192.168.146.21 2182 zk3 192.168.146.21 2183 2、复制三份zookeeper包 3、创建数据目录和日志目录 mkdir zk1 / data zk1 / log mkdir zk2 / data zk2 / log mkdir zk3 / data zk3 / log 4、创建myid文件 vi zk1 / data / myid 文件内容为1 vi zk2 / data / myid 文件内容为2 vi zk3 / data / myid 文件内容为3 如下所示 5、 修改配置文件 zk1 数据目录 # ookeeper的数据存放地址 dataDir= / home / zk - mq / cluster / zk - cluster / zk1 / data # zookeeper的日志目录 dataLogDir= / home / zk - mq / cluster / zk - cluster / zk1 / log # 连接的端口号 clientPort=2181 zk2数据目录 # ookeeper的数据存放地址 dataDir= / home

ZooKeeper面试题

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-06 21:35:05
前言 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 面试题 ZooKeeper 是什么? ZooKeeper 提供了什么? Zookeeper 文件系统 ZAB 协议? 四种类型的数据节点 Znode Zookeeper Watcher 机制 -- 数据变更通知 客户端注册 Watcher 实现 服务端处理 Watcher 实现 客户端回调 Watcher ACL 权限控制机制 Chroot 特性 会话管理 服务器角色 Zookeeper 下 Server 工作状态 数据同步 zookeeper 是如何保证事务的顺序一致性的? 分布式集群中为什么会有 Master? zk 节点宕机如何处理? zookeeper 负载均衡和 nginx 负载均衡区别 Zookeeper 有哪几种几种部署模式? 集群最少要几台机器,集群规则是怎样的? 集群支持动态添加机器吗? Zookeeper 对节点的 watch 监听通知是永久的吗?为什么不是永久的? Zookeeper 的 java 客户端都有哪些? chubby 是什么,和 zookeeper 比你怎么看?

ZooKeeper的shell操作命令

﹥>﹥吖頭↗ 提交于 2020-02-01 03:53:47
ZooKeeper的shell操作命令 使用 zkServer.sh 启动ZooKeeper服务器后,接下来就可以使用 zkCli.sh 脚本启动ZooKeeper客户端来连接ZooKeeper服务器;Windows对应的是 zkServer.cmd 和 zkCli.cmd 。 (1)使用 help 命令可查看ZooKeeper的shell操作可用的命令,如下: [ zk: localhost:2181 ( CONNECTED ) 4 ] 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

ZooKeeper学习笔记及应用场景梳理

守給你的承諾、 提交于 2020-01-31 23:53:38
官网文档地址: https://zookeeper.apache.org/doc/r3.5.4-beta/zookeeperOver.html 概述 Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架, 它负责存储和管理大家都关心的数据, 然后接受观察者的注册, 一旦这些数据的状态发生变化, Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应 , 从而实现集群中类似Master/Slave管理模式。 Zookeeper 是一个分布式的服务框架,主要用来 解决分布式集群中应用系统的协调和一致性问题 ,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。如:统一命名服务、状态同步服务、集群管理、分布式应用配置管理等。 它能够为分布式应用提供高性能和可靠地协调服务,使用ZooKeeper可以大大简化分布式协调服务的实现,为开发分布式应用极大地降低了成本。协同服务很难正确运行,经常出现竞争危害和死锁。ZooKeeper 的目的就是降低协同服务实现与维护的成本。 架构及原理 集群架构 Zookeeper集群是由一组Server节点组成,这一组Server节点中存在一个角色为Leader的节点

spark streaming读取kakfka数据手动维护offset

白昼怎懂夜的黑 提交于 2020-01-30 23:41:13
在spark streaming读取kafka的数据中,spark streaming提供了两个接口读取kafka中的数据,分别是KafkaUtils.createDstream,KafkaUtils.createDirectStream,前者会自动把offset更新到zk中,默认会丢数据,效率低,后者不会经过zk,效率更高,需要自己手动维护offse,通过维护护offset写到zk中,保障数据零丢失,只处理一次,下面来看看KafkaUtils.createDirectStream的使用,我把zk的端口改成了9999,防止和kakfa自带的zk的端口产生冲突,下面我写了一些测试代码,经自己测试数据没任何问题,即使spark streaming挂了 ,另一方往topic中写数据,下次启动streaming程序也能读取,做到数据零丢失,不同的group.id下只读取一次,看看下面代码吧(代码是自己查看kafka中自带的接口和一些其他的资料组合而成,简单的写了一些,参数没写成配置) 来源: https://www.cnblogs.com/chong-zuo3322/p/12244342.html

Zookeeper源码解析:3、zk数据同步流程

折月煮酒 提交于 2020-01-29 20:48:06
接着上篇 选举流程 。当zk选举成功后,zk会进行(Leader-Follower)数据同步,数据同步成功后,整个集群才开始正常运作。这篇我们就来分析下数据同步流程。 首先我们还是回到org.apache.zookeeper.server.quorum.QuorumPeer的run方法为主入口 @Override public void run ( ) { // ....省略一些无关紧要的代码 try { /* * 主循环 */ while ( running ) { switch ( getPeerState ( ) ) { // 根据zk的状态,执行对应的逻辑 case LOOKING : // LOOKING,会触发选举逻辑,这个我们上篇已经说过了。 LOG . info ( "LOOKING" ) ; // ... 省略一些无关紧要的代码 /* * 当选举结束后。 * 会然后break跳出switch,然后会继续循环,根据选举后的状态 * 执行对应角色的逻辑 */ break ; case OBSERVING : // OBSERVING,Observer需要执行的逻辑。我们主要说Leader、Follower // ... 省略一些无关紧要的代码 break ; case FOLLOWING : // FOLLOWING,Follower需要执行的逻辑 try { LOG

java连接ZK的基本操作

走远了吗. 提交于 2020-01-29 06:44:21
连接ZK,并进行基本的操作 package com ; import java . util . List ; import java . util . concurrent . CountDownLatch ; import org . apache . zookeeper . CreateMode ; import org . apache . zookeeper . KeeperException ; import org . apache . zookeeper . WatchedEvent ; import org . apache . zookeeper . Watcher ; import org . apache . zookeeper . Watcher . Event . KeeperState ; import org . apache . zookeeper . ZooDefs . Ids ; import org . apache . zookeeper . ZooKeeper ; import org . apache . zookeeper . data . Stat ; public class BaseZookeeper implements Watcher { private ZooKeeper zookeeper ; /** * 超时时间 */