消息队列应用与原理剖析

news2024/12/27 16:07:30

什么是消息队列

  • 消息队列:在消息的传输过程中保存消息的容器,生产者和消费者不直接通讯,依靠队列保证消息的可靠性,避免了系统间的相互影响。系统间的数据流通道

应用场景

  • 异步处理:用户注册后,需要发注册邮件和注册短信
    对于无需关注调用结果的场景,可以通过消息队列异步处理
  • 应用解耦:用户下单后,订单系统需要通知库存系统。
    将模块间的RPC调用改为通过消息队列中转,解除系统间的耦合
  • 流量削锋:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。可以控制活动的人数,可以缓解短时间内高流量压垮应用。
    系统的吞吐量往往取决于底层存储服务的处理能力,数据访问层可以调整消费速度缓解存储服务压力,避免短暂的高峰将系统压垮
  • 日志处理:将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。
  • 消息通讯:实现点对点消息队列,或者聊天室等。

消息队列模式

  • 点对点模式:一个具体的消息只能由一个订阅者消费。多个生产者可以向同一个消息队列发送消息
  • 发布/订阅模式:单个消息可以被多个订阅者并发的获取和处理

主流消息队列

kafka 分析

名词解释

  • Producer:生产者,消息产生和发送端。
  • Broker:Kafka 实例,多个 broker 组成一个 Kafka 集群,通常一台机器部署一个 Kafka 实例,一个实例挂了不影响其他实例。
  • Consumer:消费者,拉取消息进行消费。 一个 topic 可以让若干个消费者进行消费,若干个消费者组成一个 Consumer Group 即消费组,一条消息只能被消费组中一个 Consumer 消费。
  • ZooKeeper:用于管理和协调的Kafka集群,也用它来通知生产者和消费者关于 Kafka 系统中任何新代理的存在或 Kafka 系统中代理的故障。
  • Topic:主题,服务端消息的逻辑存储单元。一个 topic 通常包含若干个 Partition 分区
  • Partition:topic 的分区,分布式存储在各个 broker 中, 实现发布与订阅的负载均衡。若干个分区可以被若干个 Consumer 同时消费,达到消费者高吞吐量。一个分区拥有多个副本(Replica)
  • message:消息,或称日志消息,是 Kafka 服务端实际存储的数据,每一条消息都由一个 key、一个 value 以及消息时间戳 timestamp 组成。
  • offset:偏移量,分区中的消息位置,由 Kafka 自身维护,Consumer 消费时也要保存一份 offset 以维护消费过的消息位置
  • 控制器(Controller):控制器主要作用是管理和协调 Kafka 集群
    • 主题管理:创建、删除 topic,以及增加 topic 分区等操作都是由控制器执行。
    • 分区重分配:执行 Kafka 的 reassign 脚本对 topic 分区重分配的操作,也是由控制器实现。
    • 集群成员管理,数据服务

Kafka 体系架构

组成部分

在这里插入图片描述

Kafka 消息存储
Topic 副本机制
  • Topic 的Partition,分布式存储在各个 Broker 中,一个Partition拥有多个副本(Replica。
  • 消息冗余存储,提高 Kafka 数据的可靠性;
  • 提高 Kafka 服务的可用性,follower 副本能够在 leader 副本挂掉或者 broker 宕机的时候参与 leader 选举,继续对外提供读写服务。
  • 为什么 follower 副本不提供读服务:在kafka中,实现副本的目的就是冗余备份,且仅仅是冗余备份,所有的读写请求都是由leader副本进行处理的。follower副本仅有一个功能,那就是从leader副本拉取消息,尽量让自己跟leader副本的内容一致。
  • 复制仅发生在分区级别
  • 对于给定的分区,一次只有一个Broker可以成为leader。 同时,其他Broker将拥有同步副本;这就是我们所说的 ISR(In Sync Replica)
    • ISR 是分区中正在与 leader 副本进行同步的 replica 列表,且必定包含 leader 副本。
      在这里插入图片描述

Kafka 消息发送机制

  • 异步发送: 异步生产者使用channel接收(生产成功或失败)的消息,并且也通过channel来发送消息,这样做通常是性能最高的

  • 同步发送:同步生产者需要阻塞,直到收到了acks。这会带来两个问题,一是性能变得更差了,而是可靠性是依靠参数acks来保证的。

  • 批量发送:发送到缓冲 buffer 中消息将会被分为一个一个的 batch,分批次的发送到 broker 端,批次大小由参数 batch.size 控制,默认16KB。这就意味着正常情况下消息会攒够 16KB 时才会批量发送到 broker 端,所以一般减小 batch 大小有利于降低消息延时,增加 batch 大小有利于提升吞吐量。

  • 消息重试:Kafka 生产端支持重试机制,对于某些原因导致消息发送失败的,比如网络抖动,开启重试后 Producer 会尝试再次发送消息
    在这里插入图片描述

  • 基本流程就是:创建对象(主题、分区、key/value)-> 序列化数据 -> 到达分区(可自己指定,也可以通过key hash)-> 放入批次(相同主题和分区) -> 独立线程发送 -> 返回主题/分区/分区偏移量/时间戳。

  • 分区策略:顺序分配,随机分配,Hash分配

Kafka 消息消费机制

  • Pull 模式消费数据,采用 Pull 模式的好处是Consumer可以自主决定是否批量的从Broker拉取数据。Pull模式有个缺点是,如果Broker没有可供消费的消息,将导致Consumer不断在循环中轮询,直到新消息到达。为了避免这点,可以配置让Consumer阻塞直到新消息到达。
  • Kafka Consumer Client 消费消息通常包含以下步骤:
    • 配置客户端
    • 创建消费者
    • 订阅主题
    • 拉取消息并消费
    • 提交消费位移
    • 关闭消费者实例

Kafka 消费端 Rebalance 机制

Rebalance 是让一个消费组的所有消费者就如何消费订阅 topic 的所有分区达成共识的过程,在 Rebalance 过程中,所有 Consumer 实例都会停止消费,等待 Rebalance 的完成。
因为要停止消费等待重平衡完成,因此 Rebalance 会严重影响消费端的 TPS,是应当尽量避免的。
Rebalance 非常重要,它为消费者群组带来了高可用性 和 伸缩性,我们可以放心的添加消费者或移除消费者。
关于何时会发生 Rebalance,总结起来有三种情况:

  • 消费组的消费者成员数量发生变化
  • 消费主题的数量发生变化
  • 消费主题的分区数量发生变化

RocketMQ

  • RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件
  • RocketMQ 有很多概念都和kafka类似,这里只例举与kafka不相同的概念

基本概念

  • NameServer:一个功能齐全的服务器,其角色类似Zookeeper。
  • Tag:子主题,它是消息的第二级类型,用于为用户提供额外的灵活性,Topic 是消息的第一级类型
  • Queue:队列,在Kafka中叫Partition。每个Queue内部是有序的
    在这里插入图片描述

文档参考

  • https://mp.weixin.qq.com/s/9fJchPJa_raHSkvo29bkEA
  • https://mp.weixin.qq.com/s?__biz=MzkzMDI1NjcyOQ==&mid=2247487730&idx=1&sn=c51de28679d92f9086f1b94e72a5cb62&source=41#wechat_redirect
  • https://mp.weixin.qq.com/s/P8bt9JYIiQlVHzwZfjr0AQ
  • https://www.cnblogs.com/rickiyang/p/14649750.html
  • https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html
  • https://www.lixueduan.com/posts/kafka/11-consumer-group-rebalance/#2-consumer-group

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux C--管道

这里写自定义目录标题基本概念管道特征编写模型有名管道模型示例demowrite.cread.c结果记录笔记1无名管道基本概念 进程间存在天然的壁垒,进程间通信(Interperocess Communication,IPC)是指二个或者多个进程之间进行数据交换的过程 管道特征 管道是进程间通讯的一种常用方法…

Tomcat安装及使用

1.下载 Tomcat官网 选择系统 2.解压 解压到没有中文路径的文件夹中,解压路径会在配置环境变量时用到 3.配置环境变量 在电脑点击鼠标右键->点击属性>点击高级系统设置->点击环境变量->新建系统变量 1.新建系统变量 变量名为CATALINA_HOME,变…

【unity3D】DoTween动画插件(下)

💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的DoTween动画插件可视化编辑 DoTween动画插件(可视化编辑)DOTween AnimationDoTween Path路径编辑器Scene…

【Linux】Linux编辑器—vim使用

目录1.vim的基本概念2.vim基本操作3.vim命令模式命令集4.vim末行模式命令集5.简单vim配置6.使用sudo提权为什么要学习vim? “在 Linux 系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数”。 而且在日常工作中大家也肯定免不了要编写文档&am…

学习C语言笔记:浮点类型float、double和long double

浮点类型能表示包括小数在内更大范围的数。浮点数的表示类似于科学计数法(即用小数乘以10的幂来表示数字)。该记数系统常用于表示非常大或非常小的数。 float C语言规定,float类型必须至少能表示6位有效数字,且取值范围至少是~…

【阶段二】Python数据分析Pandas工具使用03篇:数据预处理:多表合并与连接

本篇的思维导图: 数据预处理:多表合并与连接 将表结构相同(即变量个数和变量类型均相同)的多张表纵向合并到一张长表中,或者将多张表的变量水平扩展到一张宽表中。 需要注意的是,对于多表之间的纵向合并,则必须确保多表的列数和数据类型一致;对于多表之间的水平扩展,…

电子邮件帐户受损报告,请查收!

我们收到有关恶意访问 Ambire Wallet 电子邮件帐户的报告。 所有这些账户都是用在 CoinMarketCap/Ledger/其他黑客事件中被破坏的电子邮件地址注册的。 我们的内部调查显示,Ambire 的内部系统没有被泄露。我们调查的所有受影响的账户都是因为他们的电子邮件被泄露&…

FOFA(一): FOFA入门

文章目录一、FOFA是什么二、Fafo的使用1. 用户注册2. 一般使用3. 高级用法三、界面解释一般检索结果ip聚合:统计:以ip为单位的资产数据统计:四、API参考一、FOFA是什么 部署在互联网上的网络设备资产信息搜索引擎。旨在尽可能多的对全球IT设备资产进行信息收集、 漏洞扫描&…

java知识图谱+Java语言特点+常用dos命令+Java程序总结

java知识图谱高级语言Java语言特点注释单行注释 //多行注释/* */作用:1.对程序的编写进行解释说明,增强可读性2.调试所写代码单行/多行注释不参与编译;多行注释不可嵌套使用文档注释(Java特有)/** */注释内容可被JDK提…

系统治理 体系规划新型数据安全防护体系

声明 本文是学习2022中国工业数据勒索形势分析报告. 下载地址 http://github5.com/view/55028而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 工业数据勒索应急响应事件攻击者分析 应急响应事件攻击者分析以2022年1-9月所有工业数据勒索应急数据为支撑…

Hadoop HDFS

Hadoop HDFS分布式文件系统分布式文件系统的优点HDFS(Hadoop分布式文件系统)应用常见hdfs集群存储机制元数据管理namespace分布式文件系统 既然我们要学习hdfs那就不能不提分布式文件系统 文件系统是一种存储和组织数据的方法,实现了数据的存储、分级组织、访问和…

Linux DNS 解析与配置 nslookup使用 与 /etc/resolv.conf文件的配置

Linux DNS 解析与配置 序 当我接收到一批新的服务器时,尝试连接外网,比如访问百度的首页: curl www.baidu.com发现报错,不能解析正确的主机名。这个其实就是主机在解析主机名时没能正确发现对应的主机的 ip。当我们使用类似于域…

华为交换机配置笔记

交换机(Switch)是一种用于电信号转发的网络设备,它可以为接入交换机的任意两个网络节点提供独享的电信号通路,最常见的交换机是以太网交换机,其他常见的还有电话语音交换机、光纤交换机等,交换机是集线器的升级替代产品,理论上讲交换机就是按照通信两端传输信息的需求,将需要的…

ONES 入选极客公园「2022 中国创新力量 50 」榜单

极客公园调研发现,2022 年是企业服务的「双杀」转折点:内部造血的难度升级,外部输血的可能性降低。为了表彰逆流而上的企服公司,极客公园对其给予了重点鼓励和点评。其中,企业级研发管理平台 ONES 入选了极客公园 2022…

vue js游戏,抗疫小游戏,抗疫的汤圆,仅以此小游戏献给所有为抗击疫情做出贡献的人

vue js游戏,抗疫小游戏,抗疫的汤圆,仅以此小游戏献给所有为抗击疫情做出贡献的人 完整代码下载地址:vue js游戏,抗疫小游戏,抗疫的汤圆 建议在pc上使用Chrome浏览器进行访问,如果只能手机玩&a…

还不快收藏起来!何恺明全网最全论文合集

原创/文 BFT机器人 人物简介 何恺明,Facebook AI Research (FAIR) 的一名科学家,研究领域包括计算机视觉和深度学习,并且在计算机视觉和深度学习方面发表了众多极具影响力的论文。 他发表的论文中,有关深度残差网络 (ResNets) 的…

当下的零售新进化,同以往的电商时代还是有着很多区别的

一场数字化的浪潮,正在各行各业深刻上演着。在零售领域,亦不例外。以往,提及零售,我们更多地想到的是,各式各样的电商平台,我们看到的是,各式各样的电商模式;现在,提及零…

学习一下如何使用python实现一个超级卡哇伊的五角星吧

Hello呀朋友们~ 今天实在想不出要写啥了,但是前两天有朋友让我写一个五角星,这个好说呀,必须安排的妥妥当当的!!!!! 在这里我就不多说了,这个也挺简单的,那…

新代机床联网

一、设备信息确认 1、确认型号 数控面板拍照确认: 此系统为:6TA 2、确认通讯接口 1、数控面板的后面 2、其他位置 其他位置一般是前面两个位置用网线引出来后做的网口母头,常见在机床数控面板侧面,机床电器柜后面等等。 3、…

Kubernetes知识扫盲

1. Kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应…