消息队列原理与实战-学习笔记
消息队列:保存消息的一个容器,本质是个队列,但是需要支持高吞吐、高并发、高可用。
1 前世今生
1.1 业界消息队列对比
- Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
- RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
- Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计
- BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群
2 Kafka
2.1 使用场景
2.2 如何使用
- 创建集群
- 新建Topic
- 编写生产者逻辑
- 编写消费者逻辑
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 问题总结
- 运维成本高
- 对于负载不均衡的场景,解决方案复杂
- 没有自己的缓存,完全依赖Page Cache
- 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 消费重试和死信队列
消息队列原理与实战-学习笔记相关推荐
- Word2vec原理+实战学习笔记(二)
来源:投稿 作者:阿克西 编辑:学姐 前篇:Word2vec原理+实战学习笔记(一) 视频链接:https://ai.deepshare.net/detail/p_5ee62f90022 ...
- “物联网开发实战”学习笔记-(二)手机控制智能电灯
"物联网开发实战"学习笔记-(二)手机控制智能电灯 如果搭建好硬件平台后,这一次我们的任务主要是调试好智能电灯,并且连接到腾讯云的物联网平台. 腾讯云物联网平台 腾讯物联网平台的优 ...
- “物联网开发实战”学习笔记-(四)智能音箱制作和语音控制
"物联网开发实战"学习笔记-(四)智能音箱制作和语音控制 这次来造一个属于自己的智能音箱,这里详细介绍了智能音箱的语音控制的实现. 智能音箱的技术架构 智能音箱主要涉及拾音.前端信 ...
- Linux性能优化实战学习笔记:第十讲==中断
Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...
- 基于 Kafka 和 ZooKeeper 的分布式消息队列原理
转载:https://gitbook.cn/books/5bc446269a9adf54c7ccb8bc/index.html 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量 ...
- 再谈基于 Kafka 和 ZooKeeper 的分布式消息队列原理
关于分布式消息队列,我在几个月前写过一篇文章:<深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列 >.最近,由于写作课程<分布式中间件实践之路>的契机,我 ...
- 唐金州的Vue开发实战学习笔记(生态篇)
Vue开发实战学习笔记 Vuex Why Vuex How Vuex Vuex的核心概念和底层原理 Vuex的最佳实践 Vue Router Why Vue Router 路由类型及底层原理 Nuxt ...
- Unix原理与应用学习笔记----第六章 文件的基本属性2
Unix原理与应用学习笔记----第六章 文件的基本属性2 改变文件权限命令:chmod 提示:文件或目录创建后,就被赋予一组默认的权限.所有的用户都有读,只有文件的所有者才有写. 相对权限设置 Ch ...
- Java 8 实战学习笔记
Java 8 实战学习笔记 @(JAVASE)[java8, 实战, lambda] 文章目录 Java 8 实战学习笔记 参考内容 Lambda表达式 Lambda环绕执行模式(抽离步骤) 原始代码 ...
最新文章
- 超车新势力齐聚港股,谁主沉浮?
- 关于在web项目中实现本地打印
- Java的agent机制简述
- Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数
- opencv 叠加文字_Hello world.
- 视达配色教程17 灰色的色彩意象是什么
- OpenJudge NOI 1.7 34:回文子串
- Spark Structured SQL报错:Stream stream joins without equality predicate is not supported
- php的字符串操作,PHP 字符串操作
- c语言 freopen txt_C语言的文件操作 freopen
- ssh等价性的一些疑惑
- Ubuntu 小白起步
- Linux宝库名人轶事栏目 | 开源与茶
- mysql 密码过期解决图例_MYSQL 密码过期解决办法
- 发现贝叶斯的乐高积木
- Simplicity Studio V5 建立一个空工程后如何添加外设驱动
- 甜叶菊提取物甜菊糖苷分离纯化吸附树脂
- 树莓派4接7寸液晶屏竖屏设置
- 静态链接之与静态库的链接
- 我的一百个2019(三):2019,我赚钱了!
热门文章
- mysql,无法修改密码
- 2年时间,涨薪20k,想拿高薪还真不能老老实实的工作...
- 第六周:数组 + 递归 + 函数
- Android Studio 启动项目报错 Warning:Uninstalling will remove the application data!
- JavaScript音频库-Dancer.js
- 千分之二手续费0.2费率微信支付商户号申请
- 网络对抗作业一——张驰
- 新东方计算机考研排名,考研分数,机械考研院校排名?
- 期货期权的异同(期货期权的异同点)
- 数据时代,谁来舞动存储“三叉戟”?