前言描述

生产初级,Service服务较少,访问量较少,随着业务量的不断增加,日志量成倍增长,然后就遇到了消息队列redis被充爆,不能满足应用的情况。针对此情况,我们来分析下可用的消息多列。

官方推荐消息队列

redis、kafka、rabbitmq。我们现在针对这三种进行比较。

从消息订阅模式比较

Redis

redis是基于内存的应用,消息都存放在内存中,写入读取速度快,但是受内存容量的限制,容易造成内存充爆。

Kakfa

kafka是一个分布式的流式处理平台,它的设计初衷就是一个日志系统,消息内容是可以持久化一段时间的,消息的订阅消费位置的确定是通过消费者offset来定位的,也可以定位到之前消息再次消费。

Rabbitmq

rabbitmq的一个特殊之处是,生产者并不是直接将消息发送到队列中,而是通过exchange中继,exchange转发到队列。所以rabbitmq在消息的路由方面比之前两者都好很多。

从work queue来比较

Redis

redis的消息数据就存放在内存中,因为redis数据的原子性,数据只能被消费一次,不能重复。

Kafka

kafka通过consumer group的方式实现了work queue。·同一个组的消费者能够协调完成任务。另外它是一个分布式的文件系统,他的队列可以理解为topic,我们都知道topic是可以划分为多个partition的,多个partiton是可以分布在不同的node节点上的。这样当一个consumer来消费的时候,就可以到不同的节点上去获取消息,也就达到了负载均衡的作用,避免单点压力。于此同时,就会产生另外的一个问题,当有消费者在进行消费的时候,如何保证这个队列同时不背其他的消费者消费,这就需要zookeeper的分布式锁来解决了。

Rabbitmq

rabbitmq也是有自己的一个机制来实现队列的负载均衡,通过轮询机制给worker发布消息,以此来实现。当有大量的消费者去消费同一个队列的时候,这个队列的性能就会成为一个瓶颈

Rabbitmq的一个强大之处

因为它的一个核心exchanger。它可以将消息路由到不同的队列去,比如我既要打印输出,还要持久化,那我就可以直接路由到两个queue中去。

ELK之消息队列选择redis_kafka_rabbitmq的更多相关文章

  1. 通信有连接有消息队列选择boost.asio

    通信有连接有消息队列选择boost.asio 连接自主管理 消息队列自主管理

  2. Xp 消息队列的使用

    1.安装消息队列3.0: 控制面板/添加删除程序/添加window组件/找到消息队列/选择->详细信息->MSMQ HTTP支持. 注意:如果计算机没有连接到域需要去掉Active Dir ...

  3. ELK之使用kafka作为消息队列收集日志

    参考:https://www.cnblogs.com/fengjian2016/p/5841556.html    https://www.cnblogs.com/hei12138/p/7805475 ...

  4. RocketMQ消息发送的队列选择与容错策略

    一个topic有多个队列,分散在不同的broker.producer在发送消息的时候,需要选择一个队列 producer发送消息全局时序图: 队列选择与容错策略结论: 在不开启容错的情况下,轮询队列进 ...

  5. 消息队列 ActiveMQ 、RocketMQ 、RabbitMQ 和 Kafka 如何选择?

    「 预计阅读 6 分钟 」 旁白:这是一篇拖更了N久的文章...0.0(看不见我~) 往期回顾 前端框架 jQuery 和 Vue 如何选择? 安全框架 Shiro 和 Spring Security ...

  6. 常用的消息队列中间件mq对比

    原文地址:https://blog.csdn.net/qq_30764991/article/details/80239076 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量 ...

  7. MQ(1)---消息队列概念和使用场景

    消息队列概念和使用场景 声明:本文转自:MQ入门总结(一)消息队列概念和使用场景 写的很好,都不用自己在整理了,非常感谢该作者的用心. 一.什么是消息队列 消息即是信息的载体.为了让消息发送者和消息接 ...

  8. Java并发编程原理与实战三十六:阻塞队列&消息队列

    一.阻塞队列 1.阻塞队列BlockingQueue ---->可以理解成生产者消费者的模式---->消费者要等待到生产者生产出来产品.---->而非阻塞队列ConcurrentLi ...

  9. RabbitMQ (十六) 消息队列的应用场景 (转)

    原贴 : http://blog.csdn.net/cws1214/article/details/52922267 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 ...

随机推荐

  1. JavaScript函数注意点

    1.return 请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回.因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑. 如果没有return语句,函数执行 ...

  2. ADO.NET TransactionScope使用说明(转载)

    TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间.它的用途是为数据库访问提供了一个“轻量级”[区别于:SqlTransaction]的事物.使用之前必须添 ...

  3. kettle学习笔记(七)——kettle流程步骤与应用步骤

    一.概述 流程主要用来控制数据流程与数据流向 应用则是提供一些工具类 二.流程步骤 1.ETL元数据注入 类似Java中的反射,在设计时不知道文件名.文件位置等,在真正执行时才知道具体的一些配置等信息 ...

  4. 20155334 《网络攻防》 Exp9 Web安全基础

    <网络攻防> Exp9 Web安全基础 一.实验后回答问题 SQL注入攻击原理,如何防御: 原理: 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服 ...

  5. datatables.js 简单使用--弹出编辑框或添加数据框

    内容:选中某一条记录,弹出编辑框 环境:asp.net mvc ,  bootstrap 显示效果: 代码: 至于怎么弄多选框,在上一篇博客里已经有说明. 主要用到了bootstrap的模态窗,下面代 ...

  6. 使用不同的方法计算TF-IDF值

    摘要 这篇文章主要介绍了计算TF-IDF的不同方法实现,主要有三种方法: 用gensim库来计算tfidf值 用sklearn库来计算tfidf值 用python手动实现tfidf的计算 总结 之所以 ...

  7. node.js学习笔记(四)——EventEmitter

    error 事件 EventEmitter 定义了一个特殊的事件 error,它包含了错误的语义,我们在遇到异常的时候通常会触发 error 事件.当 error 被触发时,EventEmitter ...

  8. python数据图形化—— matplotlib 基础应用

    matplotlib是python中常用的数据图形化工具,用法跟matlab有点相似.调用简单,功能强大.在Windows下可以通过命令行 pip install matplotlib 来进行安装. ...

  9. supervisor管理进程 superlance对进程状态报警

    supervisor介绍 首先,介绍一下supervisor.Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linu ...

  10. CentOS7安装OpenStack(Rocky版)-02.安装Keyston认证服务组件(控制节点)

    本文分享openstack的认证服务组件keystone --------------- 完美的分割线 ---------------- 2.0.keystone认证服务 1)用户与认证:用户权限与用 ...