消息中间件
定义:
面向消息的系统(消息中间件)是在分布式系统中完成消息的发送和接收的基础软件。消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。
主流消息中间件:
ActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ等,其中应用最为广泛的要数RabbitMQ、RocketMQ、Kafka 这三款;
RabbitMQ:
优点:
1.轻量级、部署方便;
2.灵活路由配置;
3.客户端支持大多编程语言;
缺点:
1.如果消息大量堆积,就会导致性能急剧下降;
2.性能较RocketMQ和Kafka最差,秒处理级几万~几十万,如果应用要求高性能,慎选!
3.Erlang开发,功能扩展以及二次开发能力差。
RocketMQ:
优点:
1.有序、事务、流计算、消息推送、日志流处理、binlog分布等场景,经历双11考验。
2.几乎具备了消息队列应该具备的所有特性;
3.java开发,二次开发方便;
4.对电商领域的响应延迟做了很多优化。大多数情况下,响应毫秒级。
5.性能比RabbitMQ高一个数量级,秒几十万级别。
缺点:
与周边系统整合间融不好。
Kafka:
Kafka的可靠性、稳定性和功能性满足大多数应用场景。兼容性完美,尤其大数据和流计算领域,几乎支持所有开源软件。三个软件中发送和接收异步消息最好。秒几十万级别;如果异步消息,并且开启了压缩,Kafka最终可以达到秒2000W消息级别。
优点:
1.支持多消费和生产者;
2.支持broker横向拓展;
3.副本集机制,实现数据冗余,保证数据不丢失;
4.通过topic将数据进行分类;
5.通过分批发送压缩数据的方式,减少数据传输开销,提高吞吐量;
6.支持多种模式消息;
7.基于磁盘实现数据的持久化;
8.高性能的处理信息,在大数据的情况下,可以保证亚秒级的消息延迟;
9.一个消费者可以支持多种topic的消息;
10.对CPU和内存的消耗比较小;
11.对网络开销也比较小;
12.支持跨数据中心的数据复制;
13.支持镜像集群;
缺点:
1.由于是批量发送,所以数据达不到真正的实时;
2.对于mqtt协议不支持;
3.不支持物联网传感数据直接接入;
4.只能支持统一分区内消息有序,无法实现全局消息有序;
5.监控不完善,需要安装插件;
6.需要配合zookeeper进行元数据管理;
7.会丢失数据,并且不支持事务;
8.可能会重复消费数据,消息会乱序,可用保证一个固定的partition内部的消息是有序的,但是一个topic有多个partition的话,就不能保证有序了,需要zookeeper的支持,topic一般需要人工创建,部署和维护一般都比mq高;
参考文章:https://zhuanlan.zhihu.com/p/269823523
使用场景:
1.异步处理;
2.应用解耦;
3.流量削峰;
4.日志处理;
5.纯粹消息通讯;
参考文章:https://blog.csdn.net/yexiaomodemo/article/details/80444732