什么是消息队列
消息队列(MQ),指保存消息的一个容器,本质是一个队列,需要支持高吞吐,高并发,并且高可用。
发展历程
消息队列
Kafka: 分布式的,分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
RocketMQ: 低延迟、强制性、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中,运用较广
Pulsar: 是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的构架设计
BMQ: 和Pulsar构架类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替代掉对应的Kafka集群
RocketMQ: 分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。主要功能是异步解耦和流量削峰。
使用场景
如何使用Kafka
基本概念
Topic: 逻辑队列,不同Topic可以建立不同的Topic
Cluster: 物理集群,每个集群中可以建立多个不同的Topic
Producer: 生产者,负责将业务消息发送到Topic中的消息
ConsumerGroup: 消息者组,不同组Consumer消息进度互不干涉
Kafka提高吞吐或者稳定性的功能
Producer: 批量发送、数据压缩
Broker: 顺序写,消息索引,零拷贝
Consumer: Rebalance
Kafka-问题总结
- 运维成本高
- 对于负载不均衡的场景,解决方案复杂
- 没有自己的缓存,完全依赖Page Cache
- Controller、Coordinator和Broker在同一个进程中,大量IO会造成其性能下降
RocketMQ
- RocketMQ 的基本概念(Queue、Tag)
- RcoketMQ 的底层原理(构架模型、存储模型)
- RocketMQ 的高级特性(事务消息死信队列,延迟队列)