消息队列

面试题_kafka

耗尽温柔 提交于 2020-02-06 10:40:01
1. kafka介绍 (1).工作原理 首先 Producer 产生 Record 发送给指定的 Kafka Topic(Topic实质是有多个分区构成,每一个分区都会相应的复制分区) ,在真正存放到Kafka集群时会进行计算 key.hashCode%topicPartitionNums 等于要存放的分区序号。 Leader 分区中的数据会自动同步到 Follower 分区中, ZooKeeper 会实时监控服务健康信息,一旦发生故障,会立即进行故障转移操作(将一个Follower复制分区自动升级为Leader主分区) Kafka一个分区实际上是一个有序的Record的 Queue (符合队列的数据结构,先进先出), 分区中新增的数据,会添加到队列的末尾,在处理时,会从队列的头部开始消费数据。 Queue 在标识读写操作位置时,会使用一个 offset (读的offset <= 写的offset) 最后 Consumer 会订阅一个Kafka Topic,一旦Topic中有新的数据产生,Conumser立即拉取最新的记录,进行相应的业务处理。 2.Kafka与传统消息队列的区别? 3.Kafka如何保证高性能读写 √ 写入性能:分区、磁盘顺序写入、Memory Map File(内核空间内存) 写出性能:分区、Zero Copy 总的来说Kafka快的原因: 1

Apache Kafka 源码剖析

▼魔方 西西 提交于 2020-02-06 07:21:38
Getting Start 下载 http://kafka.apache.org/ 优点和应用场景 Kafka消息驱动,符合发布-订阅模式,优点和应用范围都共通 发布-订阅模式优点 解耦合 : 两个应用不需要相互调用 可扩展性 : 消费者的个数可实时扩展 实时性 : 消费者能实时的获取生产者发布的事件 高效 :减少由于多个消费者请求数据造成的数据计算带来的资源消耗 异步通讯 :发布-订阅模式是天生的异步通讯 Kafka其他优点 持久化 : 消息丢失的可控性极高 高性能 : 磁盘顺序读写性能比内存随机读写还高,每秒10万条消息 高吞吐量 :每秒上百MB的吞吐量 顺序性 发布-订阅模式应用范围 适合数据一被生产,就需要被处理的情况 适合数据具有潜在消费者的情况 适合无论有没有消费者,数据都在生产的情况 不适合对数据的处理时间有特殊限定的情况 应用场景 最为消息中间件,实现消息队列和消息的发布-订阅,消息驱动的服务 数据总线,一对多的模式 日志收集,消息中间件的一种应用 数据库主从同步 核心概念 Broker 一个Kafka server就是一个Broker 一般情况下,一个Broker独占一台服务器,发挥微服务的优势 服务器资源有限的情况下,需要设计出Broker/Topic/Partition/Replica的最优分配策略,从而充分利用服务器资源 一个broker可以有多个topic

rabbitmq 介绍

戏子无情 提交于 2020-02-06 03:20:41
MQ全称为Message Queue, 消息队列 (MQ)是一种 应用程序 对应用程序的通信方法。 应用程序 通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如 远程过程调用 的技术。排队指的是 应用程序 通过 队列来通信。 队列 的使用除去了接收和发送 应用程序 同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ。 MQ的消费-生产者模型的一个典型的代表,一端往 消息队列 中不断的写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA 消息中间件 服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。 rabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循 Mozilla Public License 开源协议 使用场景: 最近在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。 来源: https://www.cnblogs.com/yqskj/archive/2013/04/27/3046671.html

RabbitMq学习——Springboot整合rabbitmq之配置延迟消息

拜拜、爱过 提交于 2020-02-06 03:03:43
一、前言 昨晚上,一个大佬说了有关他做一个业务功能,如何将一个商品进行延迟上架,大佬说的方式听着觉得很是新奇,今天特意按照大佬的思维,重新自己搭建实现测试了一下简单的操作。 二、配置项 明人不说暗话,不喜欢大篇幅的阐述相关,只想将我实践的时候以及碰见的问题说明下,废话不多说,直接上配置。 针对rabbitmq这个消息队列的使用,我的专栏中有大篇幅的文章,进行了简单的描述,我们接下来以最简单的direct类转发器为例。 2.1、插件的安装(重点) 这个东西为什么拿在最开始的时候说呢,原因在于我最开始配置文件编写好了之后,出了一大堆的错误信息,还将我的springboot-demo给宕了,找了很久的问题,才发现是我的rabbitmq的配置中,缺少一个文件。 安装插件的步骤: 1、下载指定的插件 由于我使用的是 3.8.1 ,这里以windows环境下的rabbitmq插件安装作为案例。 http://www.rabbitmq.com/community-plugins.html 这个网址中,进入后搜索 rabbitmq_delayed_message_exchange 。如下图所示 点击进去,下载一个后缀为 .ez 的文件,并将其复制在你安装的rabbitmq的plugins文件中,如下图所示 2、启用插件 在复制进指定的plugins文件中后,cmd

1)kafka初级了解

半城伤御伤魂 提交于 2020-02-06 02:57:24
文章目录 Kafka概述 1.定义 2.消息队列的好处 3.消费队列的两种模式 Kafka概述 1.定义 kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实现处理领域。 2.消息队列的好处 a).解耦 b).可恢复性 c).缓冲:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。(生》消) d).灵活性(分布式可以随意增加服务器)&峰值处 理能力(削峰) f).异步性 3.消费队列的两种模式 (1)点对点模式(一对一,消费者主动拉取数据,消费受到后消息清除) (2)发布/订阅模式(一对多,消费者消费数据之后清除消费) a)消费者拉取(浪费资源,要不断的问队列中是否有消息) b)队列推送 来源: CSDN 作者: yunqiu21 链接: https://blog.csdn.net/yunqiu21/article/details/104184405

rabbitMQ--快速入门

自古美人都是妖i 提交于 2020-02-06 02:32:32
1、简介    MQ全称为Message Queue, 消息队列 (MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如 远程过程调用 的技术。      如上图所示:     1.Server(broker): 接受客户端连接,实现 AMQP消息队列和路由功能的进程。   2.Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,但是权限控制的最小粒度是Virtual Host   3.Exchange:接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。ExchangeType决定了Exchange路由消息的行为,例如,在RabbitMQ中,   ExchangeType有direct、Fanout和Topic三种,不同类型的Exchange路由的行为是不一样的。   4. Message Queue:消息队列,用于存储还未被消费者消费的消息。   5.Message: 由Header和Body组成,Header是由生产者添加的各种属性的集合,包括Message是否被持久化、由哪个Message

Rabbitmq的几种交换机模式

霸气de小男生 提交于 2020-02-06 02:21:43
Rabbitmq的核心概念(如下图所示):有虚拟主机、交换机、队列、绑定; 交换机可以理解成具有路由表的路由程序,仅此而已。每个消息都有一个称为路由键(routing key)的属性,就是一个简单的字符串。 最新版本的RabbitMQ有四种交换机类型,分别是Direct exchange、Fanout exchange、Topic exchange、Headers exchange。 (一)、 Direct Exchange – 处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “dog”,则只有被标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog。(一对一的匹配才会转发) (二)、 Fanout Exchange – 不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的(也号称广播转发消息,会转发到所有绑定此交换机的队列上) (三)、 Topic Exchange – 将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。因此

RabbitMQ

夙愿已清 提交于 2020-02-06 02:11:51
一、RabbitMQ介绍 MQ全称为Message Queue,即消息队列, RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开 发中应用非常广泛。 开发中消息队列通常有如下应用场景: 1、任务异步处理。 将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。 2、应用程序解耦合 MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。 为什么使用RabbitMQ呢? 1、使得简单,功能强大。 2、基于AMQP协议。 3、社区活跃,文档完善。 4、高并发性能好,这主要得益于Erlang语言。 5、Spring Boot默认已集成RabbitMQ。 AMQP是什么 ? AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级 消息 队列协议,是 应用层 协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/ 中间件 不同产品,不同的开发语言等条件的限制。 Erlang 中的实现有 RabbitMQ 等。 二、RabbitMQ的工作原理 下图是RabbitMQ的基本结构:

微服务技术栈

强颜欢笑 提交于 2020-02-05 21:22:34
微服务技术栈 多种技术的集合体 微服务 落地技术 备注 服务开发 Springboot、Spring、SpringMVC 服务配置与管理 Netflix公司的Archaius、阿里的Diamond等 服务注册与发现 Eureka、Consul、Zookeeper等 服务调用 Rest、RPC、gRPC 服务熔断器 Hystrix、Envoy等 负载均衡 Ribbon、Nginx等 服务接口调用(客户端调用服务的简化工具) Feign等 消息队列 Kafka、RabbitMQ、ActiveMQ等 服务配置中心管理 SpringCloudConfig、Chef等 服务路由(API网关) Zuul等 服务监控 Zabbix、Nagios、Metrics、Spectator等 全链路追踪 Zipkin,Brave、Dapper等 服务部署 Docker、OpenStack、Kubernetes等 数据流操作开发包 SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息) 事件消息总线 Spring Cloud Bus … 来源: CSDN 作者: weixin_45741427 链接: https://blog.csdn.net/weixin_45741427/article/details/104186358

【rabbitmq】Queueingconsumer被废止后老代码如何做的解决方案

我与影子孤独终老i 提交于 2020-02-05 18:13:26
amqp-client 3.x之前的rabbitmq版本有个消费者的写法是借助于Queueingconsumer的: QueueingConsumer consumer = new QueueingConsumer(channel); channel.basicQos(1); channel.basicConsume(QUEUE_NAME, false, "consumer_test",consumer); while (true) { QueueingConsumer.Delivery delivery = consumer.nextDelivery(); String message = new String(delivery.getBody()); System.out.println(" [X] Received '" + message + "'"); channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false); break; } 这个应该是5.x之前的经典写法。但是在4.x的版本QueueingConsumer被标记废止5.x被移除。移除的原因是什么呢? 原来QueueingConsumer内部用LinkedBlockingQueue来存放消息的内容,而LinkedBlockingQueue