这是我参与「第五届青训营 」伴学笔记创作活动的第12天
消息队列
消息队列,保持消费的一个容器,本质是个队列,但是这个队列需要支持高吞吐、高并发、高可用
Kafka
架构
会有多个partition,可以同时进行处理,增加topic吞吐能力,每个partition会有多个replica
副本分布图
Follower会紧跟Leader,尽量与leader保持一致,没跟上的follower会被t掉
Produce
数据压缩
数据存储
Broker:
顺序写,减少磁盘寻道时间
传统数据拷贝
零拷贝
不需要经过用户状态,省去3次拷贝
接收端consumer
手动分配
自动分配
问题总结
运维成本高;对于负载不均衡的场景,解决方案复杂;没有自己的缓存;controller、coordinator、broker在同一进程中,大量io导致性能下降
BMQ
兼容Kafka协议,存算分离
文件结构
写文件
wait可以挡掉一些流量
多机房部署
高级特性
泳道
DataBus
简化消息队列客户端复杂
解耦业务与topic
缓解集群压力,提高吞吐
Mirror
Index
Parquet
新型的列式存储
RocketMQ
适用于延迟要求低的,适用于电商线
存储模型
高级特性
事务场景
事务消息
延迟发送
消费重试与死信队列
个人总结:
消息队列本质还是个队列,先进先出,fafka虽然有较大的吞吐量,但是运维成本高,重启成本大,BMQ则在其之上引入了分布式文件系统,而rockermq是基于电商业务的特性开发出来的,在之后的开发中要根据自己业务的需要选择。