聊聊 MQ 技术选型

本文探讨了Kafka、ActiveMQ、RabbitMQ和RocketMQ四种主流分布式消息队列的特性和应用场景。Kafka以其高性能、分布式特性及丰富的API脱颖而出,适合大数据实时流处理;ActiveMQ支持多种协议和集成模式,适用于中小型应用;RabbitMQ提供高可用集群,适合跨网络环境的消息传递;RocketMQ在阿里巴巴的大规模实践中表现出色,强调顺序和高可靠性。在选择时需结合业务需求和技术栈进行决策。
摘要由CSDN通过智能技术生成

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。它可以实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。

消息队列在电商系统、消息通讯、日志收集等应用中扮演着关键作用,以阿里为例,其研发的消息队列(RocketMQ)在历次天猫 “双十一” 活动中支撑了万亿级的数据洪峰,为大规模交易提供了有力保障。

作为提升应用性能的重要手段,分布式消息队列技术在互联网领域得到了越来越广泛的关注 。本文将介绍四种常用的分布式消息队列开源软件:Kafka、ActiveMQ、RabbitMQ及 RocketMQ。

文章目录如下:

  • Kafka
  • ActiveMQ
  • RabbitMQ
  • RocketMQ
  • 几种消息队列的比较
  • 参考文献

1. Kafka

在分布式消息队列的江湖里,Kafka 凭借其优秀的性能占据重要一席。它最初由 LinkedIn 公司开发,Linkedin 于 2010 年贡献给了 Apache基金会,之后成为顶级开源项目。

Kafka简介

关于 Kafka,网上有很多介绍,经过不断地复制、洗稿、演绎后,难免背离原意,因此,我们还是来看一下官网给出的定义:

Apache Kafka is a distributed streaming platform.

Kafka 作为流量平台具有以下三种能力:

  1. 发布和订阅记录流,类似于消息队列或企业消息系统;
  2. 具有容错能力,且可以持久化的方式存储记录流;
  3. 当记录流产生时(发生时),可及时对其进行处理。

Kafka 适用于两类应用:

  1. 建立实时流数据管道,在系统或应用之间可靠地获取数据;
  2. 建立对数据流进行转换或反应的实时流应用程序。

kafka 包含四种核心 API。

  • Producer API:基于该 API,应用程序可以将记录流发布到一个或多个 Kafka 主题(Topics);
  • Consumer API:基于该 API,应用程序可以订阅一个或多个主题,并处理主题对应的记录流;
  • Streams API:基于该 API,应用程序可以充当流处理器,从一个或多个主题消费输入流,并生成输出流输出一个或多个主题,从而有效地将输入流转换为输出流;
  • Connector API:允许构建和运行将 Kafka 主题连接到现有应用程序或数据系统的可重用生产者或消费者。例如,关系数据库的连接器可能会捕获表的每一个更改。

Kafka 特点

作为一种高吞吐量的分布式发布订阅消息系统,Kafka 具有如下特性:

  1. 快速持久化,可以在 O(1) 的系统开销下进行消息持久化;
  2. 高吞吐,在一台普通的服务器上可以达到 10W/s 的吞吐速率;
  3. 完全的分布式系统,Broker、Producer、Consumer 都原生自动支持分布式,自动实现负载均衡;
  4. 支持同步和异步复制两种 HA;
  5. 支持数据批量发送和拉取;
  6. Zero-Copy,减少 IO 操作步骤;
  7. 数据迁移、扩容对用户透明;
  8. 无需停机即可扩展机器;
  9. 其他特性还包括严格的消息顺序、丰富的消息拉取模型、高效订阅者水平扩展、实时的消息订阅、亿级的消息堆积能力、定期删除机制。

Kafka 部署环境

操作系统

  • Windows:虽然 Kafka 可以在部分 Windows 系统运行,但官方并不推荐;
  • Unix:支持所有版本的 Unix 系统,以及 Linux 和 Solaris系统。

环境要求

  • JDK:Kafka 的最新版本为 2.0.0,JDK 版本需 1.8 及以上;
  • ZooKeeper:Kafka 集群依赖 ZooKeeper,需根据 Kafka 的版本选择安装对应的 ZooKeeper 版本(未来的 Kafka 即将脱离 ZooKeeper)。

Kafka 架构

​kafka架构 如上图所示,一个典型的 Kafka 体系架构包括若干 Producer(消息生产者),若干 Broker(Kafka 支持水平扩展,一般 Broker 数量越多,集群吞吐率越高),若干 Consumer(Group),以及一个 Zookeeper 集群。Kafka 通过 Zookeeper 管理集群配置,选举 Leader,以及在 Consumer Group 发生变化时进行 Rebalance。Producer 使用 Push(推)模式将消息发布到 Broker,Consumer 使用 Pull(拉)模式从 Broker 订阅并消费消息。 各个名词的解释请见下表:

​Kafka 核心组件 Kafka 高可用方案 Kafka 高可用性的保障来源于其健壮的副本(Replication)策略。为了提高吞吐能力,Kafka 中每一个 Topic 分为若干 Partitions;为了保证可用性,每一个 Partition 又设置若干副本(Replicas);为了保障数据的一致性,Zookeeper 机制得以引入。基于 Zookeeper,Kafka 为每一个 Partition 找一个节点作为 Leader,其余备份作为 Follower,只有 Leader 才能处理客户端请求,而 Follower 仅作为副本同步 Leader 的数据,如下示意图:TopicA 分为两个 Partition,每个 Partition 配置两个副本。

​Kafka 高可用方案 基于上图的架构,当 Producer Push 的消息写入 Partition(分区) 时,Leader 所在的 Broker(Kafka 节点)会将消息写入自己的分区,同时还会将此消息复制到各个 Follower,实现同步。如果某个 Follower 挂掉,Leader 会再找一个替代并同步消息;如果 Leader 挂了,将会从 Follower 中选举出一个新的 Leader 替代,继续业务,这些都是由 ZooKeeper 完成的。 Kafka 优缺点 优点主要包括以下几点:

  1. 客户端语言丰富,支持 Java、.NET、PHP、Ruby、Python、Go 等多种语言;

  2. 性能卓越,单机写入 TPS 约在百万条/秒,消息大小 10 个字节;

  3. 提供完全分布式架构,并有 Replica 机制,拥有较高的可用性和可靠性,理论上支持消息无限堆积;

  4. 支持批量操作;

  5. 消费者采用 Pull 方式获取消息,消息有序,通过控制能够保证所有消息被消费且仅被消费一次;

  6. 有优秀的第三方 Kafka Web 管理界面 Kafka-Manager;

  7. 在日志领域比较成熟,被多家公司和多个开源项目使用。

缺点主要有:

  1. Kafka 单机超过 64 个队列/分区,Load 会发生明显的飙高现象,队列越多,Load 越高,发送消息响应时间越长;

  2. 使用短轮询方式,实时性取决于轮询间隔时间;

  3. 消费失败不支持重试;

  4. 支持消息顺序,但是一台代理宕机后,就会产生消息乱序;

  5. 社区更新较慢。

2. ActiveMQ ActiveMQ 是 Apache 下的一个子项目。之所以把它放在第二位介绍,是因为它官网上的说明: “ Apache ActiveMQ is the most popular and powerful open source messaging and Integration Patterns server. ” 居然没有“之一”,不太谦虚呀,放在第二位,以示“诫勉”。 ActiveMQ 简介 ActiveMQ 由 Apache 出品,据官网介绍,它是最流行和最强大的开源消息总线。ActiveMQ 是一个完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现,非常快速,支持多种语言的客户端和协议,而且可以非常容易地嵌入到企业的应用环境中,并有许多高级功能。 ActiveMQ 基于 Java 语言开发,目前最新版本为 5.1.5.6。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值