集群
Meta假定producer、broker和consumer都是分布式的集群系统。
Producer可以是一个集群,多台机器上的producer可以往同一个topic发送消息。
Meta的服务器broker一般也是一个集群,多台broker组成一个集群提供一些topic服务,生产者按照一定的路由规则往集群里某台broker发送消息,消费者按照一定的路由规则拉取某台broker上的消息。
Consumer也可以组织成一个集群来消费同一个topic,发往这个topic的消息按照一定的路由规则发送到consumer集群里的某一台机器。Consumer集群每个consumer必须拥有相同的分组名称。
Broker集群配置
Broker集群配置非常容易:
- 拷贝broker1的配置文件
conf/server.ini
到新的broker,假设为broker2。 - 修改broker2的server.ini,只要修改brokerId为另一个不同于broker1的值即可
- 启动broker2,这样一来broker2将和broker1组成一个服务器集群
- 在这个过程中你不需要重启任何现有的服务,包括生产者、消费者和broker1,他们都将自动感知到新的broker2
可见,配置一个集群唯一要做的就是使用同一份配置文件并定义不同的brokerId
即可。
负载均衡
负载均衡和failover分不开,我们将分别讨论下生产者和消费者的负载均衡策略。我们先假定broker是一个集群,这样每个topic必定有多个分区。
生产者的负载均衡和failover
每个broker都可以配置一个topic可以有多少个分区,但是在生产者看来,一个topic在所有broker上的的所有分区组成一个分区列表来使用。
在创建producer的时候,客户端会从zookeeper上获取publish的topic对应的broker和分区列表,生产者在发送消息的时候必须选择一台broker上的一个分区来发送消息,默认的策略是一个轮询的路由规则,一张图来表示
生产者在通过zk获取分区列表之后,会按照brokerId和partition的顺序排列组织成一个有序的分区列表,发送的时候按照从头到尾循环往复的方式选择一个分区来发送消息。考虑到我们的broker服务器软硬件配置基本一致,默认的轮询策略已然足够。
如果你想实现自己的负载均衡策略,可以实现上文提到过的PartitionSelector接口,并在创建producer的时候传入即可。
在broker因为重启或者故障等因素无法服务的时候,producer通过zookeeper会感知到这个变化,将失效的分区从列表中移除做到fail over。因为从故障到感知变化有一个延迟,可能在那一瞬间会有部分的消息发送失败。
消费者的负载均衡
消费者的负载均衡会相对复杂一些。我们这里讨论的是单个分组内的消费者集群的负载均衡,不同分组的负载均衡互不干扰,没有讨论的必要。 消费者的负载均衡跟topic的分区数目紧密相关,要考察几个场景。 首先是,单个分组内的消费者数目如果比总的分区数目多的话,则多出来的消费者不参与消费,如图
其次,如果分组内的消费者数目比分区数目小,则有部分消费者要额外承担消息的消费任务,具体见示例图如下
综上所述,单个分组内的消费者集群的负载均衡策略如下
- 每个分区针对同一个group只挂载一个消费者
- 如果同一个group的消费者数目大于分区数目,则多出来的消费者将不参与消费
- 如果同一个group的消费者数目小于分区数目,则有部分消费者需要额外承担消费任务
Meta的客户端会自动帮处理消费者的负载均衡,它会将消费者列表和分区列表分别排序,然后按照上述规则做合理的挂载。
从上述内容来看,合理地设置分区数目至关重要。如果分区数目太小,则有部分消费者可能闲置,如果分区数目太大,则对服务器的性能有影响。
在某个消费者故障或者重启等情况下,其他消费者会感知到这一变化(通过 zookeeper watch消费者列表),然后重新进行负载均衡,保证所有的分区都有消费者进行消费。
来自淘宝
相关推荐
- **集群消费**:Consumer Group 内的实例平均分摊消息消费,类似于 JMS 中的点对点消息传递,保证每条消息只有一个消费者,且消费者和发送者之间无时间依赖性。 - **主动消费**:消费者主动向 Broker 请求消息,...
总结,MetaQ-server-1.4.6.2版本提供了一个完整的消息中间件解决方案,包括服务端、客户端和相应的文档支持。通过使用MetaQ,开发者可以构建出高效、可靠的分布式系统,同时利用Javadoc文档来加速开发过程,确保代码...
3. 分布式:MetaQ采用分布式集群部署,可以动态扩展节点以应对不断增长的业务量,具备良好的水平扩展能力。 4. 消息持久化:支持消息持久化到磁盘,即使服务器重启,也不会丢失未消费的消息,确保数据安全。 5. ...
扩展性方面,MetaQ支持动态添加或删除Broker,用户可以根据业务增长灵活地调整集群规模。此外,它的主题和分区(Partition)设计允许水平扩展,通过增加更多的Partition来提高处理能力。 安全性是另一个重要的考虑...
MetaQ,全称为“Meta Message Queue”,是阿里巴巴开源的一款分布式消息中间件,主要用于解决大规模分布式系统中的消息传递问题。MetaQ 提供了高可用、高可靠的消息服务,支持多种消息模型,如点对点(Point-to-...
MetaQ的架构设计中,Broker集群采用了主从模式,以确保高可用性。消费者通过负载均衡的方式连接到Broker集群,并从中读取数据,而生产者(Producer)则只能连接到Master Broker来写入数据。Master角色的Broker支持...
安装好JDK后,需要配置环境变量,通常情况下出于经验,我们往往会修改/etc/profile的值进行环境变量配置,但这在安装JDK以及后面安装的storm集群、zookeeper集群以及metaq集群时会出问题,这时候我们需要在/etc/....
使用集群技术,包括Redis集群、Storm集群和Metaq集群等,不仅提高了系统的可用性,还大幅度提升了数据处理速度。例如,Redis集群提高了资源查询的速度,Storm集群提升了告警处理能力,Metaq集群确保了消息传递的高...
- **RocketMQ**的前身是MetaQ,最初可以看作是LinkedIn的Kafka(Scala版)的一个Java版本,并在此基础上增加了事务支持。 - **RocketMQ**相对于原生Kafka的特点在于除了基本的日志收集功能外,还支持高可用(HA)、...
Spark开发者会将自己的代码完成开发并提交到YARN集群,之后任务的监控、报警、性能优化等都依赖于开发者...数据接入覆盖主流中间件:Kafka、MetaQ、TT和SLS 任务的监控、报警、日志处理 Spark任务容灾 Spark集群容灾
ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。 1、Zookeeper...
- **MetaQ** (分布式消息中间件) #### 五、Zookeeper 集群安装部署 Zookeeper 支持三种部署模式:单机模式、伪分布式模式和分布式模式。单机模式和伪分布式模式主要用于本地测试调试。下面详细介绍分布式模式的...
- **MetaQ**(阿里巴巴):基于Zookeeper实现消息队列的高可用特性。 ### ZooKeeper的基本原理 - **数据存储**:每个服务器节点在其内存中都存储了一份数据副本。 - **Leader选举**:Zookeeper启动时,采用Paxos...
例如,LinkedIn开源的KafkaMQ和阿里巴巴开源的MetaQ都采用了Zookeeper来进行生产者和消费者的负载均衡。 - **生产者负载均衡**:生产者通过Zookeeper获取所有Broker和分区信息,并按一定策略(如轮询)选择分区进行...
- **优化的集群管理**:改进了集群的动态伸缩机制,支持更多的自定义选项。 综上所述,Apache RocketMQ不仅具备丰富的功能特性,还在不断迭代升级中持续优化自身性能,已经成为分布式系统中不可或缺的重要组成部分...
阿里云消息队列产品包括MetaQ和Notify等内部产品,以及Apache孵化项目RocketMQ。在实际应用中,阿里云内部有超过1000个核心应用使用MQ,每天流转的消息量达几千亿。在关键场景,例如双11交易、商品、营销等核心链路...
RocketMQ提供了丰富的运维指令,方便管理员进行日常维护工作,包括但不限于主题(Topic)、集群(Cluster)、Broker等核心组件的信息管理和监控。 #### 登录控制台 要使用RocketMQ的运维指令,首先需要登录控制台...