消息队列-技术选型
【摘要】 常见的消息队列有哪些?Kafkakafka是LinkedIn开源的一个一个分布式流式处理平台流式处理平台的三个关键功能消息队列:发布合订阅消息流,类似消息队列容错的持久方式存储记录消息流:kafka会把消息持久化到硬盘,避免丢失风险流式处理平台:Kafka提供了完整的流式处理类库Kafka是一个分布式系统,由通过TCP网络协议进行通信的服务器和客户端组成。Kafka2.8之前,中毒依赖于Zo...
常见的消息队列有哪些?
Kafka
kafka是LinkedIn开源的一个一个分布式流式处理平台
流式处理平台的三个关键功能
- 消息队列:发布合订阅消息流,类似消息队列
- 容错的持久方式存储记录消息流:kafka会把消息持久化到硬盘,避免丢失风险
- 流式处理平台:Kafka提供了完整的流式处理类库
Kafka是一个分布式系统,由通过TCP网络协议进行通信的服务器和客户端组成。
Kafka2.8之前,中毒依赖于Zookeeper做元数据管理和集群的高可用。Kafka2.8之后,引入了Raft模式,极大简化了Kafka的架构。
RcoketMQ
RocketMQ是阿里开源的一款云原生“消息、事件、流”实时数据处理平台,借鉴了Kafka,已经成为了Apache顶级项目。
RocketMQ的核心特性
- 云原生:云支持,无限弹性扩缩,k8s友好
- 高吞吐:万亿级吞吐保证,满足大数据场景
- 流处理:提供轻量、高拓展、高性能和丰富功能的流计算引擎
- 金融级:金融级的稳定性
- 架构极简:零外部依赖
- 生态友好:无缝对接微服务、实时计算、数据湖等周边生态
RabbitMQ
RabbitMQ是采用Erlang语言实现AMQP(高级消息队列协议)的消息中间件
RabbitMQ特点:
- 可靠性:Rabbit提供一些机制来保证消息的可靠性,如持久化和发布确认
- 灵活的路由:在消息进入队列之前,通过交换器来路由消息。
- 扩展性:多个RabbitMQ节点可组成一个集群
- 高可用性:队列可以再集群中的机器上设置镜像
- 支持多种协议:RabbitMQ除了原生支持AMQP协议,还支持STOMP、MQTT等中间件协议
- 多语言客户端:RabbitMQ几乎支持所有常用语言
- 易用的管理界面:安装简单,使用简单,安装即自带管理界面
- 插件机制:提供了许多插件,也可以编写自己的插件
Pulsar
pulsar是下一代云原生分布式消息流平台,最初由Yahoo开发
Pulsar集消息、存储、轻量化函数式计算为一体,采用计算和存储分离架构设计
关键特性
- 下一代云原生分布式消息流平台
- Pulsar的单个实例原生支持多个集群
- 极低的发布延迟和端到端延迟
- 可无缝托找到超过一百万个topic
- 简单的客户端API,支持常见开发语言
- 主题的多种订阅模式
- 通过Apache Bookkeeper提供的持久化消息存储机制保证消息传递
- 由轻量级的serverless计算框架
- 基于Pulsar Functions的servlerless connector框架 Pulsar IO使得数据更易移入
- 分层式存储可在数据陈旧时,将数据从热存储到冷存储
ActiveMQ
目前已被淘汰
如何选择
对比方向 | 概要 |
---|---|
吞吐量 | 万级的 ActiveMQ 和 RabbitMQ 的吞吐量(ActiveMQ 的性能最差)要比十万级甚至是百万级的 RocketMQ 和 Kafka 低一个数量级。 |
可用性 | 都可以实现高可用。ActiveMQ 和 RabbitMQ 都是基于主从架构实现高可用性。RocketMQ 基于分布式架构。 Kafka 也是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用 |
时效性 | RabbitMQ 基于 Erlang 开发,所以并发能力很强,性能极其好,延时很低,达到微秒级,其他几个都是 ms 级。 |
功能支持 | Pulsar 的功能更全面,支持多租户、多种消费模式和持久性模式等功能,是下一代云原生分布式消息流平台。 |
消息丢失 | ActiveMQ 和 RabbitMQ 丢失的可能性非常低, Kafka、RocketMQ 和 Pulsar 理论上可以做到 0 丢失。 |
总结:
- ActiveMQ 的社区算是比较成熟,但是较目前来说,ActiveMQ 的性能比较差,而且版本迭代很慢,不推荐使用,已经被淘汰了。
- RabbitMQ 在吞吐量方面虽然稍逊于 Kafka、RocketMQ 和 Pulsar,但是由于它基于 Erlang 开发,所以并发能力很强,性能极其好,延时很低,达到微秒级。但是也因为 RabbitMQ 基于 Erlang 开发,所以国内很少有公司有实力做 Erlang 源码级别的研究和定制。如果业务场景对并发量要求不是太高(十万级、百万级),那这几种消息队列中,RabbitMQ 或许是你的首选。
- RocketMQ 和 Pulsar 支持强一致性,对消息一致性要求比较高的场景可以使用。
- RocketMQ 阿里出品,Java 系开源项目,源代码我们可以直接阅读,然后可以定制自己公司的 MQ,并且 RocketMQ 有阿里巴巴的实际业务场景的实战考验。
- Kafka 的特点其实很明显,就是仅仅提供较少的核心功能,但是提供超高的吞吐量,ms 级的延迟,极高的可用性以及可靠性,而且分布式可以任意扩展。同时 Kafka 最好是支撑较少的 topic 数量即可,保证其超高吞吐量。Kafka 唯一的一点劣势是有可能消息重复消费,那么对数据准确性会造成极其轻微的影响,在大数据领域中以及日志采集中,这点轻微影响可以忽略这个特性天然适合大数据实时计算以及日志收集。如果是大数据领域的实时计算、日志采集等场景,用 Kafka 是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规范。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)