下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 39 | ZooKeeper的客户端网络通信源码解读
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

ZooKeeper实战与源码剖析

共47讲 · 约450分钟
2953
免费
01 | 课程介绍
免费
02 | 内容综述
免费
03 | 什么是ZooKeeper?
免费
04 | ZooKeeper提供什么服务?
免费
05 | 开始使用ZooKeeper
06 | 使用ZooKeeper实现Master...
07 | ZooKeeper架构解析
08 | ZooKeeper API简介
09 | ZooKeeper API:Watch示...
10 | 使用ZooKeeper实现分布式...
11 | 使用ZooKeeper实现分布式...
12 | 使用ZooKeeper实现选举
13 | 使用Apache Curator简化Z...
14 | 如何安装配置一个ZooKeepe...
15 | 如何进行ZooKeeper的监控...
16 | 通过ZooKeeper Observer...
17 | 通过动态配置实现不中断服...
18 | ZooKeeper节点是如何存储...
19 | 使用ZooKeeper实现服务发...
20 | 使用ZooKeeper实现服务发...
21 | 使用ZooKeeper实现服务...
22 | Kafka是如何使用ZooKeeper...
23 | 什么是Paxos协议?
24 | 对比Chubby和ZooKeeper
25 | Raft协议解析
26 | 什么是etcd?
27 | etcd API: KV部分
28 | etcd API:Watch和Lease...
29 | 使用etcd实现分布式队列
30 | 使用etcd实现分布式锁
31 | 如何搭建一个etcd生产环境...
32 | 存储数据结构之B+tree
33 | 存储数据结构之LSM
34 | 本地存储技术总结
35 | ZooKeeper本地存储源码解...
36 | 网络编程基础
37 | 事件驱动的网络编程
38 | Java的事件驱动网络编程
39 | ZooKeeper的客户端网络通...
40 | ZooKeeper的服务器网络通...
41 | ZooKeeper的Request Proc...
42 | Standalone的ZooKeeper是...
43 | Quorum模式下ZooKeeper节...
44 | ZooKeeper的Leader Elect...
45 | ZooKeeper的Zab协议
46 | 客户端和服务器端交互:Wa...
47 | 结束语

精选留言(2)

  • 2019-12-11
    如何切到netty通信呢,
    看到官方文档上写着:NIO continues to be the default, however Netty based communication can be used in place of NIO by setting the environment variable "zookeeper.serverCnxnFactory" to "org.apache.zookeeper.server.NettyServerCnxnFactory".

    默认情况下,zkServer.sh start 启动后,查看zk的日志,可以看到:
    2019-12-11 00:12:40,842 [myid:] - INFO [main:ServerCnxnFactory@135] - Using org.apache.zookeeper.server.NIOServerCnxnFactory as server connection factory

    小弟花了半个小时才实验成功,分享给大家。
    【服务端zkServer.sh】
    在 $ZK_HOME/conf 目录下创建一个 java.env文件,并配置:
    JVMFLAGS="-Dzookeeper.serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
    -Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
    "
    如果使用zkCli.sh访问时想使用netty,就加上clientCnxnSocket的配置,如上。

    通过zkServer.sh start 启动后,查看zk启动日志,检查是否使用Netty通讯:

    2019-12-11 00:37:14,230 [myid:] - INFO [main:ServerCnxnFactory@135] - Using org.apache.zookeeper.server.NettyServerCnxnFactory as server connection factory

    【客户端使用IDEA】
    在VM options中添加下面配置即可:
    -Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty

    如果仅调试netty在zookeeper 客户端执行流程中的使用,只配置客户端为netty即可。

    如果使用SSL的话。则必须使用netty通信。
    SSL is only supported on top of Netty communication, which means if you want to use SSL you have to enable Netty.
    展开

    作者回复: 赞

  • 2019-11-01
    老师 也就是eventthread 只在异步调用的时候存在是吧

    作者回复: 它除了您说的用处,还有很多其他用处,比方说处理API注册的watch,比如https://zookeeper.apache.org/doc/r3.5.5/api/org/apache/zookeeper/ZooKeeper.html#getData-java.lang.String-boolean-org.apache.zookeeper.AsyncCallback.DataCallback-java.lang.Object-注册的watch。

    eventThread一直运行。ClientCnxn的start会启动这个thread,https://github.com/apache/zookeeper/blob/release-3.5.5/zookeeper-server/src/main/java/org/apache/zookeeper/ClientCnxn.java#L408。在创建一个ZooKeeper是会调用cnxn.start()。