新闻资讯

新闻资讯 通知公告

消息中间件 — RocketMQ简介

编辑:016     时间:2020-02-10

RocketMQ概述

Apache RocketMQ是一款具有低延迟,高性能和可靠性,数十亿容量和灵活可扩展性的分布式消息传递和流媒体平台。它由NameServer、Broker、Producer以及Consumer四部分构成,如下图所示:


所有的集群都具有水平扩展能力,无单点障碍。

  • NameServer Cluster(名称服务器集群)

    名称服务器提供轻量级服务发现和路由。每个NameServer记录完整的路由信息,提供相应的读写服务,并支持快速存储扩展。

  • Broker Cluster(代理服务集群)

    Broker通过提供轻量级主题和队列机制来处理消息存储。它们支持Push和Pull模型,包含容错机制(2个副本或3个副本),并提供强大的峰值填充和以原始时间顺序累积数千亿条消息的能力。此外,Broker提供灾难恢复,丰富的指标统计数据和警报机制,而传统的消息传递系统都缺乏这些机制。

  • Producer Cluster(生产者集群)

    生产者支持分布式部署。分布式生产者通过多种负载均衡模式向Broker集群发送消息。发送过程支持快速失败并具有低延迟。

  • Consumer Cluster(消费者集群)

    消费者也支持Push和Pull模型中的分布式部署,它还支持群集消费和消息广播。提供了实时的消息订阅机制,可以满足大多数消费者的需求。

NameServer

NameServer是一个功能齐全的服务器,主要包含两个功能:

  • 代理管理,NameServer接受来自代理群集的注册,并提供心跳机制来检查代理是否存活。
  • 路由管理,每个NameServer将保存有关代理群集的全部路由信息以及用于客户端查询的队列信息。

因此,在启动代理和客户端之前,需要提供名称服务器地址列表告诉他们如何访问名称服务器。在Apache RocketMQ中,这可以通过四种方式详情完成。

Broker Server

代理服务器负责消息存储和传输,消息查询,HA保证等。代理服务器有几个重要的子模块,如

  • Remoting Module, the entry of broker, handles the requests from clients.
  • Client Manager, manages the clients (Producer/Consumer) and maintains topic subscription of consumer.
  • Store Service, provides simple APIs to store or query message in physical disk.
  • HA Service, provides data sync feature between master broker and slave broker.
  • Index Service, builds index for messages by specified key and provides quick message query.

核心概念

Producer

生产者将业务应用系统生成的消息发送给Broker。 RocketMQ提供了多种发送模式:同步,异步和单向。

Producer Group

相同角色的生产者被组织到一起。在事务提交后,生产组中的不同实例都可以连接broker执行提交或回滚事务,以防原生产者在提交后就挂掉。

警告:考虑到生产者有很强的消息发送能力,每个生产者组只允许有一个实例用来避免不必要的初始化。

Consumer

消费者从Broker获取消息并将其提供给应用程序。从用户应用的角度来看,提供了两种类型的消费者:

  • PullConsumer:PullConsumer积极从Broker拉取消息。一旦批量消息被拉出,用户应用程序启动消费过程。
  • PushConsumer:另一方面,PushConsumer封装消息拉取,消耗进度和维持其他内部工作,留下一个回调接口给最终用户执行消息到达时执行的消息。

Consumer Group

具有完全相同角色的消费者被组合在一起并命名为消费者组,消费群体是一个很好的概念,它在消息消费方面实现负载平衡和容错目标是非常容易的。

警告:消费者组的消费者实例必须具有完全相同的主题订阅。

Topic

主题是生产者提供消息和消费者提取消息的类别。主题与生产者和消费者的关系非常松散,具体而言,一个主题可能有零个,一个或多个向其发送消息的生产者;相反,生产者可以发送不同主题的信息;从消费者的角度来看,一个主题可能由零个,一个或多个消费者群体订阅。同样,一个消费群体可以订阅一个或多个主题,只要这个群体的实例保持其订阅的一致性即可。

Message

消息是要传递的信息。一条消息必须有一个主题,可以将其解释为要发送给您的信件的地址。一条消息也可能有一个可选标签和额外的键值对。例如,您可以为消息设置业务密钥,并在Broker上查找消息以在开发期间诊断问题。

Message Queue

主题被划分为一个或多个子主题这就是消息队列。

Tag

标签可以理解为更细一级的主题,为使用者提供更灵活的查找。使用标记,来自同一业务模块的具有不同目的的消息可能具有相同的主题和不同的标记。标签将有助于保持代码的清洁和一致性,并且标签还可以方便RocketMQ提供的查询系统。

Broker

Broker是RocketMQ系统的主要组成部分。它接收生产者发送的消息,存储消息并准备处理来自消费者的请求。它还存储消息相关的元数据,包括消费者组,消耗进度偏移和主题/队列信息。

Name Server

名称服务器作为路由信息提供者。生产者/消费者客户端查找主题以找到相应的Broker列表。

Message Model

  • Clustering
  • Broadcasting

Message Order

当使用DefaultMQPushConsumer时,你可能需要决定消费是顺序的还是并发的。

  • Orderly(顺序)

    有序的消息意味着消息的使用顺序与生产者为每个消息队列发送的顺序相同。如果你的使用场景要求必是须顺序的,你要确保只用一个队列存放消息。

    警告:如果消费顺序被指定,最大的消费并发数就是这个消费者组的消息队列的订阅数。

  • Concurrently(并发)

    并发使用消息时,消费消息的最大并发性仅受限于为每个消费者客户端指定的线程池。

快速开始

  1. Download & Build from Release

    > unzip rocketmq-all-4.2.0-source-release.zip > cd rocketmq-all-4.2.0/ > mvn -Prelease-all -DskipTests clean install -U > cd distribution/target/apache-rocketmq 复制代码
  2. Start Name Server

    > nohup sh bin/mqnamesrv & > tail -f ~/logs/rocketmqlogs/namesrv.log The Name Server boot success... 复制代码
  3. Start Broker

    > nohup sh bin/mqbroker -n localhost:9876 & > tail -f ~/logs/rocketmqlogs/broker.log  The broker[%s, 172.30.30.233:10911] boot success... 复制代码
  4. Send & Receive Messages

    > export NAMESRV_ADDR=localhost:9876 > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer SendResult [sendStatus=SEND_OK, msgId= ...  > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer ConsumeMessageThread_%d Receive New Messages: [MessageExt... 复制代码
  5. Shutdown Servers

    > sh bin/mqshutdown broker The mqbroker(36695) is running...
    Send shutdown request to mqbroker(36695) OK  > sh bin/mqshutdown namesrv The mqnamesrv(36664) is running...
    Send shutdown request to mqnamesrv(36664) OK
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐