济南建设网站制作优化分析,微商手机网站制作,软件技术方案范例,网站微信支付开发文章目录 引言一、RabbitMQ的简单介绍二、ActiveMQ的简单介绍三、RocketMQ的简单介绍四、Kafka的简单介绍五、各个中间件对比总结参考文档 引言 上文简单讲述了何为消息队列和消息队列的特点#xff08;优点#xff09;#xff0c;本文为大家介绍一下各个消息队列中间件的特… 文章目录 引言一、RabbitMQ的简单介绍二、ActiveMQ的简单介绍三、RocketMQ的简单介绍四、Kafka的简单介绍五、各个中间件对比总结参考文档 引言 上文简单讲述了何为消息队列和消息队列的特点优点本文为大家介绍一下各个消息队列中间件的特点和差距主要对比的中间件有RabbitMQ、ActiveMQ、RocketMQ、Kafka。 一、RabbitMQ的简单介绍 RabbitMQ是一款使用Erlang语言开发的实现AMQP(高级消息队列协议)的开源消息中间件。
组成
Broker消息队列服务进程。此进程包括两个部分Exchange和Queue。Exchange消息队列交换机。按一定的规则将消息路由转发到某个队列。Queue消息队列存储消息的队列。Producer消息生产者。生产方客户端将消息同交换机路由发送到队列中。Consumer消息消费者。消费队列中存储的消息。
特点
可靠性。支持持久化传输确认发布确认等保证了MQ的可靠性。灵活的分发消息策略。这应该是RabbitMQ的一大特点。在消息进入MQ前由Exchange(交换机)进行路由消息。分发消息策略有简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式。支持集群。多台RabbitMQ服务器可以组成一个集群形成一个逻辑Broker。多种协议。RabbitMQ支持多种消息队列协议比如 STOMP、MQTT 等等。支持多种语言客户端。RabbitMQ几乎支持所有常用编程语言包括 Java、.NET、Ruby 等等。可视化管理界面。RabbitMQ提供了一个易用的用户界面使得用户可以监控和管理消息 Broker。插件机制。RabbitMQ提供了许多插件可以通过插件进行扩展也可以编写自己的插件。
工作流程
消息生产者连接到RabbitMQ Broker创建connection开启channel。生产者声明交换机类型、名称、是否持久化等。生产者发送消息并指定消息是否持久化等属性和routing key。exchange收到消息之后根据routing key路由到跟当前交换机绑定的相匹配的队列里面。消费者监听接收到消息之后开始业务处理。 二、ActiveMQ的简单介绍 Apache ActiveMQ是最流行的开源多协议基于Java的消息代理。它支持行业标准协议因此用户可以跨各种语言和平台获得客户端选择的好处。从用 JavaScript、C、C、Python、.Net 等编写的客户端进行连接。使用无处不在的 AMQP协议集成您的多平台应用程序。在 Web 应用程序之间使用 STOMP通过 websockets 交换消息。使用MQTT管理您的物联网设备。支持您现有的 JMS基础架构及其他设备。ActiveMQ 提供了支持任何消息传递用例的强大功能和灵活性。
使用需要Java JDK
特点 服从 JMS 规范JMS 规范提供了良好的标准和保证包括同步或异步的消息分发一次和仅一次的消息分发消息接收和订阅等等。遵从 JMS 规范的好处在于不论使用什么 JMS 实现提供者这些基础特性都是可用的 连接性ActiveMQ 提供了广泛的连接选项支持的协议有HTTP/SIP 多播SSLSTOMPTCPUDPXMPP等等。对众多协议的支持让 ActiveMQ 拥有了很好的灵活性。 支持的协议种类多OpenWire、STOMP、REST、XMPP、AMQP 持久化插件和安全插件ActiveMQ 提供了多种持久化选择。而且ActiveMQ 的安全性也可以完全依据用户需求进行自定义鉴权和授权 支持的客户端语言种类多除了 Java 之外还有C/C.NETPerlPHPPythonRuby 代理集群多个 ActiveMQ 代理可以组成一个集群来提供服务 异常简单的管理ActiveMQ 是以开发者思维被设计的。所以它并不需要专门的管理员因为它提供了简单又使用的管理特性。有很多中方法可以监控 ActiveMQ 不同层面的数据包括使用在 JConsole 或者 ActiveMQ 的Web Console 中使用 JMX通过处理 JMX 的告警消息通过使用命令行脚本甚至可以通过监控各种类型的日志。 三、RocketMQ的简单介绍 RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件前身是MetaQ是阿里参考Kafka特点研发的一个队列模型的消息中间件后开源给apache基金会成为了apache的顶级开源项目具有高性能、高可靠、高实时、分布式特点。
优点
单机吞吐量十万级可用性非常高分布式架构消息可靠性经过参数优化配置消息可以做到0丢失功能支持MQ功能较为完善还是分布式的扩展性好支持10亿级别的消息堆积不会因为堆积导致性能下降源码是java我们可以自己阅读源码定制自己公司的MQ可以掌控天生为金融互联网领域而生对于可靠性要求很高的场景尤其是电商里面的订单扣款以及业务削峰在大量交易涌入时后端可能无法及时处理的情况RoketMQ在稳定性上可能更值得信赖这些业务场景在阿里双11已经经历了多次考验如果你的业务有上述并发场景建议可以选择RocketMQ
缺点
支持的客户端语言不多目前是java及c其中c不成熟社区活跃度不是特别活跃那种没有在 mq 核心中去实现JMS等接口有些系统要迁移需要修改大量代码 四、Kafka的简单介绍 Kafka是最初由Linkedin公司开发是一个分布式、支持分区的partition、多副本的replica基于zookeeper协调的分布式消息系统它的最大的特性就是可以实时的处理大量数据以满足各种需求场景比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎web/nginx日志、访问日志消息服务等等用scala语言编写Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
特点
高吞吐量、低延迟kafka每秒可以处理几十万条消息它的延迟最低只有几毫秒每个topic可以分多个partition, consumer group 对partition进行consume操作。可扩展性kafka集群支持热扩展持久性、可靠性消息被持久化到本地磁盘并且支持数据备份防止数据丢失容错性允许集群中节点失败若副本数量为n,则允许n-1个节点失败高并发支持数千个客户端同时读写
使用场景
日志收集一个公司可以用Kafka可以收集各种服务的log通过kafka以统一接口服务的方式开放给各种consumer例如hadoop、Hbase、Solr等。消息系统解耦和生产者和消费者、缓存消息等。用户活动跟踪Kafka经常被用来记录web用户或者app用户的各种活动如浏览网页、搜索、点击等活动这些活动信息被各个服务器发布到kafka的topic中然后订阅者通过订阅这些topic来做实时的监控分析或者装载到hadoop、数据仓库中做离线分析和挖掘。运营指标Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据生产各种操作的集中反馈比如报警和报告。流式处理比如spark streaming和storm事件源 五、各个中间件对比
特性ActiveMQRabbitMQKafkaRocketMQPRODUCER-COMSUMER支持支持支持支持PUBLISH-SUBSCRIBE支持支持支持支持REQUEST-REPLY支持支持-支持API完备性高高高低静态配置多语言支持支持JAVA优先语言无关支持JAVA优先支持单机呑吐量万级万级十万级单机万级消息延迟-微秒级毫秒级-可用性高主从高主从非常高分布式高消息丢失-低理论上不会丢失-消息重复-可控制理论上会有重复-文档的完备性高高高中提供快速入门有有有无首次部署难度-低中高社区活跃度低中高高 总结
本文简述了几个消息队列中间件的特点和之间的差距对于如何使用本文并没有进行赘述下篇文章将会对于几个中间件如何使用进行描述。欢迎大家提出建议以及批评有任何问题可以私信。 参考文档
ActiveMQ (apache.org)Apache RocketMQMessaging that just works — RabbitMQApache Kafka