分布式消息队列DMS
什么是消息中间件?
消息中间件是分布式系统中重要的组件,本质就是一个具有接收消息、存储消息、分发消息的队列,应用程序通过读写队列消息来通信。
例如:在淘宝购物时,订单系统处理完订单后,把订单消息发送到消息中间件中,由消息中间件将订单消息分发到下游子系统(如物流、积分、通知等),订单系统和下游子系统通过消息中间件进行通信,减少他们之间的耦合,增加系统稳定性。
主流的消息中间件有哪些?
类别 | 作用及功能 |
---|---|
分布式消息服务Kafka版 | 分布式消息服务Kafka版,兼容开源Kafka,适用于构建实时数据管道、流式数据处理、第三方解耦、流量削峰去谷等场景,具有大规模、高可靠、高并发访问、可扩展且完全托管的特点。 |
分布式消息服务RabbitMQ版 | 分布式消息服务RabbitMQ版,100%兼容开源RabbitMQ,支持广播、事务消息、消息路由、死信队列、优先级队列等,广泛应用于秒杀、流控、系统解耦等场景。 |
分布式消息服务RocketMQ版 | 分布式消息服务RocketMQ版,兼容开源RocketMQ,提供顺序、延迟、定时、重投、死信、事务消息、会话消息等功能,适用于电商、金融等场景。 |
如何选型不同的消息队列
KafKa | RabbitMQ | RocketMQ | |
---|---|---|---|
操作性能(消息中间件的性能主要衡量吞吐量) | Kafka的单机QPS能够达到百万级别,Kafka的吞吐量比RabbitMQ要高出1~2个数量级 | RabbitMQ的单机QPS在万级别 | RocketMQ性能介于RabbitMQ与Kafka之间,单broker几万QPS |
数据可靠性 | Kafka采用多副本机制,数据可靠性较高 | RabbitMQ采用多副本机制,数据可靠性较高 | RocketMQ采用3副本机制,数据可靠性较高。RocketMQ采用Ratt一致性协议,数据一致性高于Kafka与RabbitMQ |
功能选型
KafKa | RabbitMQ | RocketMQ | |
---|---|---|---|
持久化 | 支持 | 支持 | 支持 |
优先级队列 | 支持 | ||
延迟队列 | 支持 | 支持 | |
死信队列 | 支持 | 支持 | |
消息重试 | 支持 | ||
事务消息 | 支持 | 支持 | 支持 |
产品优势--华为云的分布式消息服务Kafka
华为云分布式消息服务Kafka版完全兼容开源社区版本,旨在为用户提供便捷高效的消息队列。业务无需改动即可快速迁移上云,为您节省维护和使用成本。
-
一键式部署,免去集群搭建烦恼
您只需要在实例管理界面选好规格配置,提交订单。后台将自动创建部署完成一整套Kafka实例。
-
兼容开源,业务零改动迁移上云
兼容社区版Kafka的API,具备原生Kafka的所有消息处理特性。
业务系统基于开源的Kafka进行开发,只需加入少量认证安全配置,即可使用华为云分布式消息服务Kafka版,做到无缝迁移。
说明:Kafka实例兼容开源社区Kafka 1.1.0、2.7、3.x版本。在客户端使用上,推荐使用和服务端版本一致的版本。
-
安全保证
独有的安全加固体系,提供业务操作云端审计,消息存储加密等有效安全措施。
在网络通信方面,除了提供SASL(Simple Authentication and Security Layer)认证,还借助虚拟私有云(VPC)和安全组等加强网络访问控制。
-
数据高可靠
Kafka实例支持消息持久化,多副本存储机制。副本间消息同步、异步复制,数据同步或异步落盘多种方式供您自由选择。
-
集群架构与跨AZ部署,服务高可用
Kafka后台为多集群部署,支持故障自动迁移和容错,保证业务的可靠运行。
Kafka实例支持跨AZ部署,代理部署在不同的AZ,进一步保障服务高可用。不同AZ之间基于Kafka ISR(in-sync replica)进行数据同步,Topic需要选择数据多副本并且将不同副本分布到不同的ISR上,在ISR正常同步状态下,故障RPO(Recovery Point Objective)趋近于0。
-
无忧运维
华为云提供一整套完整的监控告警等运维服务,故障自动发现和告警,避免7*24小时人工值守。Kafka实例自动上报相关监控指标,如分区数、主题数、堆积消息数等,并支持配置监控数据发送规则,您可以在第一时间通过短信、邮件等获得业务消息队列的运行使用和负载状态。
-
海量消息堆积与弹性扩容
内建的分布式集群技术,使得服务具有高度扩展性。分区数可配置多达200个,存储空间弹性扩展,保证在高并发、高性能和大规模场景下的访问能力,轻松实现百亿级消息的堆积和访问能力。
-
多规格灵活选择
Kafka实例的带宽与存储资源可灵活配置,并且自定义Topic的分区数、副本数。
应用案例
异步通信
shell
将业务中属于非核心或不重要的流程部分,使用消息异步通知的方式发给目标系统,这样主业务流程无需同步等待其他系统的处理结果,
从而达到系统快速响应的目的
如网站的用户注册场景,在用户注册成功后,还需要发送注册邮件与注册短信,这两个流程使用Kfk消息服务通知邮件发送系统与短信发送系统,从而提升注册流程的响应速度。
- 串行发送注册邮件与短信流程
- 借助消息队列异步发送注册邮件与短信流程
错峰流控与流量削峰
shell
在电子商务系统或大型网站中,上下游系统处理能力存在差异,处理能力高的上游系统的突发流量可能会对处理能力低的某些下游系统造成冲击,需要提高系统的可用性的同时降低系统实现的复杂性。电商大促销等流量洪流突然来袭时,可以通过队列服务堆积缓存订单等信息,在下游系统有能力处理消息的时候再处理,避免下游订阅系统因突发流量崩溃。消息队列提供亿级消息堆积能力,3天的默认保留时长,消息消费系统可以错峰进行消息处理。
- 消息队列应对秒杀大流量场景
日志同步
shell
在大型业务系统设计中,为了快速定位问题,全链路追踪日志,以及故障及时预警监控,通常需要将各系统应用的日志集中分析处理。
Kafka设计初衷就是为了应对大量日志传输场景,应用通过异步方式将日志消息同步到消息服务,再通过其他组件对日志做实时或离线分析,也可用于关键日志信息收集进行应用监控。
日志同步主要有三个关键部分:日志采集客户端,Kafka消息队列以及后端的日志处理应用。
日志采集客户端,负责用户各类应用服务的日志数据采集,以消息方式将日志"批量"、"异步"发送Kafka客户端。
Kafka客户端批量提交和压缩消息,对应用服务的性能影响非常小。
Kafka将日志存储在消息文件中,提供持久化。
日志处理应用,如Logstash,订阅并消费Kafka中的日志消息,最终供文件搜索服务检索日志,或者由Kafka将消息传递给Hadoop等其他大数据应用系统化存储与分析。
息,对应用服务的性能影响非常小。
Kafka将日志存储在消息文件中,提供持久化。
日志处理应用,如Logstash,订阅并消费Kafka中的日志消息,最终供文件搜索服务检索日志,或者由Kafka将消息传递给Hadoop等其他大数据应用系统化存储与分析。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7deaaf955e0a4520a00b8803d4597d54.png#pic_center)