深入拆解消息队列 47 讲
许文强
前腾讯云 Kafka 技术负责人
5385 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
深入拆解消息队列 47 讲
15
15
1.0x
00:00/00:00
登录|注册

16|集群:如何构建分布式的消息队列集群?(下)

你好,我是文强。
我们接着上节课的内容,继续来看如何构建集群,我们先来看元数据存储服务的设计选型。在消息队列的集群架构中,元数据存储服务的选型和实现是整个架构设计的核心,其他模块的设计实现都是围绕着元数据存储服务来展开的。

元数据存储服务设计选型

在上节课我们讲到过,业界主要有基于第三方存储引擎和集群内部自实现元数据存储两种方案。我们先来分析一下这两种方案的具体实现。

基于第三方存储引擎

这个方案最重要的一件事就是组件选型
从技术上来看,一般只要具备可靠存储能力的组件都可以当作第三方引擎。简单的可以是单机维度的内存、文件,或者单机维度的数据库、KV 存储,进一步可以是分布式的协调服务 ZooKeeper、etcd 等等。
正常来讲,大多数消息队列只会支持一种存储引擎,因为一种存储引擎基本够用了。但是也会有如 Pulsar 支持插件化的元数据存储服务,用来简化不同场景下的部署成本,比如单机运行、测试集成、现网部署等等。
从分布式的角度来看,单机维度的存储能满足的场景有限,也会有单机风险。所以业界主流的分布式消息队列都是选用分布式的协调服务,如 ZooKeeper、etcd 等来当集群的元数据存储服务。所以基于第三方存储引擎的集群架构图一般是下面这样子。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了构建分布式消息队列集群的关键技术,重点讨论了元数据存储服务的设计选型。首先分析了基于第三方存储引擎和集群内部自实现元数据存储两种方案的具体实现。针对基于第三方存储引擎的集群架构,介绍了元数据存储服务的选型和实现,以及构建集群的方式。其次,讨论了集群内部自实现元数据存储的方案,包括在Broker内部构建元数据集群、利用内嵌到进程的小型分布式存储服务以及部署持久化的单机存储引擎等技术实现。最后,以ZooKeeper和Kafka为例,介绍了它们基于不同方式构建集群的实现思路。文章通过对元数据存储服务设计选型和实现方案的详细分析,为构建分布式消息队列集群提供了有益的指导和思路。文章还提出了基于KRaft的Kafka架构相比基于ZooKeeper架构更为简单清晰的观点,并探讨了消息队列集群中修改配置/权限操作的流程。文章内容丰富,涵盖了技术实现细节和架构设计思路,对于从事分布式系统开发和架构设计的读者具有重要参考价值。

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

全部留言(1)

  • 最新
  • 精选
  • 张申傲
    请问下强哥,在Kafka KRaft这类架构中,Controller-Broker节点的职责会不会过重呢? 它相当于Metadata Service Leader + Broker集群的Controller双重角色,既要管理元数据信息,又要维护Broker集群的状态和数据同步,感觉Controller-Broker的负载会有点高。 这种集群内部实现元数据服务的架构,有没有可能把两类职责拆分开呢?比如Broker-1作为Broker集群的Controller,Broker-2节点作为Metadata Service的Leader?

    作者回复: 先补充一个信息,当前的Kafka 的Kraft模式,不区分Metadata Service Leader和Broker Controller,统一称为Controller。 然后说一下我的看法:从理论上来看,是有这个可能,但是我认为风险可控。主要有三点原因: 1. 当前 Kafka kraft 模式的 controller 支持两种部署模式: a. 独立部署,固定某些节点只能承担controller角色,不承担Broker角色。即这台节点的资源都是给controller用的,从而控制这个节点的负载。 b. 混合部署,在流量低的时候可以混部controller和broker,此时在流量上涨的情况下,就有可能出现你说的问题。 2. Controller 在内核会有一些优化机制,用来降低controller的压力。比如数据预加载机制,用来在controller切换时,新的controller节点不需要加载全部数据,从而控制负载。 3. kafka本身的集群管控类操作也不会频繁。因此对controller的压力没有那么大。

    2023-07-26归属地:北京
    2
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部