`
m635674608
  • 浏览: 5027254 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

RocketMQ基本概念及原理介绍

 
阅读更多

基本概念

ProducerGroup

通常具有同样属性(处理的消息种类-topic、以及消息处理逻辑流程—分布式多个客户端)的一些producer可以归为同一个group。在事务消息机制中,如果某条发送某条消息的producer-A宕机,使得事务消息一直处于PREPARED状态并超时,则broker会回查 同一个group的其他producer,确认这条消息应该commit还是rollback。

ConsumerGroup

具有同样逻辑消费同样消息的consumer,可以归并为一个group。同一个group内的消费者,可以共同消费(CLUSTERING)对应topic的消息,达到分布式并行处理的功能。

Topoic

消息的逻辑管理单位。

Queue

消息的物理管理单位。一个Topic下可以有多个Queue,Queue的引入使得消息存储可以分布式集群化,具有了水平扩展的能力。

消费进度管理

RocketMQ的broker端,不负责推送消息,无论消费者是否消费消息,都将消息存储起来。谁要消费消息,就向broker发请求获取消息,消费记录由consumer来维护。RocketMQ提供了两种存储方式来保留消费记录:一种是保留在consumer所在的服务器上;另一种是保存在broker服务器上。用户还可以自己实现相应的消费进度存储接口。

默认情况下,采用集群消费(CLUSTERING),会将记录保存在broker端;而采用广播消费(BROADCASTING)则会将消费记录保存在本地。

顺序消息

用户实现MessageQueueSelector为某一批消息(通常是有同样的唯一的标示ID),选择同一个Queue,则这一批消息的消费将是顺序消费(并由同一个consumer完成消费)。

事务消息

这样的消息有多个状态,并且其发送是两阶段的。第一个阶段发送PREPARED状态的消息,此时consumer是看不见这种状态的消息的,发送完毕后回调用户的TransactionExecutor接口,执行相应的事务操作(如数据库),当事务操作成功时,则对此条消息返回commit,让broker对该消息执行commit操作,成为commit状态的消息对consumer是可见的。

基本原理

总览

RocketMQ以Topic来管理不同应用的消息。对于生产者而言,发送消息是,需要指定消息的Topic,对于消费者而言,在启动后,需要订阅相应的Topic,然后可以消费相应的消息。Topic是逻辑上的概念,在物理实现上,一个Topic由多个Queue组成,采用多个Queue的好处是可以将Broker存储分布式化,提高系统性能。[pagebreak][pagebreak]

RocketMQ中,producer将消息发送给Broker时,需要制定发送到哪一个队列中,默认情况下,producer会轮询的将消息发送到每个队列中(所有broker下的Queue合并成一个List去轮询)。

对于consumer而言,会为每个consumer分配固定的队列(如果队列总数没有发生变化),consumer从固定的队列中去拉取没有消费的消息进行处理。

Producer

Producer端(属于client)的逻辑概述:

producer端的逻辑都比较简单,将消息发送到某个Queue中即可,具体发送到那个Queue可以由用户控制(MessageQueueSelector接口),默认情况下,将轮询方式选择Queue。在producer端,会从NameServer将所有Broker的Topic及对应的Queue信息(即:TopicRoute信息)拉取到本地,然后根据<brokerName, queueId>组建成一个List。因此在MessageQueueSelector,可以看到所有的Queue信息。

RocketMQ将topic的消息以多个Queue来管理,使得其较为容易的就可以进行水平扩展,提供系统吞吐力。这样分布带来的问题,就是从全局上不能做到顺序性(很多时候也并不需要全局上的顺序性)。

RocketMQ提到支持顺序消息,实际上是指基于Queue级别的顺序。用户将某些需要满足顺序的一批消息(比如电商某个订单号的一系列后续操作、比如数据库的某个主键的insert、delete、update等操作)发送到固定的某个Queue中,则从这个Queue消费消息的consumer,针对这一批消息是顺序消费。

问题1:针对顺序消息的队列,是否可以做到不停服务下的集群动态扩展?

Consumer

consumer逻辑稍微复杂一点。初步思考,consumer端至少需要处理:

1、 消息的获取

2、 offset(消费进度)的管理与存储

3、 集群消费模式下,Queue的分配问题(rebalance)

RocketMQ对外提供了两种不同形式的Consumer:PushConsumer和PullConsumer。顾名思义,对于PullConsumer而言,用户需要主动调用相应的接口去拉取未消费的消息。对于PushConsumer而言,用户提供消息处理的CallBack,有未曾消费的消息时,会主动回调这个CallBack来处理消息。虽从用户角度而言,Consumer存在主动(pull)和被动(push),但RocketMQ本身的broker端仅仅保存所有的消息,并不负责push消息,因此PushConsumer的底层实现也是有一个长连接主动去broker上拉取未消费的消息,然后回调用户的callback逻辑。

http://pan.baidu.com/s/1geL6h6F

分享到:
评论

相关推荐

    RocketMQ实战与原理解析.zip

    在基础入门部分,作者详细介绍了RocketMQ的基本概念和架构,包括消息队列的基本原理、RocketMQ的组件角色(如NameServer、Producer、Consumer、Broker等)、以及如何快速搭建和部署RocketMQ环境。这部分内容对于初学...

    RocketMQ原理详解

    #### 二、RocketMQ核心组件介绍 **1. Producer(生产者)** 生产者是消息的创建者,负责将消息发送到Broker。生产者在发送消息之前,首先需要通过NameServer获取到目标Broker的地址信息。 - **启动流程**:生产者...

    《RocketMQ原理简介》PDF版本下载.txt

    下面将对RocketMQ的基本概念、架构、工作原理以及该文档可能涉及的关键技术进行详细的介绍。 ### RocketMQ简介 RocketMQ是由阿里巴巴开发的一款分布式消息中间件,主要用于解决大规模分布式系统中的消息传递问题。...

    RocketMQ-原理简介

    RocketMQ的原理介绍从其基本概念和架构开始。消息中间件解决的问题涉及消息的发布与订阅、消息优先级、顺序消息、消息过滤、消息持久化、消息的可靠性传输、低延迟消息传递、消息重试机制等。它的物理部署结构通常...

    rocketmq可视化界面,rocketmq-console

    使用RocketMQConsole时,你需要对RocketMQ的基本概念有一定了解,并且熟悉如何配置和启动Console服务。在实际操作中,你可能还需要关注网络环境、权限设置以及日志分析等方面的问题,以确保RocketMQ的稳定运行。通过...

    RocketMQ学习及V3.2.4最新开发指南

    本指南将针对RocketMQ V3.2.4版本,介绍其核心概念、功能特性以及如何进行开发实践。 一、RocketMQ核心概念 1. 生产者(Producer):生产者是消息的发送方,负责生成消息并将其发送到RocketMQ的队列中。 2. 消费者...

    rocketMQ学习代码及文档资料

    1. ** RocketMQ基本概念** - **消息模型**:RocketMQ支持发布/订阅和点对点两种消息模型,满足不同场景需求。 - **角色组件**:主要包括Producer(生产者)、Consumer(消费者)、NameServer(命名服务器)和...

    RocketMQ实战与原理解析

    ### RocketMQ实战与原理解析 #### 一、RocketMQ简介 Apache RocketMQ是一个分布式消息中间件,由阿里巴巴捐赠并成为Apache顶级项目。RocketMQ具备高性能、低延迟、高可靠等特性,支持发布/订阅模式、消息过滤、...

    rocketmq-原理简析(适合初级使用者)

    本篇文章主要针对初级使用者,解析RocketMQ的基本概念和工作原理。 1. **ProducerGroup** ProducerGroup 是一组具有相同属性的Producer的集合,这些属性包括处理的消息类型(Topic)以及处理逻辑。在事务消息机制...

    消息中间件 RocketMQ 开发指南

    总的来说,《RocketMQ开发指南》涵盖了RocketMQ的基本概念、使用方式和高级特性,对于想要深入学习和使用RocketMQ的开发者来说,是一份宝贵的资源。通过这本书,你可以全面了解RocketMQ的架构原理,掌握如何在实际...

    Rocketmq学习指南

    通过这三份PDF文档的学习,读者将能够全面了解RocketMQ的基本概念、工作原理,并掌握其在实际项目中的应用技巧,从而提升在分布式系统中使用消息队列的能力。无论你是从事电商、金融还是大数据领域的开发者,...

    rocketMQ-master.zip

    5. Message Queue:消息队列是RocketMQ中的基本概念,每个Topic可以包含多个Message Queue,消息会被均匀分配到不同的Message Queue中。 6. Topic:主题是消息的分类,Producer发送的消息需要指定一个Topic,...

    rocketmq实例代码

    **一、RocketMQ基本概念** 1. **主题(Topic)**: 主题是消息的分类,一个应用可以有多个主题,每个主题可以被多个生产者和消费者共享。 2. **队列(Queue)**: 队列是主题的物理分片,每个主题可以有多个队列,...

    rocketmq代码示例及Linux编译安装说明

    通过以上步骤,你不仅可以了解RocketMQ的基本概念,还可以在Linux环境下搭建起一套运行环境,并通过实际编码加深对RocketMQ的理解。记得在实践中不断探索和学习,以掌握更多的RocketMQ高级特性和应用场景。

    JAVA架构RocketMQ单机环境搭建pdf+架构师视频资源

    首先,让我们了解RocketMQ的基本概念。RocketMQ是一个基于发布/订阅模式的消息队列,支持高吞吐量、低延迟、高可用性和可扩展性。它主要包含四个组件:NameServer、Producer、Consumer和Broker。NameServer是服务...

    RocketMQ消息队列资料

    - ** RocketMq之初识消息中间件**:这部分内容可能涵盖了消息中间件的基本概念、工作原理,以及RocketMQ在消息中间件领域中的独特优势。 - **31-Rocketmq特性详解**:深入理解RocketMQ的各项特性,包括高可用、高...

    rocketmq-externals-master.zip

    "rocketmq-externals-master.zip"是一个包含RocketMQ源码的压缩包,对于深入理解RocketMQ的工作原理、性能优化以及进行二次开发非常有帮助。下面将详细阐述RocketMQ的核心概念、架构、工作流程以及源码解析的关键点...

    java -RocketMQ实战视频教程(上下全集)

    通过对上述知识点的学习,不仅可以帮助开发者全面掌握RocketMQ的基本原理和技术细节,还能够提升其解决实际问题的能力。无论是对于初学者还是有一定经验的开发者来说,“java -RocketMQ实战视频教程(上下全集)”都...

    RocketMQ源码

    本文将深入探讨RocketMQ的源码,解析其核心概念、架构设计以及实现原理。 1. **核心概念** - **消息模型**:RocketMQ支持发布/订阅模型和点对点模型,前者允许多个消费者订阅同一主题,后者则确保每条消息仅被一个...

Global site tag (gtag.js) - Google Analytics