消息队列高手课
李玥
美团高级技术专家
52199 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
进阶篇 (21讲)
消息队列高手课
15
15
1.0x
00:00/00:00
登录|注册

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

包含主题和分区的信息
/brokers/topics/
临时节点代表在线的Broker
/brokers/ids/[0...N]
Broker中的元数据缓存与ZooKeeper中的元数据同步
建议拆分成多个独立的小集群部署
Kafka集群严重依赖ZooKeeper
业务集群可用性不应依赖于ZooKeeper
不适合存放大量数据
Broker中维护的元数据缓存
Broker处理更新元数据请求
更新元数据的请求构造
获取Broker的访问地址
根据主题和队列找到分区对应的state临时节点
通过ZooKeeper中的数据结构
主题和分区信息
Broker信息
用于快速选举、节点间通信、分布式锁等功能
临时节点和Watcher机制
提供一致性存储系统
分布式协调服务框架
思考题
Kafka集群可用性与ZooKeeper的依赖
ZooKeeper的使用注意事项
Kafka源代码分析
Kafka客户端如何找到对应的Broker
Kafka在ZooKeeper中保存的信息
ZooKeeper
Kafka使用ZooKeeper构建集群、实现路由寻址

该思维导图由 AI 生成,仅供参考

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

ZooKeeper 的作用是什么?

Apache ZooKeeper 它是一个非常特殊的中间件,为什么这么说呢?一般来说,像中间件类的开源产品,大多遵循“做一件事,并做好它。”这样的 UNIX 哲学,每个软件都专注于一种功能上。而 ZooKeeper 更像是一个“瑞士军刀”,它提供了很多基本的操作,能实现什么样的功能更多取决于使用者如何来使用它。
ZooKeeper 作为一个分布式的协调服务框架,主要用来解决分布式集群中,应用系统需要面对的各种通用的一致性问题。ZooKeeper 本身可以部署为一个集群,集群的各个节点之间可以通过选举来产生一个 Leader,选举遵循半数以上的原则,所以一般集群需要部署奇数个节点。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kafka利用ZooKeeper构建集群,实现路由寻址和监控节点变化。ZooKeeper作为分布式协调服务框架,提供了分布式存储系统和临时节点,以及订阅ZNode状态变化的Watcher机制。Kafka在ZooKeeper中保存了Broker信息和主题、分区的状态,利用ZooKeeper实现了集群的快速选举、节点间通信、分布式锁等功能。Kafka的客户端并不直接连接ZooKeeper,而是通过Broker进行远程通信,利用ZooKeeper中的元数据实现路由寻址。Kafka的设计思路与RocketMQ的NameServer不同,但同样有效地解决了路由寻址的问题。此外,文章还提到了ZooKeeper的使用注意事项和Kafka开发者对于替代ZooKeeper的元数据服务的讨论。文章深入分析了Kafka客户端如何找到对应的Broker以及Broker中的元数据缓存与ZooKeeper中的元数据保持同步的过程。文章内容丰富,对于理解Kafka和ZooKeeper的关系以及技术细节有很好的帮助。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《消息队列高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(19)

  • 最新
  • 精选
  • 饭粒
    ZooKeeper 集群宕机后 Kafka 不可以依靠客户端自身的元数据缓存或者 Broker 的元数据缓存工作吗?

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

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

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

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

    作者回复: 通过学习5、22、23、24这几节课,你应该已经掌握了RocketMQ和Kafka的高可用的实现原理。具体操作上,你需要去看一下他们的对应的配置文档,应该可以正确的配置出可靠的集群。 至于所谓的“坑儿”,这俩产品都已经非常成熟了,只要你正确的配置和使用,基本上不会遇到什么“坑儿”的。

    2019-09-23
    6
  • 山头
    老师,每个分区节点下面是一个名为 state 的临时节点,节点中保存着分区当前的 leader 和所有的 ISR 的 BrokerID。,这里的leader是指的一个分区的master,isr指的是从?

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

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

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

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

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

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

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

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

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

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

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

    2019-09-22
  • 书中迷梦
    个人感觉使用ZK不太适合做注册中心,因为作为注册中心首先要保证的是AP而不是CP,因为注册中心不是数据库
    2019-11-11
    8
    31
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部