一文说清JMS,AMQP,ActiveMQ,RabbitMQ,Kafka,RocketMQ联系( 二 )


一文说清JMS,AMQP,ActiveMQ,RabbitMQ,Kafka,RocketMQ联系文章插图
如何选择消息中间件
一文说清JMS,AMQP,ActiveMQ,RabbitMQ,Kafka,RocketMQ联系文章插图

  1. ActiveMQ 的社区算是比较成熟 , 但是较目前来说 , ActiveMQ 的性能比较差 , 而且版本迭代很慢 , 不推荐使用 。
  2. RabbitMQ 在吞吐量方面虽然稍逊于 Kafka 和 RocketMQ, 但是由于它基于 erlang 开发 , 所以并发能力很强 , 性能极其好 , 延时很低 , 达到微秒级 。 但是也因为 RabbitMQ 基于 erlang 开发 , 所以国内很少有公司有实力做erlang源码级别的研究和定制 。 如果业务场景对并发量要求不是太高(十万级、百万级) , 那这四种消息队列中 , RabbitMQ 一定是你的首选 。 如果是大数据领域的实时计算、日志采集等场景 , 用 Kafka 是业内标准的 , 绝对没问题 , 社区活跃度很高 , 绝对不会黄 , 何况几乎是全世界这个领域的事实性规范 。
  3. RocketMQ 阿里出品 , Java 系开源项目 , 源代码我们可以直接阅读 , 然后可以定制自己公司的MQ , 并且 RocketMQ 有阿里巴巴的实际业务场景的实战考验 。 RocketMQ 社区活跃度相对较为一般 , 不过也还可以 , 文档相对来说简单一些 。 还有就是阿里出台的技术 , 你得应对这个技术万一被抛弃 , 社区黄掉的风险 , 如果你们公司有技术实力我觉得用RocketMQ 挺好的
  4. Kafka 的特点其实很明显 , 就是仅仅提供较少的核心功能 , 但是提供超高的吞吐量 , ms 级的延迟 , 极高的可用性以及可靠性 , 而且分布式可以任意扩展 。 同时 Kafka 最好是支撑较少的 topic 数量即可 , 保证其超高吞吐量 。 Kafka 唯一的一点劣势是有可能消息重复消费 , 那么对数据准确性会造成极其轻微的影响 , 在大数据领域中以及日志采集中 , 这点轻微影响可以忽略 。 Kafka天然适合大数据实时计算以及日志收集 。
AMQP协议详解前面说到消息中间件有2种协议 , JMS和AMQP 。 JMS你可以类比为JDBC , 搞了一套接口让不同厂商来实现这个接口 , 但是这个协议设计的确实不够优雅 , 因此就不介绍这个协议了 , 除非你用ActiveMQ , 不然学了真没啥用 。 详细说一下AMQP协议 , 毕竟现在用RabbitMQ的公司还是很多的 , 要想学好RabbitMQ , AMQP协议是必须要清楚的 。
一文说清JMS,AMQP,ActiveMQ,RabbitMQ,Kafka,RocketMQ联系文章插图
AMQP协议模型上图是AMQP协议中一个消息的流转过程 , 画的的很清楚 , 不详细介绍了 。
AMQP核心概念介绍一些AMQP协议常见的概念 。
一文说清JMS,AMQP,ActiveMQ,RabbitMQ,Kafka,RocketMQ联系文章插图
【一文说清JMS,AMQP,ActiveMQ,RabbitMQ,Kafka,RocketMQ联系】如果有用过ActiveMQ和RabbitMQ , 对上面的名词一定不会陌生 。 后面一篇文章就结合RabbitMQ来阐述上面的概念 。