MetaQ为什么不像kafka使用zk作为元数据节点,而要使用自己实现的NameServer?
我们知道,kafka使用zk作为元数据节点,起到了Broker注册、Topic注册、生产者和消费者负载均衡以及使用zk进行leader角色的选举,当leader所在的broker挂了,将会经过以下两步操作重新选举leader:第1步,先通过Zookeeper在所有机器中,选举出一个KafkaController;第2步,再由这个Controller,决定每个partition的Master是谁,Slave是谁。因为有了选举功能,所以kafka某个partition的master挂了,该partition对应的某个slave会升级为主对外提供服务。MetaQ 不具备选举,Master/Slave的角色也是固定的。当一个Master挂了之后,你可以写到其他Master上,但不能让一个Slave切换成Master。那么MetaQ是如何实现高可用的呢,其实很简单,MetaQ的所有broker节点的角色都是一样,上面分配的topic和对应的queue的数量也是一样的,MetaQ只能保证当一个broker挂了,把原本写到这个broker的请求迁移到其他broker上面,而并不是这个broker对应的slave升级为主。
引入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这一个轻量级工具来存储元数据信息即可。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。