RocketMQ:与Kafka对比应用场景及组成架构

article/2025/10/7 21:43:57

在这里插入图片描述

文章目录

    • 1.应用场景
      • 1.1.RocketMQ应用场景
      • 1.2.Kafka应用场景
    • 2.架构组成
      • 2.1.RocketMQ架构组成
      • 2.2.Kafka架构组成

1.应用场景

1.1.RocketMQ应用场景

RocketMQ 是阿里巴巴开源的分布式消息中间件,前身为阿里内部消息系统Notify及MetaQ。RocketMQ被广泛应用于电商、订单、金融等分布式应用领域,其主要特点和应用场景如下:
RocketMQ主要特点:

  • 金融级别可靠性
  • 高性能及大量数据存储
  • 低延迟消费
  • 事务消息、顺序消息
  • 定时消息
  • 重试队列及死信队列
    RocketMQ主要应用场景:
  • 系统解耦、削峰、异步化(金融级应用)
  • 电商、订单、金融、秒杀、库存等应用间消息传递

1.2.Kafka应用场景

Kafka作为一款热门的消息队列中间件,具备高效且较可靠的消息异步传递机制,主要用于不同系统间的数据交流和传递,在企业解决方案、金融支付、电信、电子商务、社交、即时通信、视频、物联网、车联网等众多领域都有广泛应用,其主要特点和应用场景如下:
Kafka主要特点:
Kafka最早设计的目的是作为LinkedIn的活动流和运营数据的处理管道。这些数据主要是用来对用户做用户画像分析以及服务器性能数据的一些监控,所以Kafka一开始设计的目标就是作为一个分布式、高吞吐量的消息系统,所以适合运用在大数据传输场景。

  • 高性能
  • 高吞吐
  • 海量数据处理
  • 海量数据存储
    Kafka主要应用场景:
    主要围绕的特点就是“高吞吐、大数据、海量数据存储”这三个特点来进行选型。
  • 系统解耦、削峰、异步化(海量数据级应用)
  • 实时流式消息处理
  • 实时日志系统
  • 实时监控系统
  • 大规模分析、爬虫
  • 大规模模型训练

2.架构组成

2.1.RocketMQ架构组成

核心概念:

  • Topic:表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。

  • Queue:一个Topic下存在一个或多个Queue,和Kafka中的Partition语义一致,每个Message会被发送到Topic的一个Queue中。Queue的作用是对Topic下的消息负载均衡。

  • Tag:RocketMQ特有,一个Topic可含有多个Tag,用于同一主题下区分不同类型的消息。来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同标签,比如订单消息中可区分为取消订单消息和下单消息,可以分为两个Tag来订阅。

  • Message:消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。RocketMQ中每个消息拥有唯一的Message ID,且可以携带具有业务标识的Key。系统提供了通过Message ID和Key查询消息的功能。

  • Producer:负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。

  • Consumer:负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从Broker服务器拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。

  • Broker:消息中转角色,负责存储消息、转发消息。代理服务器在RocketMQ系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。
    在这里插入图片描述

  • Name Server:名称服务充当路由消息的提供者。生产者或消费者能够通过名字服务查找各主题相应的Broker IP列表。多个Namesrv实例组成集群,但相互独立,没有信息交换。

  • Pull Model:Consumer消费的一种类型,应用通常主动调用Consumer的拉消息方法从Broker服务器拉消息、主动权由应用控制。一旦获取了批量消息,应用就会启动消费过程。

  • Push Model:Consumer消费的一种类型,该模式下Broker收到数据后会主动推送给消费端,该消费模式一般实时性较高。

  • Producer Group:同一类Producer的集合,这类Producer发送同一类消息且发送逻辑一致。如果发送的是事务消息且原始生产者在发送之后崩溃,则Broker服务器会联系同一生产者组的其他生产者实例以提交或回溯消费。

  • Consumer Group:同一类Consumer的集合,这类Consumer通常消费同一类消息且消费逻辑一致。消费者组使得在消息消费方面,实现负载均衡和容错的目标变得非常容易。要注意的是,消费者组的消费者实例必须订阅完全相同的Topic。RocketMQ 支持两种消息模式:集群消费(Clustering)和广播消费(Broadcasting)。

  • OffSet:一般指某个消费者消费到某个Topic下Queue的偏移量,通过这个偏移量继续往后消费。需要注意的是,RocketMQ或Kafka是不会在消费消息后把消息删除的,而是保存一定时间,比如RocketMQ默认来说对以Broker集群为单位的持久化是2天,而Kafka可以设置单个Topic的消息持久化时间,默认为全局7天。
    以下是1个Topic含有5个Queue,并且有一个消费组含有2个消费者实例的消费情况:
    在这里插入图片描述

每个消费者可以消费多个Queue,但是一个Queue只能被一个消费者消费,这样可以做到Queue内的消息严格有序消费,假如消费组含有6个实例,那么多余的1个消费者将空闲,所以最优情况下,Queue的数量=所有消费组中消费者的数量,做到1对1消费。
在这里插入图片描述

  • Clustering:集群消费模式下,相同Consumer Group的每个Consumer实例平均分摊消息,假如需要有两个业务,同时消费topic的全量数据,那么可以多启动一个消费组,不同消费组之间的消费进度不互相影响,独立维护OffSet。
    在这里插入图片描述

  • Broadcasting:广播消费模式下,相同Consumer Group的每个Consumer实例都接收全量的消息,一般不会使用这个广播模式,因为一类业务通常由一个消费组为单位消费,而不是以一个消费者为单位消费。
    在这里插入图片描述

整体架构:
在这里插入图片描述

RocketMQ的架构中不存在Zookeeper这种外部注册中心,而是自行实现了NameS而ver,方便管理。

  • BrokerServer:Broker主要负责消息的存储、投递和查询以及服务高可用保证
  • NameServer:NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。主要包括两个功能:Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;路由信息管理,每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Producer,Consumer仍然可以动态感知Broker的路由的信息。
  • Producer:消息发布的角色,支持分布式集群方式部署。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。
  • Consumer:消息消费的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播方式的消费,它提供实时消息订阅机制,可以满足大多数用户的需求。

2.2.Kafka架构组成

RocketMQ的架构和概念很多来自于Kafka,所以这里不再详细展开说明。
核心概念:

  • Producer
    Producer即消息的生产者,它负责创建消息,然后将其投递到Kafka中。
  • Consumer
    Consumer即消息等消费者,它连接到Kafka中并且获取消息,进行相应的业务处理。
  • Broker
    Broker即服务代理节点(集群),用以处理消息。对于Kafka而言,Broker可以简单地看作一个独立的Kafka实例节点,但一般将其视为Kafka的集群,它里面由许多个服务代理节点broker组成。
  • Zookeeper
    Zookeeper的作用是管理Broker集群的元数据及Leader选举。在Kafka 3.0之后预计完全移除对Zookeeper的依赖,而是基于Raft协议,“kafka on kafka”的模型来保存集群元数据及Leader选举。
    在这里插入图片描述

5.Topic
Topic即消息主题。生产者和消费者面向主题投递消息和消费消息 。
6.Partition
Partition即消息分区。每个Topic都含有若干个分区用以存储消息,同一主题的不同分区可以存储在不同的broker中。由于消息的写入会追加到分区尾部,所以Kafka的消息有序性是依赖分区等有序性来实现的,和RocketMQ的Queue是一个作用。
整体架构:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/U0Io8rp5.shtml

相关文章

详解Kafka应用场景及工作原理

一、概述 Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的发布/订阅式分布式消息系统 二、特性 持久性、可靠性:消息被持久化到…

Kafka应用场景

序 在学习一门新技术之前,我们需要先去了解一下这门技术的具体应用场景,使用它能够做什么,能够达到什么目的,学习kafka的初衷是用作消息队列;但是还可以使用Kafka Stream进行一些实时的流计算,多用于大数据…

Kafka基本概念与应用场景

一、Kafka的定义 Apache Kafka是一种分布式的、基于发布/订阅的消息系统,由Scala语言编写而成。它具备快速、可扩展、可持久化的特点。Kafka最初由LinkedIn开发,并于2011年初开源, 2012年10月从Apache孵化器毕业,成为Apache基金会…

kafka使用场景与设计原理

目录 1 kafka的介绍 2 架构 2.1 工作流程 2.2 副本原理 2.3 分区和主题的关系 2.4 生产者 2.4.1 为什么分区-可以水平扩展 2.4.2 分区策略 2.5 消费者 2.5.1 消费方式 2.5.2 分区分配策略 2.6 数据可靠性保证 2.6.1 副本数据同步策略 2.6.2 ACK 应答机制 2.6.3 …

kafka学习(六):kafka应用场景

消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,Zero…

kafka使用场景

kafka基本介绍 kafka是使用scala语言和java语言编写的一套高可用的消息队列,广泛应用在后端开发里,是后端开发里的一个重要中间件。 kafka的使用场景 1、异步处理 下图为一个订单状态在后端各个模块之间的处理流程,后一个流程必须要等到前…

kafka的应用场景

关于消息队列的使用 一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ…

解开Kafka神秘的面纱(一):kafka架构与应用场景

文章目录 一、前言二、Kafka简介2.1 Kafka简介2.2 基于分布式的Kafka 三、Kafka架构3.1 消息生产与消费3.1.1 消息生产与消费模型3.1.2 Kafka消费单元是消费者组3.1.3 Kafka只消费Partition主分区的消息3.1.4 消费者组中的每个消费者的offset3.1.5 小结 3.2 Partition备份与选主…

Metricbeat使用与入门-1 收集系统指标数据到ES中

Metricbeat由模块和指标集组成。Metricbeat 模块定义了从特定服务(例如Redis,MySQL等)收集数据的基本逻辑。 系统环境:CentOS 7.4 ES版本:7.6.1 Metricbeat版本:7.6.1 1 安装 Metricbeat版本:7…

Beats:Beats 入门教程 (二)

这篇文章是 “Beats 入门教程 (一)”的续篇。在上一篇文章,我们主要讲述了 Beats 的一些理论方面的知识。在这篇文章中,我们将具体展示如何使用 Filebeat 及 Metriceat 把数据导入到我们的 Elasticsearch 并对他们进行分析。 安装…

MetricBeat + Elasticsearch + Kibana 实现监控指标可视化

1、Elasticsearch 监控指标可视化概述 之前的推文 Elasticsearch 磁盘使用率超过警戒水位线,怎么办?有读者留言:“配合监控系统”。 是的,监控系统就像我们的车载监控,平时可能用不到,一用到的时候就是“大…

关于 Kubernetes中集群统一日志管理方案(Elasticsearch+Filebeat+Kibana+Metricbeat)搭建的一些笔记

写在前面 学习K8s,所以整理分享给小伙伴这里要说明的是:这一套方案太吃硬件了,需要高配的本才能跑起来我的16G运存,集群用三个虚机部署的,工作节点都是3核5G的配置折腾了两天没有跑起来,后来放弃了,查了下&…

metricbeat实现容器监控

Metricbeat是elastic下的项目,在5.1及之后的版本中支持对Docker的监控,需与EK配合使用能在界面上显示,也可直接将数据导入kafka中。 -1.安装 使用版本: elasticsearch-5.2.0-1.noarch(用于输出显示) kibana-5.2.0-…

Centos 7.9 安装 ELK8.1.0+MetricBeat

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 环境 一、前期准备: 1.下载ELKMetircBeat rpm包 2.CentOS 设置 二、安装Elasticsearch 1.安装rpm 2.配置Elasticsearch 修改配置档 开防火墙 设…

Storm Metric

storm从0.9.0开始,增加了指标统计框架,用来收集应用程序的特定指标,并将其输出到外部系统。 本文中采用的监听类是LoggingMetricsConsumer,统计指标值将输出到metric.log日志文件中。 当然也可以自定义监听类,只需要实…

Beats:如何启动 Metricbeat 中的 MySQL 模块 - query Metricset

在我做之前的教程 “Observability:Elastic Metrics 应用介绍”,我发现当我尝试启动 MySQL 模块中的 query metricset 会出现错误。之后我发现官方文档也缺少相应的资料。在今天的文章中,我将介绍如上启动这个 metricset。在使用这个 metrics…

Metricbeat源码分析

0X00 版本信息 Golang:1.16.8 Metricbeat:7.14 0X01 Metricbeat介绍 Metricbeat quick start: installation and configuration | Metricbeat Reference [7.14] | Elastichttps://www.elastic.co/guide/en/beats/metricbeat/7.14/metricbeat-install…

Elk-Metricbeat配置Tomcat的日志分析 (Metricbeat-part3)

1, 安装软件 Metricbeat安装 请参考之前的文档链接: Metricbeat 8.4.0 linux 安装(Metricbeat-part1)_yangkei的博客-CSDN博客Metricbeat 能够以一种轻量型的方式,输送各种系统和服务统计数据,从 CPU 到内存,从 Redis 到 Nginx…

Metricbeat config file metricbeat.yml must be owned by the user identifier (uid=0) or root

Linux 上修改呢metricbeat.yml的权限,启动的时候报错。查了下解决方案 记录下 https://www.elastic.co/guide/en/beats/libbeat/5.3/config-file-permissions.html#config-file-permissions 简而言之就是所有者必须是root,然后权限必须是0644 sudo c…

Elk-Metricbeat配置Nginx的日志分析 (Metricbeat-part2)

1 情况说明: Metricbeat的基本安装部分可以参考: Metricbeat 8.4.0 linux 安装(Metricbeat-part1)_yangkei的博客-CSDN博客 下面来聊聊如何通过elkmetricbeat来监控Nginx日志。 借用网上以为大师的图就是这样子 Metricbeat 采集 Nginx 指标_叶康铭的…