消息队列

1 为什么使用消息队列?

1 适用于分布式事务的场景
2 大数据缓存同步
3 数据削峰
3 应用与系统解耦

2 如何保证消息队列是高可用的?

要从消息队列的集群架构说起,以自己相对熟悉的 RocketMQ 与Kafka为例,介绍一下:

2.1 RocketMQ 与Kafka

消息队列(MQ)_Group


Rocket MQ:通信过程如下

Producer 与 NameServer集群中的其中一个节点(随机选择)建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Broker Master 建立长连接,且定时向 Broker 发送心跳。Producer 只能将消息发送到 Broker master,但是 Consumer 则不一样,它同时和提供 Topic 服务的 Master 和 Slave建立长连接,既可以从 Broker Master 订阅消息,也可以从 Broker Slave 订阅消息。

消息队列(MQ)_Group_02

Kafka
与RocketMQ类似,RocketMQ是NameServer集群,在kafka中是用zookeeper代替,都是用来保存和发现master和slave用的。
一个典型的Kafka集群中包含若干Producer(可以是web前端产生的Page View,或者是服务器日志,系统CPU、Memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干Consumer Group,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。

3 如何保证消费的可靠性传输?

不同MQ有不同的配置策略~
1 消息队列

2 生产者

3 消费者