消息队列:保存消息的一个容器,本质是个队列,但是需要支持高吞吐、高并发、高可用。

1 前世今生

1.1 业界消息队列对比

  • Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
  • RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
  • Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计
  • BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群

2 Kafka

2.1 使用场景

2.2 如何使用

  1. 创建集群
  2. 新建Topic
  3. 编写生产者逻辑
  4. 编写消费者逻辑

2.3 基本概念

  • Topic:逻辑队列,不同Topic可以建立不同的Topic
  • Cluster:物理集群,每个集群中可以建立多个不同的Topic
  • Producer:生产者,负责将业务消息发送到Topic中
  • Consumer:消费者,负责消费Topic中的消息
  • ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉

2.3.1 Offset

消息在partition内的相对位置信息,可以理解为唯一ID,在 partition内部严格递增。

2.3.2 Replica

每个分片有多个 Replica,Leader Replica将会从ISR中选出。

Follower可以理解为Leader的副本,与Leader差距过大会被踢出

2.4 数据复制

2.5 架构

Zookeeper:负责存储集群元信息,包括分区分配信息等

2.6 一条消息的自述

2.7 Producer

2.7.1 批量发送

2.7.2 数据压缩

2.8 Broker

2.8.1 数据的存储

2.8.2 消息文件结构

2.8.3 顺序写

采用顺序写的方式写入,提高写入效率

2.8.4 偏移量索引文件

目标寻找offset=28,二分找到小于目标offset的最大文件

2.8.5 时间戳索引文件

二分找到小于目标时间戳最大的索引位置,再通过寻找offset的方式找到最终数据

2.8.6 零拷贝

2.9 Consumer

2.9.1 消息的接收端

2.9.2 Low-Level

通过手动进行分配,哪一个 Consumer消费哪一个 Partition完全由业务来决定。

不能自动容灾,增加Consumer困难

2.9.3 High-Level

2.9.4 Rebalance

2.10 数据复制问题

2.11 重启操作

2.12 替换、扩容、缩容

2.13 负载不均衡

迁移Partition3后:

会造成IO问题

2.14 问题总结

  1. 运维成本高
  2. 对于负载不均衡的场景,解决方案复杂
  3. 没有自己的缓存,完全依赖Page Cache
  4. Controller和Coordinator和Broker 在同一进程中,大量IO会造成其性能下降

3 BMQ

3.1 简介

兼容Kafka协议,存算分离,云原生消息队列

3.2 HDFS写文件流程

4 RocketMQ

4.1 基本概念

4.2 RocketMQ架构

4.3 存储模型

4.4 高级特性

4.4.1 延迟发送

提前编辑→消息队列→定时发送→接收菜单

4.4.2 消费重试和死信队列

消息队列原理与实战-学习笔记相关推荐

  1. Word2vec原理+实战学习笔记(二)

    来源:投稿 作者:阿克西 编辑:学姐 前篇:Word2vec原理+实战学习笔记(一)​​​​​​​ 视频链接:https://ai.deepshare.net/detail/p_5ee62f90022 ...

  2. “物联网开发实战”学习笔记-(二)手机控制智能电灯

    "物联网开发实战"学习笔记-(二)手机控制智能电灯 如果搭建好硬件平台后,这一次我们的任务主要是调试好智能电灯,并且连接到腾讯云的物联网平台. 腾讯云物联网平台 腾讯物联网平台的优 ...

  3. “物联网开发实战”学习笔记-(四)智能音箱制作和语音控制

    "物联网开发实战"学习笔记-(四)智能音箱制作和语音控制 这次来造一个属于自己的智能音箱,这里详细介绍了智能音箱的语音控制的实现. 智能音箱的技术架构 智能音箱主要涉及拾音.前端信 ...

  4. Linux性能优化实战学习笔记:第十讲==中断

    Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...

  5. 基于 Kafka 和 ZooKeeper 的分布式消息队列原理

    转载:https://gitbook.cn/books/5bc446269a9adf54c7ccb8bc/index.html 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量 ...

  6. 再谈基于 Kafka 和 ZooKeeper 的分布式消息队列原理

    关于分布式消息队列,我在几个月前写过一篇文章:<深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列 >.最近,由于写作课程<分布式中间件实践之路>的契机,我 ...

  7. 唐金州的Vue开发实战学习笔记(生态篇)

    Vue开发实战学习笔记 Vuex Why Vuex How Vuex Vuex的核心概念和底层原理 Vuex的最佳实践 Vue Router Why Vue Router 路由类型及底层原理 Nuxt ...

  8. Unix原理与应用学习笔记----第六章 文件的基本属性2

    Unix原理与应用学习笔记----第六章 文件的基本属性2 改变文件权限命令:chmod 提示:文件或目录创建后,就被赋予一组默认的权限.所有的用户都有读,只有文件的所有者才有写. 相对权限设置 Ch ...

  9. Java 8 实战学习笔记

    Java 8 实战学习笔记 @(JAVASE)[java8, 实战, lambda] 文章目录 Java 8 实战学习笔记 参考内容 Lambda表达式 Lambda环绕执行模式(抽离步骤) 原始代码 ...

最新文章

  1. 超车新势力齐聚港股,谁主沉浮?
  2. 关于在web项目中实现本地打印
  3. Java的agent机制简述
  4. Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数
  5. opencv 叠加文字_Hello world.
  6. 视达配色教程17 灰色的色彩意象是什么
  7. OpenJudge NOI 1.7 34:回文子串
  8. Spark Structured SQL报错:Stream stream joins without equality predicate is not supported
  9. php的字符串操作,PHP 字符串操作
  10. c语言 freopen txt_C语言的文件操作 freopen
  11. ssh等价性的一些疑惑
  12. Ubuntu 小白起步
  13. Linux宝库名人轶事栏目 | 开源与茶
  14. mysql 密码过期解决图例_MYSQL 密码过期解决办法
  15. 发现贝叶斯的乐高积木
  16. Simplicity Studio V5 建立一个空工程后如何添加外设驱动
  17. 甜叶菊提取物甜菊糖苷分离纯化吸附树脂
  18. 树莓派4接7寸液晶屏竖屏设置
  19. 静态链接之与静态库的链接
  20. 我的一百个2019(三):2019,我赚钱了!

热门文章

  1. mysql,无法修改密码
  2. 2年时间,涨薪20k,想拿高薪还真不能老老实实的工作...
  3. 第六周:数组 + 递归 + 函数
  4. Android Studio 启动项目报错 Warning:Uninstalling will remove the application data!
  5. JavaScript音频库-Dancer.js
  6. 千分之二手续费0.2费率微信支付商户号申请
  7. 网络对抗作业一——张驰
  8. 新东方计算机考研排名,考研分数,机械考研院校排名?
  9. 期货期权的异同(期货期权的异同点)
  10. 数据时代,谁来舞动存储“三叉戟”?