RabbitMQ

Kafka和RabbitMQ的区别?

我怕爱的太早我们不能终老 提交于 2020-03-25 15:30:54
3 月,跳不动了?>>> 1.区别: 性能(吞吐量) : Kafka 的吞吐量(性能)要比RabbitMQ高出1到2个数量级,一般RabbitMQ 的单机QPS(Query Per Second/每秒查询率)在万级别之内,而Kafka的单机QPS可以维持在十万级别,甚至可以达到百万级。 可靠性和可用性 : 消息中间件的可靠性是指对消息不丢失的保障程度;而消息中间件的可用性是指无故障运行的时间百分比,通常用几个 9 来衡量。从狭义的角度来说,分布式系统架构是一致性协议理论的应用实现,对于消息可靠性和可用性而言也可以追溯到消息中间件背后的一致性协议。 对于Kafka而言, 其采用的是类似PacificA的一致性协议,通过ISR(In-Sync-Replica)来保证多副本之间的同步,并且支持强一致性语义(通过acks实现)。 而RabbitMQ 是通过镜像环形队列实现多副本及强一致性语义的。多副本可以保证在master节点宕机异常之后可以提升slave作为新的master而继续提供服务来保障可用性。 扩展能力 :消息中间件的扩展能力能够增强其用可用能力及范围,RabbitMQ可以基于其插件化扩展实现支持多种消息协议。Kafka可以从集群部署上实现其水平扩展能力,其基本上可以达到线性容量提升的水平,在 LinkedIn 实践介绍中就提及了有部署超过千台设备的Kafka集群。 应用场景

Mac下 rabbitmq 安装

梦想的初衷 提交于 2020-03-25 14:35:26
3 月,跳不动了?>>> 进入mac命令管理界面 我们通过brew进行安装 brew install rabbitmq 等待系统安装. 如果看到以下页面则证明我们安装成功了 mac 通过 brew 安装后 默认安装在 /usr/local/Cellar/rabbitmq/下面 进入rabbitmq下通过命令进行启动 cd /usr/local/Cellar/rabbitmq/3.7.7/ sbin/rabbitmq-server 安装插件在sbin目录下执行sudo ./rabbitmq-plugins enable rabbitmq_management 执行时候如果需要录入密码则为mac安装密码.如果mac没有密码则不需要录入 登录浏览器 http://localhost:15672进行查看 初始化默认密码都为guest/guest OK 到此我们通过mac去安装rabbitmq就安装完毕了。 来源: oschina 链接: https://my.oschina.net/u/2296021/blog/1864960

MAC OS X 安装、配置、启动 rabbitMQ

為{幸葍}努か 提交于 2020-03-25 13:39:05
3 月,跳不动了?>>> 官网链接 :http://www.rabbitmq.com/install-standalone-mac.html MAC OS X 系统安装 rabbitMQ 非常简单,不需要我们自行安装 Erlang ,包中已经包含了。 ①下载 rabbitmq-server-mac-standalone-3.5.7.tar.gz 【 Description : Packaged for Mac systems (tar.gz) shipping Erlang 17.5 】 下载地址 http://download.csdn.net/detail/tonylllz/9368103 ②解压 tar zxvf rabbitmq-server-mac-standalone-3.5.7.tar.gz 解压后得到文件夹 rabbitmq_server-3.5.7 ③启动 rabbitMQ cd rabbitmq_server-3.5.7/sbin ./rabbitmq-server restart 这里需要注意一个问题 rabbitmq-server 脚本在启动的过程会有 这样的操作,该操作会将 hayashishaochietekiMacBook-Air 当做域名进行解析,正常情况下我们是没有将我们的主机名做过域名解析的。为了能够让服务正常的启动。我们需要对我们的主机名做

RabbitMQ/消息队列的优缺点

て烟熏妆下的殇ゞ 提交于 2020-03-25 12:10:38
3 月,跳不动了?>>> 1 . 优点:在特殊场景下其对应的好处,详见上篇文章: 为什么要使用RabbitMQ(业务场景) 应用异步 应用解耦 流量削峰 2.缺点: 系统可用性降低 :系统引入外部依赖越多,越容易挂掉。本来A系统调用BCD系统好好的,加一个MQ统一连接BCD系统,万一MQ挂掉,整套系统就崩溃了。见下图所示: 系统复杂度提高 :在整套系统中硬生生的加入MQ,对于保证没有消息重复消费的问题、对于保证消息传递顺序性问题、对于处理消息丢失的问题都比较困难 一致性问题 :可能存在A系统处理完请求直接返回成功,但是在 BCD三个系统那里,BD 两个系统写库成功了,结果C系统写库失败了,造成数据不一致问题。 来源: oschina 链接: https://my.oschina.net/u/4480939/blog/3210712

为什么要使用RabbitMQ(业务场景)

岁酱吖の 提交于 2020-03-25 10:22:44
3 月,跳不动了?>>> 主要是原因有三点:应用异步、应用解耦、流量削峰。 1 .应用异步 :就订单系统而言,下单成功后,需要给用户发送一个下单成功的短信,一般的做法是用户下单后直接调用接口给用户发短信,但是如果调用接口或者是调用接口的(短信)运营商出现问题,就会造成下单过程阻塞,导致整个下单流程不成功,(/用户收不到响应/),当使用RabbitMQ,引入消息队列后,把发送短信这种不是必须的业务逻辑进行异步处理,就能有效避免下单过程中的阻塞问题,(/用户下单后很快就会收到响应/)。 2.应用解耦 :一般在用户下单成功后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口来减少库存。但是这种做法有两个缺点,一是当库存系统出现故障时,订单就失败;二是订单系统和库存系统高度耦合。但是引入RabbitMQ后,对订单系统来说,用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功;对库存系统来说,在消息队列上订阅下单的消息,获取下单消息,进行库存操作,就算库存系统出现问题,消息队列也能保证消息的可靠投递,不会导致消息的丢失。 3.流量削峰 :这边流量削峰功能主要应用在秒杀活动中。在秒杀活动中,一般会因为流量过大,导致应用挂掉,为了解决这个问题,在应用前端(/库存系统前端/)加入消息队列,在这个订单系统,服务器收到用户的请求后,首先写入消息队列

python - 操作RabbitMQ

大城市里の小女人 提交于 2020-03-24 18:20:02
介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。 应用场景: RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具。消息队列的使用场景大概有3种: 1、系统集成,分布式系统的设计。各种子系统通过消息来对接,这种解决方案也逐步发展成一种架构风格,即“通过消息传递的架构”。 2、当系统中的同步处理方式严重影响了吞吐量,比如日志记录。假如需要记录系统中所有的用户行为日志,如果通过同步的方式记录日志势必会影响系统的响应速度,当我们将日志消息发送到消息队列,记录日志的子系统就会通过异步的方式去消费日志消息。 3、系统的高可用性,比如电商的秒杀场景。当某一时刻应用服务器或数据库服务器收到大量请求,将会出现系统宕机

Windows安装RabbitMQ

两盒软妹~` 提交于 2020-03-24 16:57:32
3 月,跳不动了?>>> 1、安装erlang 1.1、下载erlang安装包 下载地址: http://www.erlang.org/downloads 1.2、安装erlang 双击运行“otp_win64_22.3.exe”安装包,一路next直到完成。 1.3 、配置erlang 打开系统高级设置,高级系统设置-->环境变量-->“新建”系统环境变量 变量名:ERLANG_HOME=刚安装的路径 将%ERLANG_HOME%\bin加入到path中。 1.4、测试erlang windows键+R键,输入cmd,再输入erl,看到版本号就说明erlang安装成功了。 2、安装RabbitMQ 2.1、安装RabbitMQ 双击运行:rabbitmq-server-3.8.3.exe,按照安装向导,安装完成 2.2、安装RabbitMQ插件 RabbitMQ安装好后接下来安装RabbitMQ-Plugins。打开命令行cd,输入RabbitMQ的sbin目录。 然后在后面输入rabbitmq-plugins enable rabbitmq_management命令进行安装 2.3、启动 打开sbin目录,双击rabbitmq-server.bat 访问 http://localhost:15672 , 默认用户名和密码:guest/guest 来源: oschina 链接:

RabbitMQ脑裂OOM

不打扰是莪最后的温柔 提交于 2020-03-24 11:22:30
一 网络原因导致MQ脑裂: 问题重现: Network partition detected Mnesia reports that this RabbitMQ cluster has experienced a network partition. There is a risk of losing data. Please read RabbitMQ documentation about network partitions and the possible solutions. 当出现网络分区时,不同分区里的节点会认为不属于自身所在分区的节点都已经挂了,对 queue、exchange、binding 的操作仅对当前分区有效。在 RabbitMQ 的默认配置下,即使网络恢复了也不会自动处理网络分区带来的问题从而恢复集群。RabbitMQ(3.1+)会自动探测网络分区,并且提供了配置来解决这个问题。 [ {rabbit, [{tcp_listeners,[5672]}, {cluster_partition_handling, ignore}] } ]. RabbitMQ 提供了三种配置: 1、ignore:默认配置,发生网络分区时不作处理,当认为网络是可靠时选用该配置 2、autoheal:各分区协商后重启客户端连接最少的分区节点,恢复集群(CAP 中保证 AP,有状态丢失

消息中间件Kafka与RabbitMQ谁更胜一筹?

时光毁灭记忆、已成空白 提交于 2020-03-23 19:25:01
3 月,跳不动了?>>> 在 IM 这种讲究高并发、高消息吞吐的互联网场景下,MQ 消息中间件是个很重要的基础设施,它在 IM 系统的服务端架构中担当消息中转、消息削峰、消息交换异步化等角色。 当然,MQ 消息中间件的作用远不止于此,它的价值不仅仅存在于技术上,更重要的是改变了以往同步处理消息的思路。 比如进行 IM 消息历史存储时,传统的信息系统作法可能是收到一条消息就马上同步存入数据库,这种作法在小并发量的情况下可以很好的工作,但互联网大并发环境下就是灾难。 MQ 消息中间件可以理解为一个水池,水池的这头是消息生产者,水池的那头是消息消费者,生产者和消息者无需直接对接,这将带来很多好处:业务解耦、架构分布式化等,生产者和消费者互相完全透明。 但市面上的 MQ 消息中间件产品很多,作为 IM 系统中必不可少的一环,我们该如何选型? 什么是消息队列中间件 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。 通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。 目前开源的消息中间件可谓是琳琅满目,能让大家耳熟能详的就有很多,比如 ActiveMQ、RabbitMQ、Kafka

高并发场景下,如何保证生产者投递到消息中间件的消息不丢失?

孤人 提交于 2020-03-23 19:02:57
3 月,跳不动了?>>> 如果投递出去的消息在网络传输过程中丢失,或者在RabbitMQ的内存中还没写入磁盘的时候宕机,都会导致生产端投递到MQ的数据丢失。 而且丢失之后,生产端自己还感知不到,同时还没办法来补救。 下面的图就展示了这个问题。 所以本文呢,我们就来逐步分析一下。 2 保证投递消息不丢失的confirm机制 其实要解决这个问题,相信大家看过之前的消费端ack机制之后,也都猜到了。 很简单,就是生产端(比如上图的订单服务)首先需要开启一个confirm模式,接着投递到MQ的消息,如果MQ一旦将消息持久化到磁盘之后,必须也要回传一个confirm消息给生产端。 这样的话,如果生产端的服务接收到了这个confirm消息,就知道是已经持久化到磁盘了。 否则如果没有接收到confirm消息,那么就说明这条消息半路可能丢失了,此时你就可以重新投递消息到MQ去,确保消息不要丢失。 而且一旦你开启了confirm模式之后,每次消息投递也同样是有一个delivery tag的,也是起到唯一标识一次消息投递的作用。 这样,MQ回传ack给生产端的时候,会带上这个delivery tag。你就知道具体对应着哪一次消息投递了,可以删除这条消息。 此外,如果RabbitMQ接收到一条消息之后,结果内部出错发现无法处理这条消息,那么他会回传一个nack消息给生产端