中间件消息队列:RabbitMQActiveMQKafka和Redis
Posted 大数据分析BDA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中间件消息队列:RabbitMQActiveMQKafka和Redis相关的知识,希望对你有一定的参考价值。
消息队列(Message Queue)是一种进程间通信或同一进程的不同线程间的通信方式。在分布式系统中,消息队列中间件是组件间沟通的中间(也是中坚)桥梁。下面主要比较目前比较流行的4个消息队列中间件产品,我们可以根据自身产品的语言、场景、要求等选择合适的MQ产品。
RabbitMQ是一个Advanced Message Queuing Protocol(AMQP)的开源实现,由以高性能、可伸缩性出名的Erlang写成。RabbitMQ Server适用的OS有:Windows、Linux/Unix和Mac OS X,RabbitMQ官方的Client有Java、.Net/C#和Erlang。
AMQP协议主要有3个组件:
交换器(Exchange):它是发送消息的实体
队列(Queue):它是接收消息的实体
绑定器(Bind):将交换器和队列连接起来,并且封装消息的路由信息
图1 AMQP协议原理图
ActiveMQ是一个完全支持JMS 1.1和J2EE 1.4规范的JMS Provider实现。JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。
JMS消息通常有两种类型:
点对点(Point-to-Point):在点对点的消息系统中,消息分发给一个单独的使用者,点对点消息往往与队列相关联。
发布/订阅(Publish/Subscribe):发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。该类消息一般与特定的主题关联。
Kafka是一种分布式的,基于发布/订阅的消息系统。Kafka开发语言为Scala,支持跨平台。其设计主要目标如下:
以时间复杂度为O(1)的方式提供消息持久化能力
高吞吐率
支持Kafka Server间的消息分区,及分布式消费,同时保证消息顺序传输
支持离线数据处理和实时数据处理
支持在线水平扩展
图2 Kafka结构图
Redis是一个高性能的key-value数据库,它的出现很大程度补偿了memcached这类key-value存储的不足。虽然它是一个数据库系统,但本身支持MQ功能,完全可以当做一个轻量级的队列服务器使用。Redis开发语言为C,支持OS为Linux。
Redis从2.0版本开始支持发布/订阅指令,发布者调用redis的publish方法往特定的channel发送消息,订阅者在初始化的时候要订阅到该channel,一旦有消息就会立即接收。
参考文献:
AMQP和RabbitMQ入门. Joern Barthel. 杨晨 译
ActiveMQ –JMS开源框架入门介绍. gloomyfish
Kafka设计解析. 郭俊
题图:甘肃月牙泉
以上是关于中间件消息队列:RabbitMQActiveMQKafka和Redis的主要内容,如果未能解决你的问题,请参考以下文章