ZK

kafka_2.12-2.4.0安装

只愿长相守 提交于 2020-01-29 00:29:33
在进行kafka集群搭建前需要准备环境: 1.jdk的本版 jdk8(zk,kafka官网文档有要求) 2.kafka版本kafka_2.12-2.4.0 ( 如果为其他本版,请查看对应的libs下对应的 zk的版本,本版不一致可能会导致环境问题 ) 3.zk版本 zookeeper-3.5.6(源码方式,不喜欢看的绕过,麻烦尊重一下文章发表者,毕竟你要是撸出来了也就用不着看这个文章;不足之处敬请指正待后续更改) 4.maven环境(zookeeper-3.5.6使用,打包一下,不然启动不了;maven镜像设置, 报错解决办法文中有描述 ,此文超长超臭,请原谅我这个中文占五渣的!!!!!!) 5.虚拟机上建的服务器列表规划(本文只用三个,集群可参考zk官网) #####################001软件版本(部分去掉前缀)##################### [root@localhost apps]# ll 总用量 189612 drwxr-xr-x. 6 root root 99 1月 18 08:03 apache-maven-3.6.3 drwxr-xr-x. 7 10 143 245 10月 5 06:13 jdk1.8.0_231 -rw-r--r--. 1 root root 194151339 1月 12 03:17 jdk-8u231-linux

zookeeper都有哪些使用场景

倖福魔咒の 提交于 2020-01-29 00:05:36
(1)分布式协调 这个其实是zk很经典的一个用法,简单来说,就好比,你A系统发送个请求到mq,然后B系统消费之后处理了。那A系统如何知道B系统的处理结果?用zk就可以实现分布式系统之间的协调工作。A系统发送请求之后可以在zk上对某个节点的值注册个监听器,一旦B系统处理完了就修改zk那个节点的值,A立马就可以收到通知,完美解决。 (2)分布式锁 对某一个数据连续发出两个修改操作,两台机器同时收到了请求,但是只能一台机器先执行另外一个机器再执行。那么此时就可以使用zk分布式锁,一个机器接收到了请求之后先获取zk上的一把分布式锁,就是可以去创建一个znode,接着执行操作;然后另外一个机器也尝试去创建那个znode,结果发现自己创建不了,因为被别人创建了。。。。那只能等着,等第一个机器执行完了自己再执行。 (3)元数据/配置信息管理 zk可以用作很多系统的配置信息的管理,比如kafka、storm等等很多分布式系统都会选用zk来做一些元数据、配置信息的管理,包括dubbo注册中心不也支持zk么 (4)HA高可用性 这个应该是很常见的,比如hadoop、hdfs、yarn等很多大数据系统,都选择基于zk来开发HA高可用机制,就是一个重要进程一般会做主备两个,主进程挂了立马通过zk感知到切换到备用进程,主进程挂了,备进程顶上来。 来源: CSDN 作者: liuming690452074

【七张图】彻底讲清楚ZooKeeper分布式锁的实现原理

陌路散爱 提交于 2020-01-28 12:19:12
一、写在前面 之前写过一篇文章( 《拜托,面试请不要再问我Redis分布式锁的实现原理》 ),给大家说了一下Redisson这个开源框架是如何实现Redis分布式锁原理的,这篇文章再给大家聊一下ZooKeeper实现分布式锁的原理。 同理,我是直接基于比较常用的 Curator 这个开源框架,聊一下这个框架对ZooKeeper(以下简称zk)分布式锁的实现。 一般除了大公司是自行封装分布式锁框架之外,建议大家用这些开源框架封装好的分布式锁实现,这是一个比较快捷省事儿的方式。 二、ZooKeeper分布式锁机制 接下来我们一起来看看,多客户端获取及释放zk分布式锁的整个流程及背后的原理。 首先大家看看下面的图,如果现在有两个客户端一起要争抢zk上的一把分布式锁,会是个什么场景? 如果大家对zk还不太了解,建议先百度一下,快速了解一些基本概念,比如zk有哪些节点类型等等。 参见上图。zk里有一把锁,这个锁就是zk上的一个节点。然后呢,两个客户端都要来获取这个锁,具体是怎么来获取呢? 咱们就假设客户端A抢先一步,对zk发起了加分布式锁的请求,这个加锁请求是用到了zk中的一个特殊的概念,叫做 “临时顺序节点”。 简单来说,就是直接在"my_lock"这个锁节点下,创建一个顺序节点,这个顺序节点有zk内部自行维护的一个节点序号。 比如说,第一个客户端来搞一个顺序节点,zk内部会给起个名字叫做

分布式锁 原理及实现方式

纵饮孤独 提交于 2020-01-27 00:03:47
一、原理 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,就需要使用分布式锁了。 在平时的实际项目开发中,我们往往很少会去在意分布式锁,而是依赖于关系型数据库固有的排他性来实现不同进程之间的互斥,但大型分布式系统的性能瓶颈往往集中在数据库操作上。 在单机环境中,Java中其实提供了很多并发处理相关的API,但是这些API在分布式场景中就无能为力了。也就是说单纯的Java Api并不能提供分布式锁的能力。 其实秒杀类场景最主要的是执行秒杀操作要单线程的,提到单线程,肯定会想到synchronized关键字,但是他有两个致命缺点:1、无法做到细粒度控制,2、只适合单点不适用集群。 所以大多数项目只能采用分布式锁的实现方式。 针对分布式锁的实现,目前比较常用的有以下几种方案:     基于数据库实现分布式锁     基于缓存(redis,memcached,tair)实现分布式锁     基于Zookeeper实现分布式锁 分布式锁主要有基于缓存如redis、基于zookeeper、基于数据库的实现。 在分析这几种实现方案之前我们先来想一下,我们需要的分布式锁应该是怎么样的?(这里以方法锁为例,资源锁同理)     

四、zookeeper-3.4.5-cdh5.3.6集群搭建

可紊 提交于 2020-01-25 08:08:49
①为什么要搭建zookeeper以及zookeeper是什么? zookeeper是用来做分布式协调的技术框架。我们最后一个模块:实时计算模块,广告流量的实时计算模块,需要用到消息队列,消息队列采取kafka,kafka底层是zookeeper,所以我们必须把zookeeper搭起来。 ②拷贝文件 将zookeeper-3.4.5-cdh5.3.6.tar.gz用软件WinSCP拷贝到虚拟机sparkproject1的/usr/local/目录下面。 ③解压缩tar包文件 对zookeeper-3.4.5-cdh5.3.6.tar.gz文件进行解压缩,在sparkproject1虚拟机的/usr/local/目录下输入: tar -zxvf zookeeper-3.4.5-cdh5.3.6.tar.gz 然后在local目录下输入:ll,发现有zookeeper-3.4.5-cdh5.3.6.tar.gz文件和zookeeper-3.4.5-cdh5.3.6文件夹 删除zookeeper-3.4.5-cdh5.3.6.tar.gz文件,留下zookeeper-3.4.5-cdh5.3.6文件夹, 在local目录下输入:rm -rf zookeeper-3.4.5-cdh5.3.6.tar.gz 然后在输入:ll,发现只有zookeeper-3.4.5-cdh5.3.6文件夹

zookeeper集群部署

和自甴很熟 提交于 2020-01-24 14:39:38
1.Zookeeper概念简介: Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务 A、zookeeper是为别的分布式程序服务的 B、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务) C、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务…… D、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能: 管理(存储,读取)用户程序提交的数据; 并为用户程序提供数据节点监听服务; Zookeeper常用应用场景: 《见图》 Zookeeper集群的角色: Leader 和 follower(Observer) 只要集群中有半数以上节点存活,集群就能提供服务 2.zookeeper集群机制 半数机制:集群中半数以上机器存活,集群可用。 zookeeper适合装在奇数台机器上!!! 3.安装 3.1. 安装 3.1.1.机器部署 安装到3台虚拟机上 安装好JDK 3.1.2.上传 上传用工具。 3.1.3.解压 su – hadoop(切换到hadoop用户) tar -zxvf zookeeper-3.4.5.tar.gz(解压) 3.1.4.重命名 mv zookeeper-3.4.5 zookeeper(重命名文件夹zookeeper-3

zookeeper实现动态感知服务器上下线

浪子不回头ぞ 提交于 2020-01-23 09:35:27
  在实际的生产环境中我们一般都是集群环境部署的,同一个程序我们会部署在相同的几台服务器中,这时我们可以通过负载均衡服务器去调度,但是我们并不能很快速的获知哪台服务器挂掉了,这时我们就可以使用zookeeper来解决这个问题。 zookeeper的动态感知   动态感知其实利用的就是zookeeper的watch功能,我们先来看下常规的负载均衡服务器的结构 再来看下我们用zookeeper实现的结构 文字描述: 1.感知上线   当服务器启动的时候通过程序知道后会同时在zookeeper的servers节点下创建一个新的短暂有序节点来存储当前服务器的信息。客户端通过对servers节点的watch可以立马知道有新的服务器上线了 2.感知下线   当我们有个服务器下线后,对应的servers下的短暂有序节点会被删除,此时watch servers节点的客户端也能立马知道哪个服务器下线了,能够及时将访问列表中对应的服务器信息移除,从而实现及时感知服务器的变化。 代码实现 服务器端代码 package com.dpb.dynamic; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import

ZOOKEEPER基础教程

ⅰ亾dé卋堺 提交于 2020-01-21 14:56:45
Zookeeper概念简介: Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务 1、zookeeper是为别的分布式程序服务的(比如服务管理、心跳检查、配置信息管理) 2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务) 3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务…… 4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能: 管理(存储,读取)用户程序提交的数据; 并为用户程序提供数据节点监听服务; Zookeeper集群的角色: Leader 和 follower (Observer) 只要集群中有半数以上节点存活,集群就能提供服务 半数机制:集群中半数以上机器存活,集群可用。 zookeeper适合装在奇数台机器上!!! 3. 安装 安装到3台虚拟机上 安装好JDK 解压 tar -zxvf zookeeper-3.4.5.tar.gz(解压) 重命名 mv zookeeper-3.4.5 zookeeper(重命名文件夹zookeeper-3.4.5为zookeeper) 修改环境变量 vi /etc/profile(修改文件) 3、添加内容: export ZOOKEEPER_HOME=/home/apps

zk干货

夙愿已清 提交于 2020-01-20 16:46:50
zk是干什么的????? 分布式服务架构,解决统一命名,状态同步,集群管理,分布式应用配置项管理 为了减轻分布式应用程序所承担的协调任务,比如hadoop中多个NameNode节点,怎么管理与节点间信息同步,Hbase中master与slaver之间状态同步。 怎么干的??? 既然是为了减轻协调任务,产生了角色,有老大leader,跟随的follower,观察的observer leader,负责投票的发起和决议,更新系统参数状态。 follower,参与系统投票,接受返回客户端的请求 observer,接收写请求,转发给leader,不参与投票 为什么要选举????? 心跳机制:Leader与Follower利用PING来感知对方的是否存活,当Leader无法相应PING时,将重新发起Leader选举。即Leader over了。 怎么样才能成为Leader???? 成为Leader的必要条件: Leader要具有最高的zxid;当集群的规模是n时,集群中大多数的机器(至少n/2+1)得到响应并follow选出的Leader。 服务器的选举状态,分为looking,leading,following和observer looking:寻找leader状态,处于该状态需要进入选举流程 leading:leader状态,表明当前服务角色为leader following:跟随者状态

Hadoop + ZK + HBase 环境搭建

家住魔仙堡 提交于 2020-01-19 21:31:19
Hadoop 环境搭建 参考资料: http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/ClusterSetup.html http://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml 下载 2.4.1 bin 包, 解压好以后按照链接上配置各个配置文件, 启动时会遇到 "Unable to load realm info from SCDynamicStore " 的问题, 这个问题需要在 hadoop-env.sh 中加入如下配置(配置 HBase 的时候也会遇到这个问题, 使用同样的方法在 hbase-env.sh 中加入如下配置解决) hadoop-env.sh(hbase-env.sh) 配置, 增加 export JAVA_HOME="/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home" export HBASE_OPTS="