消息队列

kafka介绍与搭建(单机版)

北城余情 提交于 2020-01-23 19:23:53
一、kafka介绍 1.1 主要功能 根据官网的介绍,ApacheKafka®是 一个分布式流媒体平台 ,它主要有3种功能:   1:It lets you publish and subscribe to streams of records.发布和订阅消息流,这个功能类似于消息队列,这也是kafka归类为消息队列框架的原因   2:It lets you store streams of records in a fault-tolerant way.以容错的方式记录消息流,kafka以文件的方式来存储消息流   3:It lets you process streams of records as they occur.可以再消息发布的时候进行处理 1.2 使用场景 1:Building real-time streaming data pipelines that reliably get data between systems or applications.在系统或应用程序之间构建可靠的用于传输实时数据的管道,消息队列功能 2:Building real-time streaming applications that transform or react to the streams of data。构建实时的流数据处理程序来变换或处理数据流,数据处理功能 1.3

kafka为什么这么快?

房东的猫 提交于 2020-01-23 18:33:19
顺序读写 Kafka的消息是不断追加到文件中的,这个特性使它可以充分利用磁盘的顺序读写能力。 顺序读写降低了硬盘磁头的寻道时间,只需要很少的扇区旋转时间,所以速度远快于 随机读写。Kafka官方给出的测试数据(Raid-5, 7200rpm) 顺序I/O: 600MB/s 随机I/O: 100KB/s 零拷贝 先简单的了解下文件系统的操作流程,例如一个程序要把文件内容发送到网络。这个过程发生在用户空间,文件和网络socket属于硬件资源,两者之间有一个 内核空间,在操作系统内部,整个过程为: 在Linux Kernal 2.2之后出现了一种叫做“零拷贝(zero-copy)”系统调用机制,就是跳过“用户缓冲区”的拷贝,建立一个磁盘空间和内存空间的直接映射,数据不再复制到“用户态缓冲区”。系统上下文切换减少2次,可以提升一倍性能 文件分段 Kafka的队列topic被分为了多个区partition, 每个partition又分为了多个segment,所以一个队列中的消息实际上是保存在N多个片段文件中,通过分段的方式,每次文件操作都是对一个小文件的操作,非常轻便,同时也增加了并行处理能力 批量发送 Kafka允许进行批量消息发送,先将消息缓存在内存中,然后一次请求批量发送出去,比如可以指定缓存的消息达到某个量的时候发送,或者缓存了固定的时间后发送。这种策略大大减少了服务器端的I/O次数

RabbitMQ

跟風遠走 提交于 2020-01-23 17:06:27
一 、RabbitMQ简介 RabbitMQ是基于AMQP实现的一个开源消息组件,主要用于在分布式系统中存储转发消息,由因高性能、高可用以及高扩展而出名的 Erlang 写成。 。其中,AMQP(Advanced Message Queuing Protocol,即高级消息队列协议),是一个异步消息传递所使用的应用层协议规 二、RabbitMQ特点 高可靠:RabbitMQ 提供了多种多样的特性让你在可靠性和性能之间做出权衡,包括持久化、发送应答、发布确认以及高可用性。 高可用队列:支持跨机器集群,支持队列安全镜像备份,消息的生产者与消费者不论哪一方出现问题,均不会影响消息的正常发出与接收。 灵活的路由:所有的消息都会通过路由器转发到各个消息队列中,RabbitMQ内建了几个常用的路由器,并且可以通过路由器的组合以及自定义路由器插件来完成复杂的路由功能。 支持多客户端:对主流开发语言(如:Python、Ruby、.NET、Java、C、PHP、ActionScript等)都有客户端实现。 集群:本地网络内的多个Server可以聚合在一起,共同组成一个逻辑上的broker。 扩展性:支持负载均衡,动态增减服务器简单方便。 权限管理:灵活的用户角色权限管理,Virtual Host是权限控制的最小粒度。 插件系统:支持各种丰富的插件扩展,同时也支持自定义插件

Kafka消费者与消费组

和自甴很熟 提交于 2020-01-23 13:36:11
消费者(Consumer)负责订阅Kafka中的主题(Topic),并且从订阅的主题上拉取消息。与其它一些消息中间件不同的是:在Kafka的消费理念中还有一层消费组(Consumer Group)的概念,每个消费都有一个对应的消费组。当消息发布到主题后,只会被投递给订阅它的每个消费组中的一个消费者。 如上图所示,某个主题共有4个分区(Partition):P0、P1、P2、P3。有两个消费组A和B都订阅了这个主题,消费组A中有4个消费者(C0、C1、C2、C3),消费组B中有2个消费者(C4和C5)。按照Kafka默认的规则,最后的分配结果是消费组A中的每一个消费者分配到1个分区,消费组B中的每一个消费者分配到2个分区,两个消费组之间互不影响。每个消费者只能消费所分配到的分区中的消息。换言之, 每一个分区只能被一个消费组中的一个消费者所消费 。 下面再来看一下消费组内的消费都个数变化时所对应的分区分配的演变。假设目前某消费组内只有一个消费者C0,订阅了一个主题,这个主题包含了7个分区:P0、P1、P2、P3、P4、P5、P6。也就是说,这个消费者C0订阅了7个分区,具体情况如下图: 此时消费组内又加入了一个新的消费者C1,按照既定的逻辑,需要将原来消费者C0的部分分区分配给消费者C1消费,如下图:消费者C0和C1各自负责消费的分区无逻辑上的干扰。

Linux(CENTOS7) RabbitMq安装

不打扰是莪最后的温柔 提交于 2020-01-23 11:30:56
  RabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。 1、安装Erlang   因为rabbitMQ是Erlang语言编写的,所以我们首先需要安装Erlang rpm -Uvh http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el7.centos.x86_64.rpm 2、安装rabbitMQ-server rpm -Uvh http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.6/rabbitmq-server-3.5.6-1.noarch.rpm 3、查看是否安装成功 rpm -qa|grep rabbitmq ​ 4、开启rabbit-server 开启:service rabbitmq-server start 关闭:service rabbitmq-server stop ​ 这样虽然我们已经将rabbitmq的服务正常启动了,但是我们在物理机的浏览器中输入ip:15672时,并不能连接,因为我们还没有配置维护插件和开启远程连接 5、查看状态

初识中间件Kafka

烂漫一生 提交于 2020-01-23 10:25:53
初识中间件Kafka Author:SimplelWu 什么是消息中间件? 非底层操作系统软件,非业务应用软件,不是直接给最终用户使用的,不能直接给客户带来价值的软件统称为中间件 关注于数据的发送和接收,利用高效可靠的异步消息传递机制集成分布式系统。 什么是Kafka? Kafka是一种高吞吐量的分布式发布订阅消息系统,是一个分布式的、分区的、可靠的分布式日志存储服务。它通过一种独一无二的设计提供了一个消息系统的功能。 kafka官方: http://kafka.apache.org/ Kafka作为一个分布式的流平台,这到底意味着什么? 我们认为,一个流处理平台具有三个关键能力: 发布和订阅消息(流),在这方面,它类似于一个消息队列或企业消息系统。 以 容错 的方式存储消息(流)。 在消息流发生时处理它们。 什么是kakfa的优势? 它应用于2大类应用: 构建实时的流数据管道,可靠地获取系统和应用程序之间的数据。 构建实时流的应用程序,对数据流进行转换或反应。 kafka有四个核心API 应用程序使用 Producer API 发布消息到1个或多个topic(主题)。 应用程序使用 Consumer API 来订阅一个或多个topic,并处理产生的消息。 应用程序使用 Streams API 充当一个流处理器,从1个或多个topic消费输入流

RabbitMQ与Redis队列对比

孤者浪人 提交于 2020-01-23 01:09:16
RabbitMQ RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 Redis 是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。 具体对比 : 可靠消费 Redis:没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理 RabbitMQ:具有消息消费确认,即使消费者消费失败,也会自动使消息体返回原队列,同时可全程持久化,保证消息体被正确消费 可靠发布 Reids:不提供,需自行实现 RabbitMQ:具有发布确认功能,保证消息被发布到服务器 高可用 Redis:采用主从模式,读写分离,但是故障转移还没有非常完善的官方解决方案 RabbitMQ:集群采用磁盘、内存节点,任意单点故障都不会影响整个队列的操作 持久化 Redis:将整个Redis实例持久化到磁盘 RabbitMQ:队列,消息,都可以选择是否持久化 消费者负载均衡 Redis:不提供,需自行实现 RabbitMQ:根据消费者情况,进行消息的均衡分发 队列监控 Redis:不提供

RabbitMQ基本原理初识

Deadly 提交于 2020-01-22 23:32:44
一、背景简介   RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。   AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念

消息中间件选择

六眼飞鱼酱① 提交于 2020-01-22 13:03:50
消息队列选择建议 1.Kafka Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,适合产生大量数据的互联网服务的数据收集业务。 大型公司建议可以选用,如果有日志采集功能,肯定是首选kafka了。 2.RocketMQ 天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况。 RoketMQ在稳定性上可能更值得信赖,这些业务场景在阿里双11已经经历了多次考验,如果你的业务有上述并发场景,建议可以选择RocketMQ。 3.RabbitMQ RabbitMQ :结合erlang语言本身的并发优势,性能较好,社区活跃度也比较高,但是不利于做二次开发和维护。不过,RabbitMQ的社区十分活跃,可以解决开发过程中遇到的bug。 如果你的数据量没有那么大,小公司优先选择功能比较完备的RabbitMQ。 来源: CSDN 作者: chrislin9 链接: https://blog.csdn.net/qq_31964019/article/details/104068754

认识一下 RabbitMQ

南楼画角 提交于 2020-01-22 09:25:00
分布式系统中,如何在各个应用之间高效的进行通信,是系统设计中的一个关键。 使用 消息代理(message broker) 是一个优雅的解决方案。 RabbitMQ 就是一个被广泛应用的消息代理,遵循 AMQP协议 。 接下来我们就了解一下: Message Broker 概念 AMQP 协议的核心构成 消息转发的 4 种模式 1. Message Broker broker 是经纪人的意思,促成卖方、买方的交易,例如房产经纪人。 消息模型中,有消息的生产者、消费者,就相当于卖方、买方。 所以,也需要一个消息经纪人,这就引出了 message broker 的概念。 message broker 从生产者接收消息,再发送给消费者,这样,生产者、消费者可以完全隔离。 RabbitMQ 就是一个 message broker 。 2. AMQP 具体如何传递消息?要看使用的消息协议。 RabbitMQ 支持多种协议,其中最重要的是 AMQP (Advanced Message Queuing Protocol)。 AMQP 的概念模型很简单,包含3个部分: Queue Binding Exchange 当一个消息发布到 RabbitMQ 后,首先到达 Exchange,然后 Exchange 把消息分配给 Queue,消费者从 Queue 中得到消息。 AMQP 是一个可编程的协议