导语

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。

通俗来讲,ZooKeeper只是一个持久化存储工具。这个存储工提供了增删改查以外的一些分布式系统在进行通信时需要的基础特性,如具有父子关系的树形数据节点,节点临时性,节点顺序性,节点修改事件的发布订阅,zk集群高可用和强一致等等。这些特性就像是基础的加减乘除,开发人员利用zk的这些基础特性,与业务进行组合,可以实现诸多分布式系统需要的功能,如命名服务,分布式锁,分布式服务的动态发布的订阅等等。因此,zk的应用场景是丰富的,在分布式系统的业务开发过程中,只要我们有足够的想象力,总是能够利用那些加减乘除构建出我们需要的业务。所以说zk值得身处处处都是分布式的互联网时代的我们学习和掌握。掌握zk是当代java开发同学们必备的一个基础技能,就像是mysql和redis一样。

本文不会手把手教学zk的api,而是用一种俯视的姿态来理解zk。理解完了之后,写代码需要的就只有想象力和google了。真正做到了无招胜有招,不教api胜过教api。

ZK概述

首先,zk服务端是纯java实现,这一点就会让诸多java开发同学感到畏手畏脚,觉得zk的学习是不是要去瞅源码啊,那岂不是很难。这种先入为主的观念是错误的。除非你想到zk项目仓库提交代码做贡献,不然作为单纯使用者的你是不用去关注zk服务端的实现的。可以类比mysql,mysqld是c语系的实现,那么在日常工作使用中除了想要拔高学习,你有想过去看看它的源码吗?因此,和msyql一样,zk服务端对于我们普通开发人员来说其实是透明的,我们只需要在项目中集成zk的sdk也就是类似mysql 驱动,驱动利用传输层网络协议与服务端通信,而我们就可以利用驱动暴露的接口进行业务开发。

基于上面的假设,zk和mysql一样,都是提供持久化存储服务的工具,只是除了增删改查外各自提供的特性不同。那么接下来就很好理解了。

ZK安装运维

zk的安装运维不是本文的重点。这部分内容参考zookeeper安装即可。本质上来说其实就是配置部署一个java应用,这个应用可以集群部署用来提高可用性。至于集群间读写分离,数据同步等内容对于使用者来说是透明的,由zk集群实例依照zab协议自动进行。其中的实例角色如领导者,观察者,追随者在集群启动过程中自动选举产生。如无绝对必要,那就让子弹飞吧。

ZK客户端组成

和mysql一样,zk的客户端分为两个部分。一个是基于命令行的黑窗口。一个是zk连接驱动。zk是java实现,那么zk命令行的启动需要JRE。在zk的bin目录下,根据平台执行cli启动脚本即可打开命令行客户端,默认连接localhost。该客户端有许多命令,同时支持自动补全。这部分一般在调试阶段使用,用的也很少。详细

除此之外,就是用于和自己的项目集成的zk 驱动了。和msyql一样,虽然zk服务端是纯java实现,但是zk驱动提供了多种语言的实现,如python,c,java等,可以和多种语言生态的应用进行整合,利用tcp等传输层协议与服务端通信,提供操作zk的接口。mysql也如此,给各个语言生态的应用提供了驱动,与服务端通信,提供了操作mysql数据的接口。

本文主要讲解zk在java生态中的使用。

ZK驱动

Zookeeper从入门到删库跑路的更多相关文章

  1. SQL 从入门到 DBA 删库跑路

    SQL 从入门到 DBA 删库跑路 一.基础 人员信息表: ID 姓名 性别 出生 婚否 学历 工资 工会 35009449 孙xx 男 1978-2-17 未婚 中专 3000 TRUE 35000 ...

  2. Oracle删库跑路

    --10g R2 startup mount exclusive restrict; alter system enable restricted session; drop database; -- ...

  3. P5270 无论怎样神树大人都会删库跑路

    题目地址:P5270 无论怎样神树大人都会删库跑路 第一眼看上去是模拟,似乎是 \(O(n)\) 的 水题 信心满满的写完: #include <bits/stdc++.h> using ...

  4. 数据误操作,删库跑路?教你使用ApexSQLLog工具从 SQLServer日志恢复数据!

    前几天同事不小心误操作,将SQLServer库的一张表的一个状态字段给刷成了一个统一状态,由于是update执行所以原来的相关状态无法确定.发生这种事情的时候我的小伙伴背后 一凉,估计心里里面想这怕是 ...

  5. Mysql binlog备份数据及恢复数据,学会这个,我在也不怕删库跑路啦~

    导读 我一直都主张,技多不压身(没有学不会的技术,只有不学习的人),多学一项技能,未来就少求人一次.网上经常听到xxx删库跑路,万一真的遇到了,相信通过今天的学习,也能将数据再恢复回来~~~ 当然啦, ...

  6. 教你如何6秒钟往MySQL插入100万条数据!然后删库跑路!

    教你如何6秒钟往MySQL插入100万条数据!然后删库跑路! 由于我用的mysql 8版本,所以增加了Timezone,然后就可以了 前提是要自己建好库和表. 数据库test, 表user, 三个字段 ...

  7. 【巨杉数据库SequoiaDB】巨杉Tech | “删库跑路”又出现,如何防范数据安全风险?

    最近,又双叕有企业被“删库”了.来自微盟官网的消息,微盟的业务系统数据库(包括主备)遭遇其公司运维人员的删除,系统将停止运营超48小时. 频发的类似事件也让大家对于数据安全的关注不断提高.数据是一个科 ...

  8. The Data Way Vol.3|做到最后只能删库跑路?DBA 能做的还有很多

    关于「The Data Way」 「The Data Way」是由 SphereEx 公司出品的一档播客节目.这里有开源.数据.技术的故事,同时我们关注开发者的工作日常,也讨论开发者的生活日常:我们聚 ...

  9. 大数据开发从入门小白到删库跑路(一)- 获取Hadoop

    Hadoop是一个可以通过相对简单编程模型实现跨多台计算机集群分布式处理大型数据集的框架.它不是依赖于高额成本的硬件可靠性来提供高可用性,Hadoop的设计能从单个服务器扩展到数千台机器,每个机器提供 ...

随机推荐

  1. redis学习教程五《管道、分区》

    redis学习教程五<管道.分区>  一:管道 Redis是一个TCP服务器,支持请求/响应协议. 在Redis中,请求通过以下步骤完成: 客户端向服务器发送查询,并从套接字读取,通常以阻 ...

  2. 如何将下载到本地的JAR包手动添加到Maven仓库,妈妈再也不用担心我下载不下来依赖啦

    我们有时候使用maven下载jar包的时候,可能maven配置都正确,但是部分jar包就是不能下载下来,如果maven设置都不正确的,可以查看我的maven系列文章,这里仅针对maven配置正确,但是 ...

  3. Java 窗口 绘制图形 #3

    写在前面: 高数下学到第二章,突发奇想要写一个程序画二元函数图像 思路分了三层: ①抽象层: 因变量z,自变量x.y,坐标原点x0.y0.z0 ②投影实现层: 屏幕投影坐标px.py,x轴与屏幕水平方 ...

  4. java——接口、多态性、对象转型

    接口定义:  默认方法: 默认方法的作用: 如果在你的接口已经投入使用了,这个时候你想要在接口里面加一个方法,这个时候如果你加一个抽象方法的话,所有实现类都要改变源代码(因为实现类要把接口中的所有抽象 ...

  5. Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal (思维,逆序对)

    题意:给你一个字符串,每次可以调换现字符串的相邻两个字符,问最少操作多少次使得这个字符串等于其反转过来的字符串. 题解:先考虑字符串中没有相同字符的情况,那么我们每次将目前字符串的最后一个字符一直调换 ...

  6. Git关联GitHub

    1.打开git命令行工具 2.设置全局用户名.邮箱 git config --global user.name "your_name" git config --global us ...

  7. Jmeter入门使用

    1. 什么是Jmeter 转自:https://www.cnblogs.com/lijuanhu321/p/9537185.html#testComponent https://www.cnblogs ...

  8. Python3.7.9+Locust1.4.3版本性能测试工具案例分享

    一.Locust工具介绍 1.概述 Locust是一款易于使用的分布式负载测试工具,完全基于事件,使用python开发,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gev ...

  9. Windows下pip使用清华源

    一.下列内容更换成批处理,直接运行即可 @echo off md "C:\Users\Administrator\AppData\pip" echo [global] >C: ...

  10. nginx的log、upstream和server

    一.log 首先一个log格式化的例子. #配置格式main的log log_format main '$host $status [$time_local] $remote_addr [$time_ ...