开发者社区> 问答> 正文

MetaQ为什么不像kafka使用zk作为元数据节点,而要使用自己实现的NameServer?

MetaQ为什么不像kafka使用zk作为元数据节点,而要使用自己实现的NameServer?

展开
收起
三分钟热度的鱼 2024-04-18 14:39:20 55 0
1 条回答
写回答
取消 提交回答
  • 我们知道,kafka使用zk作为元数据节点,起到了Broker注册、Topic注册、生产者和消费者负载均衡以及使用zk进行leader角色的选举,当leader所在的broker挂了,将会经过以下两步操作重新选举leader:第1步,先通过Zookeeper在所有机器中,选举出一个KafkaController;第2步,再由这个Controller,决定每个partition的Master是谁,Slave是谁。因为有了选举功能,所以kafka某个partition的master挂了,该partition对应的某个slave会升级为主对外提供服务。image.pngMetaQ 不具备选举,Master/Slave的角色也是固定的。当一个Master挂了之后,你可以写到其他Master上,但不能让一个Slave切换成Master。那么MetaQ是如何实现高可用的呢,其实很简单,MetaQ的所有broker节点的角色都是一样,上面分配的topic和对应的queue的数量也是一样的,MetaQ只能保证当一个broker挂了,把原本写到这个broker的请求迁移到其他broker上面,而并不是这个broker对应的slave升级为主。image.png
    引入zk的主要目的是为了选主,kafka中如果一个broker挂了,这个broker上面的主partition可以通过zk的选举机制在其他broker上面选举主partition,而对于MateQ而言,在部署的时候已经决定了这个Broker是主或者是备了(一个Master可以对接多个Slave,但是一个Slave只能对接一个Master,Master与Slave之间可以通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,不为0的表示Slave),不能再通过选举变成主(认命吧,无法上位的),所以对于MetaQ,是不需要进行选举的,为了方便集群维护,直接使用NameServer这一个轻量级工具来存储元数据信息即可。

    2024-04-18 15:01:21
    赞同 2 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第16讲】:Spring Boot 2.0 实战Apache Kafka百万级高并发消息中间件与原理解析 立即下载
MaxCompute技术公开课第四季 之 如何将Kafka数据同步至MaxCompute 立即下载
消息队列kafka介绍 立即下载