消息队列高手课
李玥
京东零售技术架构部资深架构师
立即订阅
8426 人已学习
课程目录
已完结 41 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词 | 优秀的程序员,你的技术栈中不能只有“增删改查”
免费
预习 | 怎样更好地学习这门课?
基础篇 (8讲)
01 | 为什么需要消息队列?
02 | 该如何选择消息队列?
03 | 消息模型:主题和队列有什么区别?
04 | 如何利用事务消息实现分布式事务?
05 | 如何确保消息不会丢失?
06 | 如何处理消费过程中的重复消息?
07 | 消息积压了该如何处理?
08 | 答疑解惑(一) : 网关如何接收服务端的秒杀结果?
进阶篇 (21讲)
09 | 学习开源代码该如何入手?
10 | 如何使用异步设计提升系统性能?
11 | 如何实现高性能的异步网络传输?
12 | 序列化与反序列化:如何通过网络传输结构化的数据?
13 | 传输协议:应用程序之间对话的语言
14 | 内存管理:如何避免内存溢出和频繁的垃圾回收?
加餐 | JMQ的Broker是如何异步处理消息的?
15 | Kafka如何实现高性能IO?
16 | 缓存策略:如何使用缓存来减少磁盘IO?
17 | 如何正确使用锁保护共享数据,协调异步线程?
18 | 如何用硬件同步原语(CAS)替代锁?
19 | 数据压缩:时间换空间的游戏
20 | RocketMQ Producer源码分析:消息生产的实现过程
21 | Kafka Consumer源码分析:消息消费的实现过程
22 | Kafka和RocketMQ的消息复制实现的差异点在哪?
23 | RocketMQ客户端如何在集群中找到正确的节点?
24 | Kafka的协调服务ZooKeeper:实现分布式系统的“瑞士军刀”
25 | RocketMQ与Kafka中如何实现事务?
26 | MQTT协议:如何支持海量的在线IoT设备?
27 | Pulsar的存储计算分离设计:全新的消息队列设计思路
28 | 答疑解惑(二):我的100元哪儿去了?
案例篇 (7讲)
29 | 流计算与消息(一):通过Flink理解流计算的原理
30 | 流计算与消息(二):在流计算中使用Kafka链接计算任务
31 | 动手实现一个简单的RPC框架(一):原理和程序的结构
32 | 动手实现一个简单的RPC框架(二):通信与序列化
33 | 动手实现一个简单的RPC框架(三):客户端
34 | 动手实现一个简单的RPC框架(四):服务端
35 | 答疑解惑(三):主流消息队列都是如何存储消息的?
测试篇 (2讲)
期中测试丨10个消息队列热点问题自测
免费
期末测试 | 消息队列100分试卷等你来挑战!
结束语 (1讲)
结束语 | 程序员如何构建知识体系?
消息队列高手课
登录|注册

24 | Kafka的协调服务ZooKeeper:实现分布式系统的“瑞士军刀”

李玥 2019-09-19
你好,我是李玥。
上节课我带你一起学习了 RocketMQ NameServer 的源代码,RocketMQ 的 NameServer 虽然设计非常简洁,但很好地解决了路由寻址的问题。
而 Kafka 却采用了完全不同的设计思路,它选择使用 ZooKeeper 这样一个分布式协调服务来实现和 RocketMQ 的 NameServer 差不多的功能。
这节课我先带大家简单了解一下 ZooKeeper,然后再来一起学习一下 Kafka 是如何借助 ZooKeeper 来构建集群,实现路由寻址的。

ZooKeeper 的作用是什么?

Apache ZooKeeper 它是一个非常特殊的中间件,为什么这么说呢?一般来说,像中间件类的开源产品,大多遵循“做一件事,并做好它。”这样的 UNIX 哲学,每个软件都专注于一种功能上。而 ZooKeeper 更像是一个“瑞士军刀”,它提供了很多基本的操作,能实现什么样的功能更多取决于使用者如何来使用它。
ZooKeeper 作为一个分布式的协调服务框架,主要用来解决分布式集群中,应用系统需要面对的各种通用的一致性问题。ZooKeeper 本身可以部署为一个集群,集群的各个节点之间可以通过选举来产生一个 Leader,选举遵循半数以上的原则,所以一般集群需要部署奇数个节点。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《消息队列高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(13)

  • 书中迷梦
    个人感觉使用ZK不太适合做注册中心,因为作为注册中心首先要保证的是AP而不是CP,因为注册中心不是数据库
    2019-11-11
    3
  • 游弋云端
    这里就出现了一个矛盾,ZK理论上抽象了分布式协调服务的核心功能,让各个分布式组件不在单独去关注协调服务本身,但大家似乎又在努力的避免去依赖ZK,从而需要自己去实现这套逻辑。哎,分久必合,合久必分。
    2019-09-26
    1
    3
  • Geek_71a2ee
    老师,每个分区节点下面是一个名为 state 的临时节点,节点中保存着分区当前的 leader 和所有的 ISR 的 BrokerID。,这里的leader是指的一个分区的master,isr指的是从?

    作者回复: ISR是所有“保持同步的节点”,包括Leader

    2019-09-26
    2
  • 老杨
    老师能否讲讲RocketMQ或Kafka是如何做高可用,落地过程中有哪些坑,已经最佳实践有哪些?

    作者回复: 通过学习5、22、23、24这几节课,你应该已经掌握了RocketMQ和Kafka的高可用的实现原理。具体操作上,你需要去看一下他们的对应的配置文档,应该可以正确的配置出可靠的集群。

    至于所谓的“坑儿”,这俩产品都已经非常成熟了,只要你正确的配置和使用,基本上不会遇到什么“坑儿”的。

    2019-09-23
    2
  • 业余草
    kafka的优缺点都很明显,在架构平衡方便可以为我们借鉴!
    2019-09-19
    2
  • 饭粒
    ZooKeeper 集群宕机后 Kafka 不可以依靠客户端自身的元数据缓存或者 Broker 的元数据缓存工作吗?

    作者回复: 你可以试验一下,实际上是不行的,因为Kafka它很多地方都依赖zk的watch机制,不仅仅是元数据缓存的问题。

    2019-11-17
  • jack
    老师,有两个问题:1、hadoop集群的高可用也是用zookeeper保证的,是不是也要拆分成小集群,2、那么提供服务的时候是否需要路由,将不同的业务分发到不同的集群上呢?

    作者回复: Hadoop并不需要这么做,原因是,Hadoop它有它自己的NamingService,也就是namenode。ZK的作用只是协调namenode主从复制,namenode出现问题的时候,做主从切换使用。

    2019-10-01
  • Geek_71a2ee
    老师,你讲的很好,通过这节课懂了很多,能否说说一个消息发出去,我是如何路由到文件里去的呢?比如通过hash取模会对应到一个broke,又通过一个操作选择了一个队列,接着又怎么去选择写队列里的一个文件,思路模糊是没法造轮子的,请老师指正

    作者回复: 我会考虑在后面的答疑中讲解这部分内容。

    2019-09-26
  • Geek_71a2ee
    老师,consumergroup和主题或者队列是什么关系,几对几的关系?还是consumergroup和分区有关系?是几对几

    作者回复: 这个问题我在03和08两节课中有详细的描述,你可以复习一下。

    2019-09-26
    1
  • Pantheon
    既然客户端是和borker进行通信获取元数据信息,为啥客户端在连kafka的时候还要指定zk的地址

    作者回复: 新版本的Kafka不需要指定ZK地址。

    2019-09-22
  • slam
    最后说到kafka严重依赖zk集群的可用性,有计划搞个服务替换,这里搞一套服务跟zk有什么区别?kafka的可用性不是也会依赖这个新服务吗?

    作者回复: 他们肯定希望新的服务比zk更稳定

    2019-09-20
  • 许童童
    感谢老师的分享。
    2019-09-19
  • 海神名
    老师,听说kafka对部署环境资源要求较低,请问具体体现在哪些方面呢?有没有具体的推荐配置表?

    作者回复: 主流的消息队列都对服务器的配置没有太多要求,如果你的业务不是处理海量消息,配置很低的服务也都可以满足需求。

    2019-09-19
    1
收起评论
13
返回
顶部