zookeeper

zookeeper是松散耦合的分布式系统中粗粒度锁以及可靠性存储的系统,具有保管数据、提供监听等功能,存储的容量不高,具有开源、高效的、可协同工作的特点,其数据模型具有命名空间、与标准文件系统相似、以/为间隔的路径名序列组成、只有绝对路径;每个节点自身的信息包含了数据、数据长度、创建时间、修改时间等信息,具有文件,路径双重特点。

zookeeper的结构

zookeeper的三种节点:永久性节点、临时节点、顺序节点。

永久节点(persistent nodes):除非client显示删除,否则一直存在,create  默认创建

临时节点(ephemeral nodes):仅在创建该节点client保持连接期间有效,一旦连接丢失,zookeeper会自动删除该节点 ,create -e

顺序节点(sequence nodes):client在创建该节点时,zookeeper会自动在节点路径末尾添加递增序号,这种类型是实现分布式锁、分布式queue(队列)等特殊功能的关键。临时顺序节点【create -s -e】      or      临时永久节点【create -s】

watch机制:客户端会被动收到通知和请求,节点被删或者修改信息会被推送到client。

一、zookeeper的应用场景:1.服务器启动的时候向zookeeper进行注册;2.客户端从zookeeper查询访问的是哪台服务器;3.按照zookeeper给定的服务器进行访问。

zookeeper的选服务器

二、zookeeper实现高可用,选NN(namenode)


HA选主

当client想要去HDFS拿文件的时候(Hadoop fs -cat等操作),zookeeper创建临时顺序节点,zookeeper会选择一个节点作为active节点,其他节点是standby状态,假设目前active挂掉,standby节点立刻接手成为新的active节点,原先的active节点重启回来之后成为standby节点,在zookeeper中,它的命名为/nn00003,之后假如新的active节点挂掉,新的standby节点再次变为active,再次循环上一个步骤。

zookeeper有个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。也就是说如果有2个zookeeper节点,那么只要有1个死了zookeeper就不能用了,因为1没有过半,所以2个zookeeper节点的死亡容忍度为0;同理,要是有3个zookeeper节点,一个死了,还剩下2个正常的,过半了,所以3个zookeeper的容忍度为1;同理你多列举几个:2->0;3->1;4->1;5->2;6->2会发现一个规律,2n和2n-1的容忍度是一样的,都是n-1,所以为了更加高效,何必增加那一个不必要的zookeeper呢。所以节点数是单数,另外在选主中,被选的新节点按照命名最小的来做主,命名按照顺序命名,例如:001、002、003、004...   被重新激活的节点不会再次被命名为小的数字。

三、配置管理

server作为跑任务的主体,它们的配置有时候需要修改,但是一台台去修改会很麻烦,这个时候用zookeeper来监听他们的配置,一旦他们的配置信息有变动,变动的消息会立刻被推送到zookeeper中,届时可以及时做出修改。

配置监听

zookeeper查看offset:

1、consumer指定groupid:

./bin/kafka-console-consumer.sh --zookeeper master:2181 --topic badou --consumer-property group.id=group_test --from-beginning

2、查看consumer的offset和具体数据堆积情况:

./kafka-consumer-offset-checker.sh --zookeeper master:2181 --topic badou --group group_test --broker-info

3、zookeeper查看中的consumers:

ls /consumers

4、zookeeper查看offset:

get /consumers/group_test/offsets/badou/0

你可能感兴趣的:(zookeeper)