我的每一篇这种正经文章,都是我努力克制玩心的成果,我可太难了,和自己做斗争。

ZooKeeper官方文档学习笔记04-程序员指南03

  • 绑定
    • Java绑定
    • 客户端配置参数
  • C绑定
  • 陷阱: 常见问题及故障排除

绑定

zk客户端支持两种语言:Java和C

Java绑定

相关包:org.apache.zookeeper 和 org.apache.zookeeper.data,data主要用作容器,由生成的类组成(??)

Zookeeper的java客户端使用的主类是ZooKeeper类(org.apache.zookeeper.ZooKeeper)。他的构造方法通过两方面区分:会话id和会话密码。Java程序可以将会话id和密码保存下来(方便使用?)
创建zk对象会创建两个线程:一个IO线程(IO事件发生地)和一个事件线程(事件回调发生地)。

常用的IO事件:重新连接到zk服务器、维护心跳、同步方法的响应
常用的事件回调:对异步方法和监视事件的响应

Note:

  • 1 异步调用和watcher回调都是按顺序进行的,一次执行一个?在此期间不处理其他回调
  • 2 事件回调不会阻塞IO线程或同步调用的处理。
  • 3 同步调用存在不按顺序执行的可能性。例如,假设客户端执行以下处理:在watcher设置为true(监听数据变更)的情况下发出对节点/a的异步读取,然后再读取的完成回调中执行/a的同步读取。

这样举例,可能会比较好理解。

$.ajax({type:'POST',url:"a.html",success:function(msg) {$("#form").submit();}});...<ww:form id="form" action="a"/>

其中watcher和异步方法是事件回调,同步方法是IO事件

注意,如果异步读取和同步读取之间的/a发生了更改,则客户端将在同步读取响应之前收到一个watch事件,表示/a changed。但由于完成回调阻塞了事件队列。因此在处理watch事件之前,同步读取将返回/a的新值。

完成回调是指异步读取吗?因为异步读取在watch之前,所以回调堵塞了队列。导致同步先读取到值,而不是先接收到节点a的变化?

与关闭相关的规则:一旦zk对象关闭或收到致命事件(SESSION_expired和AUTH_failed),zk对象就无效了。关闭时,这两个线程关闭了,后续对zookeeper句柄的任何访问都将导致不确定的行为,应该避免。

客户端配置参数

  • 1 zookeeper.sasl.clientfalse代表禁用SASL身份验证,默认为true

  • 2 zookeeper.sasl.clientconfig:指定JAAS登陆文件中的上下文键,默认为"Client"。

  • 3 zookeeper.sasl.client.username:一般,一个主体被分为3部分:primary、instance、和realm。典型的 Kerberos V5主体的格式是 primary/instance@REALM。instance派生自服务器IP。zookeeper.sasl.client.username指定primary即username,默认是"zookeeper"。所以最终是username/IP@realm

  • 4 zookeeper.server.realm:上文的realm

  • 5 zookeeper.disableAutoWatchReset:是否启用自动watch重置。默认,客户端在会话重连期间自动重置watch,设置为"true"可以关闭此行为。

  • 6 zookeeper.client.secure:为true可以让客户端连接到服务器安全客户端端口,需要Netty客户端,且需使用带有指定凭据的SSL连接。

  • 7 zookeeper.clientCnxnSocket:指定使用哪个ClientCnxnSocket。可选的有org.apache.zookeeper.ClientCnxnSocketNIO and org.apache.zookeeper.ClientCnxnSocketNetty 。默认的是第一个。如果想要连接到服务器的安全客户端端口,要在客户端上设置成第二种。

  • 8 zookeeper.ssl.keyStore.location and zookeeper.ssl.keyStore.password:指定包含用于SSL连接的本地凭据的JKS的文件路径和解锁文件的密码。

  • 9 zookeeper.ssl.trustStore.location and zookeeper.ssl.trustStore.password:指定包含用于SSL连接的远程凭据的JKS的文件路径和解锁文件的密码。

  • 10 jute.maxbuffer:指定服务器传入数据的最大大小。默认值是4194304字节,或者只有4MB。这至关重要,zookeeper的服务器可存储和发送数千字节的数据。如果长度打了,将引发IOException。

  • 11 zookeeper.kinit:指定kinit二进制文件的路径,默认值“/usr/bin/kinit”。

C绑定

诶呀,同上文的C,暂不负责(这样就可以在今天下午写完程序员指南了,嘿嘿~ )

绑定都会发生错误,Java 客户机绑定通过抛出 KeeperException 来实现,对异常调用 code ()将返回特定的错误代码。C 客户端绑定返回一个错误代码,这个错误代码定义在 enum ZOO _ errors 中,具体参考API。

陷阱: 常见问题及故障排除

  • 1 watch只能监听已连接事件:zk客户端与服务器断连时,创建并删除znode,将不会收到watch事件。
  • 2 zk服务器只要大多服务器存活就可以。但你要保证在发生故障后恢复你的状态和未完成的请求。
  • 3 客户端使用的zk服务器连接字符串必须和zk服务器匹配,不匹配无法连接。(必须是现有的zk服务器)
  • 4 事务日志是影响zk性能的最关键部分,位置谨慎选择。zk必须在返回响应前将事物同步到媒体。所以要搞个专门的事务日志(之前好像有提到?)
  • 5 正确设置Java最大堆大小,避免内存交换。内存交换到磁盘会降低性能(参考操作系统的缓存、硬盘?)zk请求是有序的,如果一个请求到达磁盘,所有排队的请求也会到达磁盘。所以尝试将heapsize设置为拥有的物理内存量。比如4g的机器上设置3g。确定大小的最佳方法是运行负载测试。

终于写完程序员指南这篇了,可真不容易。来都来了,点个赞再走呗,会回访呐。

ZooKeeper官方文档学习笔记03-程序员指南03相关推荐

  1. ZooKeeper官方文档学习笔记01-zookeeper概述

    纠结了很久,我决定用官方文档学习 ZooKeeper概述 学习文档 学习计划 ZooKeeper:分布式应用程序的分布式协调服务 设计目标 数据模型和分层名称空间 节点和短命节点 有条件的更新和监视 ...

  2. ZooKeeper官方文档学习笔记03-程序员指南02

    这个太多了 我总是坚持不下来,还是分开写吧,这样更有成就感 程序员指南02 使用ACL的ZooKeeper访问控制 permission schema Zookeeper的C语言client API ...

  3. ZooKeeper官方文档学习笔记02-ZooKeeper入门指南

    本来以为学一篇都会很难很难,但是好像也没有那么难.虽然有些名词不太理解,但我决定后续学习中应该会遇到吧? 入门:使用ZooKeeper协调分布式应用程序 先决条件 下载 独立运行 1 选择一个合适的目 ...

  4. ZooKeeper官方文档学习笔记03-程序员指南

    害,终究是我高估了自己,这个也太多了.不过里面有些思想,让我感觉似曾相识,比如他的session就有点像HTTPS,然后session的管理有点像人的管理 使用 ZooKeeper 开发分布式应用程序 ...

  5. ZooKeeper官方文档学习笔记05-ZooKeeper的屏障(Barrier)和队列(Queue)教程

    开篇碎碎念:不要试图用断点,或者你断点位置要放好,不然你就会收获许多连接异常.这绝对是我目前翻译过的最流畅的.咳,不是官网流畅,是我笔记流畅,也许是我成长了.(屏障就是人齐开饭,都吃完散场.然后队列是 ...

  6. ZooKeeper官方文档学习笔记04-ZooKeeper的Java实例

    碎碎念:启动成功了一半.可以启动,可以debug,但是有些方法无法访问,而且create在哪里,我还不清楚.那个DataMonitor,不能完全按照官网写,要像我一样改一下,不然会报werror,因为 ...

  7. Open3D官方文档学习笔记

    Open3D官方文档学习笔记 第一部分--点云 1 可视化点云 2 体素降采样 3 顶点法线评估 4 访问顶点法线 补充:Numpy在Open3D中的应用 5 裁剪点云 补充1:获取点云坐标 补充2: ...

  8. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  9. kafka官方文档学习笔记3--配置简述

    Kafka使用key-value键值对格式的配置,这些配置即可以在进程启动时,根据指定的properties文件加载,也可以通过编程的方式,在程序中动态指定:根据集群中角色的不同分为6种配置: bro ...

最新文章

  1. Python基础编程——字典的创建
  2. 听Ruby之父畅谈编程语言的设计
  3. 广度优先搜索求解迷宫问题
  4. how is view embedded via component usage being initialized
  5. Mathematica图片局部变色
  6. file_put_contents()写入数组
  7. 烧了1.18亿美元融资后,谷歌GV投资的无人机公司宣布倒闭
  8. [Java] 蓝桥杯ALGO-27 算法训练 FBI树
  9. iPhone文件系统:创建、重命名以及删除文件
  10. silverlight 学习笔记 (八):Prism中MEF的初步认识
  11. matlab聚类分析工具箱,matlab聚类工具箱
  12. 2018年java web前端(总结)前端要求和流行几个框架
  13. html把圆形分成10份,CSS八等分圆的实现示例
  14. oracle 更新数据语句,数据更新语句update
  15. codeforces csp复赛训练利器---初识
  16. Unity-3d Day03 做了一个吃粑粑豆的小游戏 hiahia~~
  17. HDOJ 2112 HDU Today (最短路 Dijkstra SPFA)
  18. TRYLIVE CLOTHING:AR个人魔法试衣间,试尽网上任何衣服
  19. 波形系列之正弦波发生器-含仿真代码及工程
  20. 抓娃娃营销工具 uniapp

热门文章

  1. 查看堆内存(histogram)中的对象数量及大小
  2. 区块链开发入门书籍和文档
  3. 最小路径问题_Dijkstra
  4. 图数据库 graph_通过SQL Server中的自连接了解Graph数据库相对于关系数据库的好处
  5. sql设为简单模式sql_SQL模式演练
  6. 结局就在附近! (对于SQL Server 2008和SQL Server 2008 R2)
  7. 微软 azure_有关Microsoft Azure技术的简介和常见问题解答
  8. Fiddler过滤css、js、图片等静态文件
  9. UK Biobank专题
  10. traefik 结合 docker-compose 的快速安装及使用