学习
实践
活动
专区
工具
TVP
写文章

分布式消息队列

分布式消息队列’包含两个概念 一是‘消息队列’,二是‘分布式’ 那么就先看下消息队列的概念,和为什么需要分布式 消息队列的定义 “消息”指进程间传送的数据 “队列”是在消息的传输过程中保存消息的容器 消息被发送到队列中,消息队列充当中间人,将消息从源发送给目标 当系统中出现“生产“和“消费“的速度或稳定性等因素不一致时,就需要消息队列,作为抽象层,弥合双方的差异 例如 (1)服务员点菜快, ,放入队列,短信发送模块从队列中获取消息进行处理 消息队列的好处 (1)提高系统响应速度 使用了消息队列,生产者一方,把消息队列里一扔,就可以立马返回响应用户了,无需等待处理结果 (2)保证消息的传递 ,使得系统设计更清晰 为什么需要分布式消息队列 (1)多系统协作需要分布式 例如消息队列中的数据需要在多个系统间共享,所以需要提供分布式通信机制、协同机制 (2)可靠 消息会被持久化到分布式存储中 ,这样避免了单台机器存储的消息由于机器问题导致消息的丢失 (3)可扩展 分布式消息队列,会随着访问量的增加而方便的增加处理服务器

71270

分布式消息队列

作者:vincentchma,腾讯 IEG 后台开发工程师 一、消息队列的演进 分布式消息队列中间件是是大型分布式系统中常见的中间件。 单机 MQ 易于实现,但是缺点也很明显:因为依赖于单机 OS 的 IPC 机制,所以无法实现分布式消息传递,并且消息队列的容量也受限于单机资源。 Redis list 使用 lpush 命令,从队列左边插入数据;使用 rpop 命令,从队列右边取出数据。与单机 MQ 相比, 该方案至少满足了分布式, 但是仍然带有很多无法接受的缺陷。 针对上述缺点,redis 5.0 开始引入 stream 数据类型,它是专门设计成为消息队列的数据结构,借鉴了很多 kafka 的设计,但是随着很多分布式 MQ 组件的出现,仍然显得不够友好, 毕竟 Redis 专用分布式 MQ 中间件 随着时代的发展,一个真正的消息队列,已经不仅仅是一个队列那么简单了,业务对 MQ 的吞吐量、扩展性、稳定性、可靠性等都提出了严苛的要求。

70070
  • 广告
    关闭

    有奖征文丨玩转 Cloud Studio

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    分布式消息队列

    一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。 它使分布式通信耦合度更低,消息服务更加可靠以及异步性。 在EJB架构中,有消息bean可以无缝的与JM消息服务集成。在J2EE架构模式中,有消息服务者模式,用于实现消息与应用直接的解耦。 用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 结构图如下:(微信公众号:IT技术精选文摘, 微信号:ITHK01,欢迎订阅) ? 5.4 Kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

    1.3K112

    分布式消息队列Kafka

    或者系统中文件夹 分区:一个主题可以分若干分区,同一个分区内可以保证有序 偏移量:一个不断递增的整数值,每个分区的偏移量是唯一的 broker:一个独立的kafka服务器 MirrorMaker工具:多集群间消息复制 磁盘吞吐量、磁盘容量、内存、网络、CPU 生产者(KafkaProducer) 序列化:自定义序列化、Avro 分区:ProducerRecord对象包含了目标主题、键和值, 键有两个作用:可以作为消息的附加信息 ,也可以用来决定消息改写到主题的那个分区,拥有相当键的消息会被写到同一个分区。 flume是分布式的日志收集系统,它将各个服务器中的数据收集起来并送到指定的地方去 日志输出到flume,log4j里加上日志 业界比较典型的一中用法是: 线上数据 -> flume -> kafka -> hdfs -> MR离线计算 或者: 线上数据 -> flume -> kafka -> storm 简单点概括 flume类似于管道,kafka类似于消息队列

    26620

    分布式消息队列浅析

    一个优秀的分布式消息队列,个人分析应该具备以下的能力:高吞吐、低时延(因场景而异),传输透明,伸缩性强,有冗灾能力,一致性顺序投递,同步+异步的发送方式,完善的运维和监控工具,开源。 消息传输模型 从消息传输模型上,大致可以抽象为以下几种: 点对点模型(Point-to-point) 基础模型中,只有一个发送者、一个接收者和一个分布式队列。 [3.png] 业界组件介绍 看下业界,开源的分布式消息队列有很多种,侧重的维度也略有不同,包括支持的消息模型也有一些差异,如果按是否有独立进程来看,可以分为两个大类: Broker Broker类的分布式消息队列 - Kafka Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。 多组件对比测试 分布式消息队列种类很多,没有精力一一测试,在网上找了一个比较权威的测试结果跟大家分享下。 测试包量和发布速率如下所示,每次测试持续时间在30S以上。

    2.5K50

    分布式消息队列 Kafka

    Kafka是一个高吞吐量的、分布式消息系统,由Linkedin开发,开发语言为scala 具有高吞吐、可扩展、分布式等特点 适用场景 活动数据统计 活动数据包括页面访问量(Page View) 之后进行统计 Linkedin就是基于这类需求开发出了Kafka,所以kafka最适合的场景为: 一个日志集群,各种服务器将它们自身的日志发送到集群中进行统一汇总和存储,然后其它机器从集群中拉取消息进行分析处理 broker集群 (3)话题 Topic(可以理解为queue) (4)消费者 Consumer (5)Zookeeper集群 可以在Kafka中创建多个Topic,Producer向Topic中发送消息 ,Consumer从Topic中获取消息 ? 为了高效的读写消息,topic都被切分为多个分区partition,放入不同的broker中 topic的partition类似于数据库的分表,可以根据消息的key进行分区 例如key为userid,

    1K50

    分布式消息队列浅析

    一个优秀的分布式消息队列,个人分析应该具备以下的能力:高吞吐、低时延(因场景而异),传输透明,伸缩性强,有冗灾能力,一致性顺序投递,同步+异步的发送方式,完善的运维和监控工具,开源。 消息传输模型 从消息传输模型上,大致可以抽象为以下几种: 点对点模型(Point-to-point) 基础模型中,只有一个发送者、一个接收者和一个分布式队列。 业界组件介绍 看下业界,开源的分布式消息队列有很多种,侧重的维度也略有不同,包括支持的消息模型也有一些差异,如果按是否有独立进程来看,可以分为两个大类: Broker Broker类的分布式消息队列, Kafka Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。 多组件对比测试 分布式消息队列种类很多,没有精力一一测试,在网上找了一个比较权威的测试结果跟大家分享下。 测试包量和发布速率如下所示,每次测试持续时间在30S以上。

    82830

    消息队列RocketMQ版分布式事务消息

    消息队列RocketMQ版提供的分布式事务消息适用于所有对数据最终一致性有强需求的场景。本文介绍消息队列RocketMQ版事务消息的概念、优势、典型场景、交互流程、使用规则以及示例代码。 概念介绍 事务消息消息队列RocketMQ版提供类似XA或Open XA的分布式事务功能,通过消息队列RocketMQ版事务消息能达到分布式事务的最终一致。 半事务消息:暂不能投递的消息,生产者已经成功地将消息发送到了消息队列RocketMQ版服务端,但是消息队列RocketMQ版服务端未收到生产者对该消息的二次确认,此时该消息被标记成“暂不能投递”状态,处于该种状态下的消息即半事务消息 分布式事务消息的优势 消息队列RocketMQ版分布式事务消息不仅可以实现应用之间的解耦,又能保证数据的最终一致性。 典型场景 在淘宝购物车下单时,涉及到购物车系统和交易系统,这两个系统之间的数据最终一致性可以通过分布式事务消息的异步处理实现。在这种场景下,交易系统是最为核心的系统,需要最大限度地保证下单成功。

    20710

    Kafka——分布式消息队列

    Kafka 第一章 是什么 一 Kafka简介 二 概念理解 总结 三 kafka的特点 四 kafka生产消息、存储消息、消费消息 五 kafka的消息存储和生产消费模型 六 kafka与其他消息队列对比 通过脚本启动Kafka kafka的leader的均衡机制 kafka 0.11版本改变 第三章Kafka整合flume 整合步骤 第一章 是什么 一 Kafka简介 kafka是一个高吞吐的分布式消息队列系统 kafka里面的消息是有topic来组织的,简单的我们可以想象为一个队列,一个队列就是一个topic,然后它把每个topic又分为很多个partition,这个是为了做并行的,在每个partition内部消息强有序 ,相当于有序的队列,其中每个消息都有个序号,比如0到12,从前面读往后面写。 各个group各自独立消费,互不影响 六 kafka与其他消息队列对比 RabbitMQ:分布式,支持多种MQ协议,重量级 ActiveMQ:与RabbitMQ类似 ZeroMQ:以库的形式提供,使用复杂

    72220

    分布式消息队列 RocketMQ源码解析:事务消息

    事务消息回查 3.1 Broker 发起【事务消息回查】 3.1.1 官方V3.1.4:基于文件系统 3.1.1.1 存储消息到 CommitLog 3.1.1.2 写【事务消息】状态存储(TranStateTable 概述 必须必须必须 前置阅读内容: 《事务消息(阿里云)》 2. 事务消息发送 2.1 Producer 发送事务消息 活动图如下(结合 核心代码 理解): ? _3.1.4 相较于普通消息,【事务消息】多依赖如下三个组件: TransactionStateService :事务状态服务,负责对【事务消息】进行管理,包括存储与更新事务消息状态、回查事务消息状态等等 存储【half消息】到 CommitLog 时,消息队列位置(queueOffset)使用 TranStateTable 最大物理位置(可写入物理位置)。 msgInner.getSysFlag()); 8: switch (tranType) { 9: case MessageSysFlag.TransactionPreparedType: // 消息队列位置

    1K60

    浅谈消息队列及常见的分布式消息队列中间件

    背景 分布式消息队列中间件是是大型分布式系统不可缺少的中间件,通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息,或者在处理消息前不需要等待接收此消息消息队列可为这些分布式应用程序提供通信和协调。而本人也在工作的过程中,前前后后后接触到了 Kafka、RabbitMQ 两款消息队列消息队列是构建分布式互联网应用的基础设施,通过 MQ 实现的松耦合架构设计可以提高系统可用性以及可扩展性,是适用于现代应用的最佳设计方案。 ? 消息队列特点 为什么要用消息队列? 从上图可以看到消息发送者(生产者)和消息接受者(消费者)之间没有直接耦合,消息发送者将消息发送至分布式消息队列即结束对消息的处理,消息接受者从分布式消息队列获取该消息后进行后续处理,并不需要知道该消息从何而来 而使用分布式消息队列实现生产者和消费者解耦合以后,用户注册以后,不需要调用任何后续处理代码,只需要将注册消息发送到分布式消息队列就可以了。

    1.2K40

    分布式消息队列不再难懂

    庆幸的是两位朋友都很有上进心,于是博主写这篇文章,帮助他们复习一下关于消息队列中间件这块的要点 二、复习要点 本文大概围绕如下几点进行阐述: 为什么使用消息队列? 使用消息队列有什么缺点? 建议对消息队列不了解的人,去找点消息队列的博客看看,再看本文,收获更大 三、正文 1、为什么要使用消息队列? 分析:一个用消息队列的人,不知道为啥用,这就有点尴尬。 一方面,大型软件公司,具备足够的资金搭建分布式环境,也具备足够大的数据量。 4、如何保证消息队列是高可用的? 分析:在第二点说过了,引入消息队列后,系统的可用性下降。在生产中,没人使用单机模式的消息队列。因此,作为一个合格的程序员,应该对消息队列的高可用有很深刻的了解。 其实无论是那种消息队列,造成重复消费原因其实都是类似的。正常情况下,消费者在消费消息时候,消费完毕后,会发送一个确认信息给消息队列消息队列就知道该消息被消费了,就会将该消息消息队列中删除。

    48120

    分布式消息队列kafka原理简介

    kafka原理简介 Kafka是由LinkedIn开发的一个分布式消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。 消息的发布描述为producer,消息的订阅描述为consumer,将中间的存储阵列称作broker(代理)。kafka是linkedin用于日志处理的分布式消息队列,同时支持离线和在线日志处理。 许多消息队列所采用的”插入-获取-删除”范式中,在把一个消息队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。 消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。 顺序保证 在大多使用场景下,数据处理的顺序都很重要。 消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

    51360

    分布式实时消息队列Kafka(一)

    分布式实时消息队列Kafka(一) 知识点01:课程回顾 Hbase是什么? 分布式基于内存按列存储NoSQL数据库,用于实时、随机读写大量的数据 Hbase的设计思想是什么? 引入消息队列:解决高并发写问题 小结 知识点04:消息队列:MQ介绍 目标:了解消息队列的功能,应用场景及特点 路径 step1:消息队列是什么? 实施 定义 官方定义:消息队列是一种异步的服务间通信方式,是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。 目标:掌握Kafka中的分区副本机制 路径 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Hzk95MA-1625806073233)(20210329_分布式实时消息队列 Hbase:分布式NoSQL实时列存储数据库 Kafka:分布式实时消息队列系统 实施 概念HDFSHbaseKafka第一层逻辑划分第二层逻辑划分存储分区及划分规则分区存储规则分区安全存储单元架构

    19030

    分布式实时消息队列Kafka(五)

    分布式实时消息队列Kafka(五) 知识点01:课程回顾 一个消费者组中有多个消费者,消费多个Topic多个分区,分区分配给消费者的分配规则有哪些? Follower到Leader副本中同步数据 小结 HW:所有副本都同步的位置,消费者可以消费到的位置 LEO:leader当前最新的位置 知识点05:Kafka分区副本Leader选举 知识点06:消息队列的一次性语义 目标:了解消息队列的三种一次性语义 路径 什么是一次性语义? 实施 at-most-once:至多一次 会出现数据丢失的问题 at-least-once:至少一次 会出现数据重复的问题 exactly-once:有且仅有一次 只消费处理成功一次 所有消息队列的目标 小结 Kafka从理论上可以实现Exactly Once 大多数的消息队列一般不能满足Exactly Once就满足at-least-once 知识点07:Kafka保证生产不丢失 知识点08:Kafka

    17040

    分布式实时消息队列Kafka(一)

    分布式实时消息队列Kafka(一) 知识点01:课程回顾 Hbase是什么? 分布式基于内存按列存储NoSQL数据库,用于实时、随机读写大量的数据 Hbase的设计思想是什么? 引入Redis,作为读缓存,解决高并发的读 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RaU9EfHR-1617011887969)(20210329_分布式实时消息队列 引入消息队列:解决高并发写问题 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wwEN0xMz-1617011887970)(20210329_分布式实时消息队列Kafka 实施 定义 官方定义:消息队列是一种异步的服务间通信方式,是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。 (img-BQ9B1LCt-1617011887972)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328155147841.png)] 实施

    51930

    利用消息队列处理分布式事务

    目前,业内解决分布式事务问题,都基本不用JTA这种强一致性的解决方案,基本是采用如下两套方案 基于TCC的事务框架 消息队列 OK,你们先记住两点 (1)图中的服务A和服务B,如果是同步调用,要求一起成功 特别容易,借助消息队列即可,如下图所示 一致性解决 OK,上面这一版有一个致命的问题! 如下所示 事务开始 (1)给支付宝账户zhangsan,扣100元 (2)将(给余额宝账户zhangsan,加100元)封装为消息,发送给消息队列 事务结束 敢问你,如何保证第一步和第二步是在同一个事务里完成的 如果是博主的忠实读者,应该知道,博主曾经写过一篇《分布式消息队列复习精讲》,里头就提到了如何解决幂等性问题。什么?你没看过这篇?拉出去枪毙! 借用这篇文章里的方案。 求职者:"用了,用了" 面试官:"怎么解决分布式事务的啊?" 求职者:"我们的服务刚好是异步的场景,所以用消息队列!" 面试官:"怎么保证一致性和幂等性啊?" 求职者:"嗯,听我细细说来….."

    30330

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 消息队列 CMQ 版

      消息队列 CMQ 版

      消息队列 CMQ 版(TDMQ CMQ 版)是一种分布式消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注腾讯云开发者

      领取腾讯云代金券