ZooKeeper 实战与源码剖析
么敬国
新东方集团首席架构师
18975 人已学习
新⼈⾸单¥59
课程目录
已完结/共 47 讲
ZooKeeper 实战与源码剖析
登录|注册
留言
17
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 10 | 使用ZooKeeper实现分布式队列
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 什么是ZooKeeper?
04 | ZooKeeper提供什么服务?
05 | 开始使用ZooKeeper
06 | 使用ZooKeeper实现Master-Worker协同
07 | ZooKeeper架构解析
08 | ZooKeeper API简介
09 | ZooKeeper API:Watch示例
10 | 使用ZooKeeper实现分布式队列
11 | 使用ZooKeeper实现分布式锁
12 | 使用ZooKeeper实现选举
13 | 使用Apache Curator简化ZooKeeper开发
14 | 如何安装配置一个ZooKeeper生产环境?
15 | 如何进行ZooKeeper的监控?
16 | 通过ZooKeeper Observer实现跨区域部署
17 | 通过动态配置实现不中断服务的集群成员变更
18 | ZooKeeper节点是如何存储数据的?
19 | 使用ZooKeeper实现服务发现(1)
20 | 使用ZooKeeper实现服务发现(2)
21 | 使用ZooKeeper实现服务发现(3)
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 Processor源码解读
42 | Standalone的ZooKeeper是如何处理客户端请求的?
43 | Quorum模式下ZooKeeper节点的Request Processor Pipeline
44 | ZooKeeper的Leader Election
45 | ZooKeeper的Zab协议
46 | 客户端和服务器端交互:Watch和Session
47 | 结课测试&结束语
登录 后留言

全部留言(17)

  • 最新
  • 精选
小白
老师, zookeeper 3.5.5分支上的源码是支持maven构建的。 git clone https://github.com/apache/zookeeper.git git checkout branch-3.5.5 cd zookeeper “修改根pom.xm中git-commit-id-plugin的version为3.0.1,自带的2.2.5在maven中央库里没有不知道为什么" mvn install -Dmaven.skip.test=rue 或直接使用IDEA的导入maven项目功能 运行zookeeper-recipes-queue中的单元测试文件DistributedQueueTest: cd zookeeper-recipes/zookeeper-recipes-queue mvn test -Dtest=org.apache.zookeeper.recipes.queue.DistributedQueueTest

作者回复: 多谢,这样大部分学员可以不用Ant了。

2019-09-01
2
15
fancion
老师好,所以element方法作用是返回的队列的对头吗?

作者回复: 是的

2019-09-11
1
王金龙
现在是用maven的吧,您视频里说是用ant

作者回复: 1. ZooKeeper源代码用的是Ant+Ivy。 2. Curator源代码用的是maven。 3. 我自己的项目用的是Gradle。 这节讲的分布式队列是包含在ZooKeeper源代码中的,所以用的是Ant+Ivy。

2019-08-24
1
Dovelol
老师好,能讲一下这个分布式队列的缺点吗?如果一直不添加元素,所有客户端会一直循环获取,客户端比较多的情况下对性能影响大吗?

作者回复: 只有返回的orderedChildren不为空,但是orderedChildren的所有元素被其他用户出站才会重试。如果返回的orderedChildren为空,会立刻返回。对性能应该影响不大,因为读操作是一个ZooKeeper节点在本地就能处理的。 另外也可以在发现orderedChildren的所有元素被其他用户出站时返回,这样的队列实现也是对的。

2019-08-23
1
Dovelol
老师好,这个分布式协同队列是zk自己实现的源码吗? 那就是说可以有api直接用,能讲下应用场景吗?

作者回复: 和单机的并发队列一样,这个分布式协同队列可以用来做生产者和消费者的协同。 ZooKeeper的源码zookeeper-recipes/zookeeper-recipes-queue目录下提供了一个分布式协同队列的实现。另外Apache Curator也提供了分布式协同队列的实现。建议使用Apache Curator的实现。

2019-08-23
1
yang
1. create方法是跟其他的方法类似,也是采用重试机制吧? 那create失败了,就是会一直重试吗? 2. element方法取到的childNames是快照 那后面再调用element的时候,子节点在取到之后,被get之前已经被其他线程全部remove了,此时调用element这个方法的线程是一直重试吗? 3. 同样的remove方法取到了子节点们,但是去真正remove的时候,发现已经不在子节点中了,会一直重试吗?

作者回复: 1. ZooKeeper API(例如create)不会重试,Curator提供的API有重试机制。 2. 是的。 3. 是的。

2019-08-21
3
1
凌霄
不过瘾,上干货吧!

作者回复: 后面的内容会比较深入

2019-08-19
1
tony007
多个客户端如何保证线程安全?

作者回复: ZooKeeper保证的是以下的数据一致性: 1. Linearizable writes: 所有更新ZooKeeper状态的操作保证可线性化的数据一致性。 2. FIFO client order: 来自一个client的所有操作按照client发送操作请求的顺序执行。 多个客户端保证第一点。

2019-12-23
豆子高
老师 能讲一下 DistributedQueueTest 测试类里面的逻辑嘛 讲一个就行了 看起来有点吃力 尤其是运行测试方法时先会执行tearDown()方法 整个逻辑不是很明白 跟前面讲的基础 需要老师指点一下 不然不知道怎么连接起来

作者回复: 带有Before注解的方法会在测试用例运行之前执行,带有After注解的方法会在测试用例运行之后执行。所以测试用例testOffer1()的执行过程如下所示: 1. ClientBase.setUp()启动一个ZooKeeper节点。 2. DistributedQueueTest.testOffer1()创建一个DistributedQueue,先入队,然后出队,验证出队元素和入队元素是相等的。 3. DistributedQueueTest.tearDown()停止ZooKeeper节点。

2019-10-14
北北、Pepper
看完了,期待老师后面更深入的讲解

作者回复: 好的

2019-08-25
收起评论