分布式日志分析系统构建实战(二)——ZooKeeper

在由kafka+storm搭建起来的日志分析系统中,ZooKeeper属于中流砥柱的作用。因此,在这里,先从实践的角度来介绍一下ZooKeeper以及相关的配置问题。

介绍

简而言之,ZooKeeper是用来为分布式系统提供一个统一的配置信息管理平台。在分布式系统的各个机器之间,都会有一些关键的节点信息需要暴露给其他机器,这样才能达到协作的效果。而使每个机器获取到相同的信息,这就是ZooKeeper的作用。

考虑一下有多个服务器的分布式系统,每台服务器都负责保存数据,在数据上执行操作。这样的潜在例子包括分布式搜索引擎、分布式构建系统或者已知的系统如Apache Hadoop。所有这些分布式系统的一个常见问题是,你如何在任一时间点确定哪些服务器活着并且在工作中。最重要的是,当面对这些分布式计算的难题,例如网络失败、带宽限制、可变延迟连接、安全问题以及任何网络环境,甚至跨多个数据中心时可能发生的错误时,你如何可靠地做这些事。这些正是Apache ZooKeeper所关注的问题,它是一个快速、高可用、容错、分布式的协调服务。你可以使用ZooKeeper构建可靠的、分布式的数据结构,用于群组成员、领导人选举、协同工作流和配置服务,以及广义的分布式数据结构如锁、队列、屏障(Barrier)和锁存器(Latch)。许多知名且成功的项目依赖于ZooKeeper,其中包括HBase、Hadoop 2.0、Solr Cloud、Neo4J、Apache Blur(Incubating)和Accumulo。

ZooKeeper本身也是一个分布式架构,提供了可靠性的保证。在ZooKeeper的数据,会被备份到每一个机器中去。而在这些机器中,会通过选举,得到一个leader,其他所有机器则作为server,跟leader进行同步,保证数据一致。而每一个server则可以支持多个client同时进行连接,并且通过广播,将client读写的数据同步到所有的server中去。至于具体的同步原理,以及leader的选举机制,都是一个比较复杂的过程,我也不是特别理解,在此就不赘述了。

在ZooKeeper中,所有的信息以一种类似文件系统的树结构来存储(如下图所示)。不同的是,这个树的每一个节点(znode),既可以存放信息,也可以同时作为父节点,包含其他的子节点信息(类似文件系统中,一个路径既是文件又是文件夹)。另外,对于znode中的数据,所有的读写操作都是原子性的。即,每一次读都会读出所有的数据,每一次写都会覆盖所有数据,这样以来,确保了znode中数据的完整性。另外,ZooKeeper将所有的信息存放在内存当中,提高了吞吐量,减小了缓存。
http://zookeeper.apache.org/doc/trunk/zookeeperOver.html
总而言之,Zookeeper提供了一下几个特性:

  • 有序性: client提交的更新都会按照发送的顺序同步到Zookeeper
  • 原子性: 更新要么成功要么失败,不存在中间态(部分更新)
  • 一致性: 不论client连接到了哪个server,它所操作到的数据都是一样的
  • 可靠性: 只要更新成功,那么这次更新的数据会一直保留,直到被覆写
  • 实时性: 所有client得到数据都能保证是最新的(一定时间范围内)

配置

配置过程还是推荐官网的指南:http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html
http://zookeeper.apache.org/releases.html下好压缩包解压后,在zookeeper根目录下创建conf/zoo.cfg,其中包含
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
其中,dataDir的目录必须是一个已存在的空目录。clientPort建议保持默认的2181,因为其他大部分的使用到ZooKeeper的框架都会将默认使用这个端口。
文件创建好后,执行
bin/zkServer.sh start
就可以启动ZooKeeper了。启动完之后,可以执行
bin/zkCli.sh -server 127.0.0.1:2181`
然后体验一下ZooKeeper提供的文件系统式的存储空间。

小结

在Kafka中,ZooKeeper是一个基础,利用ZooKeeper可以存储producer和consumer的必要状态。而ZooKeeper作为一个易用性极高的配置信息存储系统,在各种分布式架构中都可以得到广泛的应用,因此,了解ZooKeeper的作用可以对分布式系统的搭建产生极大的帮助。

相关文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值