本次学习内容:
- 走进消息队列
- 消息队列-Kafka
- 消息队列-BMQ
- 消息队列-RocketMQ
消息队列定义
消息队列可以看成一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。消息队列是分布式系统中重要的组件之一。
作用与优缺点
异步处理提高性能
削峰/限流
降低系统耦合性
业界消息队列对比
- Kaffa:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色,适用于大数据领域的实时计算、日志采集场景。但存在运维成本高、负载不均衡问题。
- RockerMQ:阿里开源的分布式消息传递和流式数据平台,具有低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性的优点,在一些实时和事务性要求高场景如电商、金融中应用较广。
- Pulsar:下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计。支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性,被看作是云原生时代实时消息流传输、存储和计算最佳解决方案
- BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群。
消息队列-Kaffa
如何使用Kafka
- 创建集群->新增Topic->编写生产者逻辑->编写消费者逻辑
- 基本概念
- Offset
- Replica
- 数据复制
- Kafka架构
- Producer-批量发送
- Producer-数据压缩
- Broker-数据的存储
- Consumer-消息的接收端
- producer:批量发送,数据压缩
- Broker:顺序写,消息索引,零拷贝
- Consumer:Rebalance
Kafka-问题总结
- 运维成本高
- 对于负载不均衡的场景,解决方法复杂
- 没有自己的缓存,完全依赖Page Cache
- Controller 和 Coordinator和Broker在统一进程中,大量IO会造成储层性能下降