@x-power
2019-09-18T10:13:10.000000Z
字数 1520
阅读 2248
消息队列 部署环境
Rocket物理部署结构
Name Server: 单点,供Producer和Consumer获取Broker地址, 类似于注册中心.
Producer: 产生并发送消息.
Consumer: 接收并消费消息.
Broker: 消息暂存,消息转发.
Name Server做的是Rocket的寻址服务, 用于将Broker的路由信息做聚合. 客户端依靠Name Server决定去获取对应topic的路由信息,从而决定对那些Broker做链接.
Name Server是一个几乎无状态的节点,Name Server之间采用Share-Nothing的设计, 互不通信.对于一个
Name Server集群列表, 客户端链接Name Server的时候会随机选择一个节点, 以做到负载均衡.
Name Server所有状态都从Broker上报上来, 本身不存储任何状态, 所有数据均在内存.如果中途所有的Name Server都挂了, 只会影响到路由信息的更新, 并不会影响到和
Broker的通信.(Eureka 的本地缓存服务注册信息 )
Broker是做消息存储,转发的服务器.
Broker以group分开,每个group只允许一个master,若干个slave.
一个master可以有多个slave,但是一个slave只能有一个master.
只有master才可以进行写入操作,slave不允许.
slave从master中同步数据. 同步策略取决于master的配置, 可以采用同步双写,异步复制两种.
客户端消费可以从master和slave中消费. 在默认的情况下,消费者都从master消费, 在master挂掉之后, 客户端由于从Name Server中感知到Broker挂机,就会从slave消费. (尽量从master消费, 这样消息会比较及时, 不用牵扯到消息复制的延迟问题.)
RocketMQ的部署结构有一下特点:
Name Server是一个无状态节点, 可以集群部署, 节点之间没有信息同步.Broker部署分为Master和Slave. 一个master对应多个slave,但是一个slave只可以有一个master, 他们之间的对应关系通过制定相同的BrokerName, 不同的BrokerId来定义, BrokerId为0表示master,非0表示Slave, Master也可以部署多个. 每个Broker与Name Server集群中的所有节点建立长连接, 定时注册Topic信息到所有Name Server.Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server获取Topic信息,并且向提供服务的Topic服务的Master建立长连接, 并且定时向Master发送心跳. Consumer和Name Server集群中的其中一个节点(随机选择)建立长连接, 定期从Name Server取Topic路由信息, 并且向提供Topic服务的Master建立长连接, 且定时发送心跳. Consumer既可以从Master订阅消息,也可以从Slave订阅消息. 规则由Broker决定.用来表示一个发送消息的应用, 一个
Producer Group下包含多个Producer实例,可以使多个机器,也可以是一台机器的多个进程, 或者一个进程的多个Producer对象. 一个Producer Group可以发送多个Topic消息,Producer Group的作用如下: