RocketMq灰皮书(一)------选型&RocketMQ名词


一. MQ选型对比

目前业内常用的MQ框架有一下几种:

  • Kafka
  • RabbitMQ
  • RocketMQ

除此之外,还有ActiveMQ等,但是ActiveMQ目前使用已经很少了,在一些老项目中可能还能看到,因此在这里不做赘述.


(1) Kafka

优点:

  • 高吞吐量

    在常规机器下,使用Kafka,一台机器可以达到每秒十几万的QPS.

  • 高性能

    消息发送性能很高,达到毫秒级别.

  • 高可用

    支持集群部署,部分机器宕机依然可以正常使用

缺点:

  • 数据丢失

    Kafka收到数据会写入磁盘缓冲区,并没有直接落地到物理磁盘,如果此时机器本身故障宕机,可能会导致缓冲区的数据丢失.

  • 功能单一

    主要支持发送消息消费消息,没有额外的功能.

适用场景:

业内一般适用Kafka来进行用户行为日志的采集和传输.


(2) RabbitMQ

优点:

  • 数据不丢失

  • 高可用

  • 拥有高级功能

    支持死信队列消息重试

缺点:

  • 吞吐量低

    每秒几万的QPS,在并发比较高的情况下比较困难.

  • 集群扩展比较麻烦

  • 使用erlang开发,二次开发比较困难

使用场景:

一般小型的公司,吞吐量并不高的系统中还在使用,基本上满足项目需求即可.


(3) RocketMQ

优点:

  • 高吞吐量

    单机可达10万QPS

  • 高可用

  • 支持集群部署

  • 可以通过配置保证数据不丢失

  • 支持高级功能

    延迟消息事务消息死信队列消息回溯

  • 基于java开发,符合国内很多公司的技术栈,可以很方便的进行二次开发

缺点:

  • 官方文档不够详细,比前面两款略有不足

使用场景:

在大公司中,日常的项目需求,一般都使用比较频繁.


二. RocketMQ中的概念介绍

在详细了解RocketMq之前,有必要先对它涉及的所有相关的概念有所了解,这样在后面使用的时候就能有个初步的印象.

我们用一个简单的流程来介绍,一般来说,我们使用MQ的流程是这样的:

  1. 有2个微服务A和B,然后运维部署好MQ
  2. A服务发送消息到MQ
  3. B服务从MQ获取消息,处理逻辑

以上步骤如图:

站在上帝视角,服务A服务B都是在利用MQ传递消息,即可以说:(1)服务A生产消息,服务B消费消息;(2)RocketMq只是临时持有消息,类似数据库,看到这里,我们已经发现在这个流程中,有两个比较重要的概念了.

Producer

消息生产者,即上图中的服务A

Consumer

消息消费者,即上图中的服务B

Message

代表一条消息,由producer产生,由consumer消费

Broker

每台机器上部署的RocketMq一般称为Broker,每个Broker会收到不同的消息,consumer会从Broker上获取消息.

通过简单的一个消息发送的图示,我们得到了RocketMq中的四个比较重要的概念,不过既然本系列博文取名灰皮书,仅仅到此是不够的,接下来我们思考几个问题.

  • 服务A要发送消息到MQ,它具体是怎么实现的?
  • 服务B要消费MQ的消息,它又是怎么拿到这些消息的?
  • Broker自己要保存消息,以供服务B来获取,那么它是怎么存储的呢?
  • RocketMQ高吞吐,且可以集群部署,支持HA,这些又是如何实现的?

以上这些问题,将会在下一篇博文中逐步探索,力求对Rocket的使用和原理都有一定的认识.


总结

写到这里,其实我们只是初步了解了业界使用的MQ的优劣对比,了解了RocketMq中存在的四个概念.探究学识,由浅入深,只有对这些基本的东西理解透彻,才能更进一步.

个人公众号<橙耘自留地>日前已经开通,后续博主发布的文章都会一并更新到公众号,如有需要,自行查阅.

关于橙耘自留地,是我个人聚焦互联网技术栈学习分享的一个平台,创立之初是因为目前业内各种技术课程资料层次不齐,褒贬不一,有时候一门课花费高价买入,其实内含草包,有时偶尔低价得之,却又大有干货.因此我会根据大家的意见和评价,选择不同的技术栈去学习,一为提升我自己的技术,二为大家梳理出质量比较好的课程,以作参考.同时,相关的学习心得也会一并更新到博客和公众号.

RocketMq灰皮书(一)------选型&RocketMQ名词的更多相关文章

  1. RocketMq灰皮书(三)------MQ使用

    RocketMq灰皮书(三)------MQ使用 在使用MQ之前,我们回顾一下前两篇博文的内容. 我们大致了解了RocketMQ的四个概念,分别是:Producer,Consumer,Message和 ...

  2. RocketMq灰皮书(二)------本地部署启动MQ

    RocketMq灰皮书(二)------本地部署启动MQ Windows10本地部署RocketMQ 在上一篇文章中,我们对rocket的几个基本概念进行了介绍,也了解了业内几大消息中间件的区别.在本 ...

  3. rocketMq排坑:如何设置rocketMq broker的ip地址

    在工作中遇到了一个这个问题,就是我们rocketmq是部署在云主机上的 但是我们的开发同事在自己的电脑连接rocketmq链接不上 报错显示Caused by: org.apache.rocketmq ...

  4. RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群

    1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...

  5. RocketMQ学习笔记(15)----RocketMQ的消息模式

    在前面学习ActiveMQ时,看到ActiveMQ可以是队列消息模式,也可以是订阅发布模式. 同样,在RocketMQ中,也存在两种消息模式,即是集群消费模式和广播消费模式. 1. 集群消费模式 跟A ...

  6. RocketMQ学习笔记(13)----RocketMQ的Consumer消息重试

    1. 概念 Producer端重试: 生产者端的消息失败,也就是Producer往MQ上发消息没有发送成功,比如网络抖动导致生产者发送消息到MQ失败. 这种消息失败重试我们可以手动设置发送失败重试的次 ...

  7. RocketMQ学习笔记(14)----RocketMQ的去重策略

    1. Exactly Only Once (1). 发送消息阶段,不允许发送重复的消息 (2). 消费消息阶段,不允许消费重复的消息. 只有以上两个条件都满足情况下,才能认为消息是“Exactly O ...

  8. RocketMQ学习笔记(4)----RocketMQ搭建双Master集群

    前面已经学习了RockeMQ的四种集群方式,接下来就来搭建一个双Master(2m)的集群环境. 1. 双Master服务器环境 序号 ip 用户名 密码 角色 模式 (1) 47.105.145.1 ...

  9. RocketMQ(2)---Docker集群部署RocketMQ

    RocketMQ(2)-Docker集群部署RocketMQ =前言= 1.因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服 ...

随机推荐

  1. python学习:随机数的产生,随机数拼接字在脚本中的应用

    学习random的时候,看到一份表格觉得不错,转载记录到自己的笔记中: random以及它们在numpy.random中对应的函数应该会很有帮助: 注意:NumPy专门用于构建和操作大型多维数组.如果 ...

  2. SpringMVC 中 @ControllerAdvice 注解

    SpringMVC 中 @ControllerAdvice 注解 1.@ControllerAdvice 1.1 全局异常处理 1.2 全局数据绑定 1.3 全局数据预处理 原文地址: 江南一点雨:S ...

  3. maven基础学习-为什么要用maven,帮助解决了什么问题,怎么解决的,希望以后学习每个知识点都可以这样问下自己

    maven基础学习 第1章 Maven介绍 1.1 什么是Maven 1.1.1 什么是Maven Maven 的正确发音是[ˈmevən],而不是"马瘟"以及其他什么瘟.Mave ...

  4. python中numpy库的一些使用

    想不用第三方库实现点深度学习的基础部分,发现numpy真的好难(笑),在此做点遇到的函数的笔记 惯例官方文档:https://docs.scipy.org/doc/numpy-1.16.1/refer ...

  5. 负载均衡之LVS与Nginx对比

    今天总结一下负载均衡中LVS与Nginx的区别,好几篇博文一开始就说LVS是单向的,Nginx是双向的,我个人认为这是不准确的,LVS三种模式中,虽然DR模式以及TUN模式只有请求的报文经过Direc ...

  6. CF 1405E Fixed Point Removal【线段树上二分】

    CF 1405E Fixed Point Removal[线段树上二分]  题意: 给定长度为\(n\)的序列\(A\),每次操作可以把\(A_i = i\)(即值等于其下标)的数删掉,然后剩下的数组 ...

  7. 【noi 2.6_687】Color Tunnels(DP)

    P.S.o(︶︿︶)o 唉~虽然这题方程不难,但题目长,代码长,我花了超过3小时!(>﹏<)悲伤辣么大~~~ 谨此题解惠及众人,hh. 题意:给定长度为M的一串颜色序列,和平面上的N个颜色 ...

  8. 后缀数组Da模板+注释 以及 dc3模板

    后缀数组Da模板: 1 /* 2 后缀数组倍增法Da板子 3 */ 4 #include <cstdlib> 5 #include <cstring> 6 #include & ...

  9. Codeforces Round #666 (Div. 2) C. Multiples of Length (构造,贪心)

    题意:有一个长度为\(n\)的序列,可以操作\(3\)次,每次选取一段区间,然后区间的元素加减区间长度的倍数,\(3\)次操作后使得序列所有元素为\(0\),问具体操作情况. 题解:假如我们能选择一整 ...

  10. GYM101810 ACM International Collegiate Programming Contest, Amman Collegiate Programming Contest (2018) M. Greedy Pirate (LCA)

    题意:有\(n\)个点,\(n-1\)条边,每条边正向和反向有两个权值,且每条边最多只能走两次,有\(m\)次询问,问你从\(u\)走到\(v\)的最大权值是多少. 题解:可以先在纸上画一画,不难发现 ...