4 种消息队列,如何选型?
kafka
分布式存储,多分区,分副本;基于发布订阅模式
架构
Product broker Consumer Group ZK
关键词
product
topic主题:消息分类,类似数据库表
partition分区:主题消息,存储在不同的分区上,不同分区部署到不同的服务器上
broker / +集群:即部署的kafka服务,接收消息,为消息设置偏移量,保存到磁盘
批次:目的,为了提高消息,消息会分批次写入kafka,批次概念,一组消息
相同主题+分区的消息,放到一个批次中
消费者组,消费者
push/ pull:生产/消费
分区与消费者/组关系:
一个分区只能被一个消费者消费,即只能对应一个消费组;一个消费者可以消费多个分区
工作原理
生产消息后,把消息序列化,通过不同的分区策略,找到对应的分区。
什么策略:顺序轮询,时间轮询,key hash
相同主题和分区的消息,会被存放在同一个批次里,然后由一个独立的线程负责把它们发到 Kafka Broker 上。
rocketMq
比kafka好在哪里,优化了可靠性传输/事务性
架构
name服务器,注册中心,类似ZK。product broker conumser group
关键词
product
topic主题:一级分类
topic子主题(tag):二级分类, 同一个业务模块不同的目的
/ 队列 /
broker:用于存放队列,一个broker可以存放多topic
/ 消费者组,消费者
队列与消费者/组关系
一个队列只能被一个消费者消费,即只能对应一个消费组;
一个消费者组可以消费多个队列
工作原理
为了提高并发能力,一个topic对应多个队列,生产者根据主题将消息放入topic,然后采取不同的策略(轮询策略),把消息发送到不同的队列中
存盘
简单提一下,Broker 通过集群部署,并且提供了 master/slave 的结构,salve 定时从 master 同步数据(同步刷盘或者异步刷盘),如果 master 宕机,则 slave 提供消费服务,但是不能写入消息。