`

消息队列的选择:kafka、rabbitmq、zeromq

阅读更多

最近在做一个数据分析相关的工作,需求是将全国各地idc内的流量信息进行汇总和分析最后吐出一些安全策略,由于对时效性的要求比较高,大概每隔几秒就会有一次几十M的的数据需要传递到汇总服务器上去,而且随着业务的发展数据量还会越来越大,所以使用什么手段来做数据的传输就成为了一个关键的问题。

首先是可扩展性,如果使用标准socket进行传递的话随着数据量的扩大单点肯定会成为瓶颈,而且如果可用性要高的话,异步、缓存、重传等等都是需要考虑的要素,为了开速上线功能就要去几个开源的消息队列里挑选一下合适这个项目的了。

由于团队内的一些推荐和自己以前的经验,初步定下了kafka、rabbitmq、zeromq三个软件,这里主要介绍一下这三个软件各自的特点和功能,详细的使用说明和学习资料后面在补。

一、rabbitmq

首先是百科里的一段话,Rabbitmq是流行的开源消息队列系统,使用erlang语言进行开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。可以说从功能上rabbitmq基本上是符号这次项目要求的工具。

它的优点有:

1、完整的消息队列系统,支持多种消息队列模式,包括竞争消费;

2、基于AMQP

3、支持集群模式,扩展集群容量和性能比较方便,同时集成了集群的监控和管理;

4、支持消息的持久化;

缺点是:

1、需要学习比较复杂的接口和协议,比较耗费时间;

2、性能不是特别理想大概在1wqps左右;

3、使用Erlang语言,以前没听说过,出了问题不会排查;

二、zeromq

以前经常在内网中使用,号称是最快的消息队列,由于它支持的模式非常多:tcp、ipc、inproc、multicas,基本已经达到了替代标准socket的地步了,听说linux内核已经准备将zeromq纳入标准内核中了。

zeromq是一个智能传输层,它并不是对socket的封装,而是在其之上有一套自己的协议,可以使用非常丰富的开发模式像扇出(fanout)、发布订阅(pub-sub)、任务分发(task distribution)、请求响应(request-reply)等。

优点:

1、缺省为异步I/O交互,封装了连接的维护操作,消息处理并行化;

2、性能非常不错;

3、编程简单,上手很快;

缺点:

1、消息无法持久化,除非自己在实现一个中间件,否则消息传递完成就删除了;

2、扩展性不是很好,其实是一个消息库,并不算是MQ;

三、kafka

日志团队正在使用的工具,是一个消息发布订阅系统。生产者向某个队列发送一个数据,消费者订阅一个队列,一旦这个队列内产生新的数据了,中间人就会将数据发送给所有订阅队列的消费者。

用术语来说生产者就是producer、消费者就是consumer、中间人就是broker,kafka主要就是这三者之间进行联系的。

优点:

1、高吞吐量率,每秒能处理几十万条消息;

2、分布式架构,能够以集群进行处理;

3、日志团队已经建立了kafka集群,可以蹭一蹭;

缺点:

1、以前没有使用过,需要一定的熟悉时间,和开发工作;

四、结论

日志团队的强烈推荐,和强大的技术支持,最后决定使用kafka了,它提供的特点和优势确实也使人心动,不过这次的调研也让我了解了一些开源软件的设计思路和软件选择的看法,后面在写几篇记录一下。

 

原文地址: http://www.mrhaoting.com/?p=139

 

分享到:
评论

相关推荐

    Kafka入门教程与详解

    * ZeroMQ:号称最快的消息队列系统,尤其针对大吞吐量的需求场景,擅长的高级/复杂的队列,但是技术也复杂,并且只提供非持久性的队列。 * ActiveMQ:Apache 下的一个子项,类似 ZeroMQ,能够以代理人和点对点的技术...

    浅谈Java消息队列总结篇(ActiveMQ、RabbitMQ、ZeroMQ、Kafka)

    常用的消息队列有 ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ 等。 Java 消息队列的应用场景: 1. 异步处理:引入消息队列,将不是必须的业务逻辑异步处理,解决系统性能瓶颈问题。 2. 应用解耦:引入...

    消息队列模型

    在C++和Linux环境下,我们可以使用多种库来实现消息队列,例如POSIX消息队列、ZeroMQ、RabbitMQ、Apache Kafka等。下面我们将深入探讨这些知识点: 1. **POSIX消息队列**: 这是Linux内核提供的一种原生机制,允许...

    消息队列RabbitMQ介绍

    在比较RabbitMQ与其他主流消息队列产品时,如ActiveMQ、ZeroMQ和Kafka等,需要考虑消息协议、产品特性、使用场景等多个方面。RabbitMQ基于高级消息队列协议(AMQP),而其他产品可能基于不同的协议,如ZeroMQ基于TCP...

    用消息队列实现的简单聊天程序

    2. **消息队列的类型**:常见的消息队列有RabbitMQ、Kafka、ActiveMQ、ZeroMQ等。这些消息队列各有特点,例如RabbitMQ支持多种协议,Kafka擅长大数据流处理,而ZeroMQ则提供了轻量级的解决方案。 3. **消息模型**:...

    kafka课堂讲义.docx

    - **峰值处理**:消息队列可以缓冲峰值流量,避免服务过载。 - **异步通信**:非实时处理的请求可以先放入消息队列,待合适时机再处理。 - **可恢复性**:即使部分系统出现问题,其他系统仍可以从消息队列中获取并...

    分布式架构之消息队列.pdf

    在实际生产环境中,常见的消息队列中间件有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ和RocketMQ等。 **消息队列工作原理** 消息队列通常包含三个角色:队列服务端、消息生产者和消息消费者。服务端负责接收和...

    Apache Kafka 下一代分布式消息系统

    作为下一代分布式消息系统,Kafka 提供了发布/订阅消息队列的机制。Kafka 的这些特点为构建可靠的分布式系统和大数据处理提供了坚实的基础。 首先,分布式系统的核心在于能够分布在多个物理机器上运行,分布式系统...

    kafka的使用场景.docx

    虽然市场上有多种消息中间件,如ActiveMQ、RabbitMQ、ZeroMQ、MetaMQ、RocketMQ等,但Kafka以其高吞吐量、低延迟和可持久化特性,在大数据处理和实时流应用中脱颖而出。 四、Kafka在电商系统中的应用 电商系统中,...

    RabbitMq实例以及安装包

    另外,Kafka 的定位主要在日志等方面, 因为Kafka 设计的初衷就是处理日志的,可以看做是一个日志(消息)系统一个重要组件,针对性很强,所以 如果业务方面还是建议选择 RabbitMq 。 还有就是,Kafka 的性能(吞吐...

    消息队列如何理解?

    目前市场上有许多成熟的消息队列产品可供选择,包括但不限于: - **ActiveMQ** - **RabbitMQ** - **ZeroMQ** - **Kafka** - **MetaMQ** - **RocketMQ** 每种产品都有其特点和适用场景,开发者可以根据具体需求选择...

    Kafka介绍.pptx

    5. **消息状态维护**:消息被消费的状态在Consumer端维护,而非Server端,这有助于简化系统设计并提高性能。 6. **自动故障恢复**:系统能够自动检测和处理节点故障,保证系统的连续运行和服务可用性。 #### Kafka...

    消息队列的实现

    此外,还可以使用第三方库,如ZeroMQ、RabbitMQ或Apache Kafka,这些库提供了更高级别的功能,如持久化、分区和复制,适用于分布式系统。 总的来说,消息队列的实现涉及对并发编程、数据结构和通信协议的深刻理解。...

    RabbitMQ 讲义.pdf

    目前市场上主流的消息队列产品包括ActiveMQ、ZeroMQ、RabbitMQ、RocketMQ和Kafka。其中,ActiveMQ基于JMS协议,而ZeroMQ是基于C语言开发,RabbitMQ基于AMQP协议并使用Erlang语言编写,RocketMQ是阿里巴巴基于JMS协议...

    消息队列1

    本文将围绕标题"消息队列1"和描述中的内容,探讨几个主流的消息队列系统,包括Kafka、RabbitMQ、ZeroMQ和RocketMQ,以及它们在可用性、开发语言、协议支持、消息存储、事务处理和负载均衡等方面的特点。 首先,...

    kafka集群方案选型

    在当前的消息中间件产品市场中,存在多种选择,包括ActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ等。每种产品都有其优缺点,本文将对这些产品进行比较,阐述Kafka集群方案选型的必要性和可行性。 一、消息中间件...

    rabbitMQ文档

    - **Queue**:消息队列载体,每个消息都会被投入一个或多个队列。 - **Binding**:绑定,其作用是把Exchange和Queue按照路由规则绑定起来。 - **Routing Key**:路由关键字,Exchange根据这个关键字进行消息投递。 -...

    p14消息中间件MJS+RabbitMQ.doc

    MJS+RabbitMQ是一种典型的消息中间件解决方案,其中RabbitMQ是基于AMQP(Advanced Message Queuing Protocol)协议的开源消息队列系统,广泛应用于各种场景,如淘宝MySQL集群的内部通信和OpenStack云平台。...

    消息队列技术介绍

    目前在生产环境,使用较多的消息队列有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ等。 下面详细介绍一下消息队列在实际应用中常用的使用场景。场景分为异步处理、应用解耦、流量削锋和消息通讯四个场景。...

    kafka课上笔记,介绍、原理、实操

    例如,RabbitMQ 是一个基于Erlang的成熟消息队列,提供多种协议支持,适合企业级应用,但可能相对较重。Redis,尽管是一个Key-Value数据库,其内置的MQ功能使其成为轻量级队列服务的选择。ZeroMQ 以其高性能著称,...

Global site tag (gtag.js) - Google Analytics