消息队列

Apache Kafka 消息队列篇

淺唱寂寞╮ 提交于 2019-12-24 05:02:55
概述 Kafka是Apache软件基金会的开源的流处理平台,该平台提供了消息的订阅与发布,能够基于Kafka实现对网络日志流实时在线处理,在这个维度上弥补了Hadoop的离线分析系统的不足。因为基于hadoop的MapReduce系统分析离线数据延迟较高,而且不支持动态数据处理和分析。Kafka的流处理平台不仅仅可以为离线系统储备数据(通常使用Kafka作为数据缓冲),而且Kafka自身也提供了一套数据流的处理机制,实现对数据流在线处理,比如: 统计。 消息队列的概念 可以用于系统间通讯的一个组件-middle ware(中间件),该组件可以用于做消息缓冲的中间件(持久化)解决一些 并发处理、数据库缓冲等实现对高并发的业务场景的削峰填谷。 使用消息队列的场景分析 1.异步消息发送: 使用Kafka MQ功能实现模块间异步通信,把一些费时的操作交给额外的服务或者设备去执行,这样可以提升系统运行效率,加速连接释放的速度,例如:用户注册模块,在用户注册成功后,业务系统需要给用户发送一个通知短信,通知用户登录邮箱去激活刚注册的用户信息。这种业务场景如图所示,因为短信通知和邮件发送是一个比较耗时的操作,所以在这里没必要将短信和邮件发送作为注册模块的流程,使用Message Queue功能可以将改业务和主业务注册分离,这样可以缩短用户浏览器和服务建立的链接时间,同时也能满足发送短信和邮件的业务

Kafka 整体介绍

穿精又带淫゛_ 提交于 2019-12-24 04:29:30
简述: Kafka是一个消息中间件,一个分布式的流平台, 是Spark生态中重要的组件,支持分布式,高可用,高吞吐,多副本 是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统 Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。 能力: 1. 发布和订阅流数据,类似消息队列或消息系统 2. 高容错存储流数据 3. 支持处理数据流 Kafka能解决什么问题: 1. 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。 2. 消息系统:解耦和生产者和消费者、缓存消息等。 3. 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。 4. 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。 5. 流式处理:比如spark streaming和storm 重要概念: Broker:Kafka集群包含一个或多个服务器

RabbitMQ高级特性

倾然丶 夕夏残阳落幕 提交于 2019-12-24 03:21:48
rabbitMQ为我们提供了两种方式用来控制消息的投递可靠性模式 所谓消息的可靠性就是保证消息生产者发送消息后,消费者收到的消息与发送的消息保证一致,同时确保消息不会丢失. 对于这种情况更好的方式就是使用以下两种方式: 1.确认模式 对于确认模式,就是生产者将消息发送给交换机时,会返回一个confirmCallBack 配置文件如下:,在配置文件中需要申明交换机,队列,再将其绑定 在而配置文件中需要将publisher-confirms的状态改为true 在测试类中:注入rabbitTemplete, 2.确认模式 当消息发送给Exchange后,Exchange路由到Queue失败是 才会执行 ReturnCallBack,具体如下: 来源: CSDN 作者: 雪落成樺 链接: https://blog.csdn.net/m0_37749876/article/details/103603891

01、RabbitMQ之入门

三世轮回 提交于 2019-12-24 00:55:51
RabbitMQ之入门 一、什么是MQ? 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已 二、主流MQ框架 MQ框架非常之多,比较流行的有RabbitMq、ActiveMq、ZeroMq、kafka,以及阿里开源的RocketMQ。 区别: 本文主要介绍RabbitMQ 三、应用场景 主要解决异步处理、应用解耦、流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构 1.异步处理 用户注册后,需要发注册邮件和注册短信 2.应用解耦 用户下单后,订单系统需要通知库存系统 3.流量削锋(重点) 流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛,例如双十一 四、Docker安装部署RabbitMQ 注意获取镜像的时候要获取 management 版本的,不要获取last版本的,management版本的才带有管理界面 1.查询镜像 $ docker search rabbitmq : management 2.获取镜像 $ docker pull rabbitmq : management 3.运行镜像 ##方式一:默认guest用户,密码也是guest $ docker run - d - p 5672 : 5672 - p 15672 : 15672 -- name

关于RabbitMQ

自闭症网瘾萝莉.ら 提交于 2019-12-24 00:05:21
1. 生产者: 在现实生活中就好比制造商品的工厂,他们是商品的生产者。生产者只意味着发送。发送消息的程序称之为一个生产者。 2. 队列:rabbitMQ就像一个仓库,一个仓库里面可以 有很多队列,每个队列才是服务器之间消息通信的载体。 3.消费者:消费者就好比是从商店购买或从仓库取走商品的人,消费的意思就是接收。消费者是一个程序,主要是等待接收消息。 4.交换器:在生产者和消息队列之间的交换器,功能类似于网络宽带的交换机,可以根据不同的关键字,将信息发送到不同的队列。 MQ不能进行批量的消息处理,你看到的传输再多也只是消息被一条一条的存入队列,消费者从队列中一条一条的取出。这跟kafKa有区别,所以在效率上比不上kafKa,但是MQ主打的是 稳定 。 每次消费者取出消息时会通知队列,我拿到了,当队列接收到这条消息,就会把消息删除,这是默认的 ACK机制 。 如果在接收消息之后,消费者挂掉,或者任何情况没有返回ack,队列中这条消息将不会删除,可以一直存着,等待其他消费者来取。 注意,但是如果设置不返回ack,在不断的发送消息到队列又不删除,会导致MQ仓库 boom ~~~~ 以上内容参考文章:https://www.cnblogs.com/dwlsxj/p/RabbitMQ.html RabbitMQ安装: 安装erlang的依赖: yum -y install epel

Springboot整合rabbitMq

喜你入骨 提交于 2019-12-23 20:59:45
该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct、Topic、Fanout的使用,消息回调、手动确认等。 (但是关于rabbitMq的安装,就不介绍了) 在安装完rabbitMq后,输入http://ip:15672/ ,是可以看到一个简单后台管理界面的。 在这个界面里面我们可以做些什么? 可以手动创建虚拟host,创建用户,分配权限,创建交换机,创建队列等等,还有查看队列消息,消费效率,推送效率等等。 以上这些管理界面的操作在这篇暂时不做扩展描述,我想着重后面实例里会使用到。 首先先介绍一个简单的一个消息推送到接收的流程,提供一个简单的图: RabbitMq -JCccc黄色的圈圈就是我们的消息推送服务,将消息推送到 中间方框里面也就是 rabbitMq的服务器,然后经过服务器里面的交换机、队列等各种关系(后面会详细讲)将数据处理入列后,最终右边的蓝色圈圈消费者获取对应监听的消息。 常用的交换机有以下三种,因为消费者是从队列获取信息的,队列是绑定交换机的(一般),所以对应的消息推送/接收模式也会有以下几种: Direct Exchange 直连型交换机,根据消息携带的路由键将消息投递给对应队列。 大致流程,有一个队列绑定到一个直连交换机上,同时赋予一个路由键 routing key 。

kafka安装0.10.2.2,scala-2.10

孤街醉人 提交于 2019-12-23 20:59:16
下载地址 http://kafka.apache.org/downloads.html 1、解压 2、在kafka根目录下创建kafkalogs 3、cd /usr/local/kafka-0.10/config 4、配置文件vim server.properties broker.id=0 #当前机器在集群中的唯一标识,和zookeeper的myid性质一样 port=19092 #当前kafka对外提供服务的端口默认是9092 host.name=192.168.7.100 #这个参数默认是关闭的,在0.8.1有个bug,DNS解析问题,失败率的问题。 num.network.threads=3 #这个是borker进行网络处理的线程数 num.io.threads=8 #这个是borker进行I/O处理的线程数 log.dirs=/opt/kafka/kafkalogs/ #消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,上面的num.io.threads要大于这个目录的个数这个目录,如果配置多个目录,新创建的topic他把消息持久化的地方是,当前以逗号分割的目录中,那个分区数最少就放那一个 socket.send.buffer.bytes=102400 #发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能

RabbitMq学习——Springboot整合rabbitmq之交换机的说明与配置(一)

我只是一个虾纸丫 提交于 2019-12-23 18:36:52
一、概述 我们都知道 交换机/转发器 ,再消息队列中非常实用,他也是rabbitmq区别其他消息队列的最显著的亮点。 在rabbitmq中的消息转发器类型中,我们知道有好几种,分别是哪些呢?看源码中的说明吧: /** * Enum for built-in exchange types. */ public enum BuiltinExchangeType { DIRECT ( "direct" ) , FANOUT ( "fanout" ) , TOPIC ( "topic" ) , HEADERS ( "headers" ) ; private final String type ; BuiltinExchangeType ( String type ) { this . type = type ; } public String getType ( ) { return type ; } } 二、交换机类别的各项说明 2.1、direct 通过指定的routingkey,绑定(匹配)指定的消息队列 2.2、fanout 无指定的routingkey,只要队列和指定的交换机进行了绑定即可。 只要生产者有消息发送至交换机上,与该交换机绑定的消息队列均可收到相关消息。 2.3、topic 动态匹配相关符合要求的 单词 。 如下所示:usa就是一个单词。 usa.#

rabbitmq 实现延迟队列的两种方式

孤街醉人 提交于 2019-12-23 17:36:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ps: 文章里面延迟队列=延时队列 什么是延迟队列 延迟队列存储的对象肯定是对应的延时消息,所谓”延时消息”是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费。 场景一:在订单系统中,一个用户下单之后通常有30分钟的时间进行支付,如果30分钟之内没有支付成功,那么这个订单将进行一场处理。这是就可以使用延时队列将订单信息发送到延时队列。 场景二:用户希望通过手机远程遥控家里的智能设备在指定的时间进行工作。这时候就可以将用户指令发送到延时队列,当指令设定的时间到了再将指令推送到只能设备。 RabbitMQ如何实现迟队列 方法一 AMQP协议和RabbitMQ队列本身没有直接支持延迟队列功能,但是可以通过以下特性模拟出延迟队列的功能。 但是我们可以通过RabbitMQ的两个特性来曲线实现延迟队列: 特性1、 Time To Live(TTL) RabbitMQ可以针对Queue设置x-expires 或者 针对Message设置 x-message-ttl,来控制消息的生存时间,如果超时(两者同时设置以最先到期的时间为准),则消息变为dead letter(死信) RabbitMQ针对队列中的消息过期时间有两种方法可以设置。 A: 通过队列属性设置

Android多线程的四种方式

北城以北 提交于 2019-12-23 10:00:07
转自: https://www.jianshu.com/p/91552325f5a5 当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread。通常一个应用的所有组件都运行在这一个Process中,当然,你可以通过修改四大组件在Manifest.xml中的代码块()中的android:process属性指定其运行在不同的process中。当一个组件在启动的时候,如果该process已经存在了,那么该组件就直接通过这个process被启动起来,并且运行在这个process的UI Thread中。 UI Thread中运行着许多重要的逻辑,如系统事件处理,用户输入事件处理,UI绘制,Service,Alarm等,如下图: UI Thread包含的逻辑 而我们编写的代码则是穿插在这些逻辑中间,比如对用户触摸事件的检测和响应,对用户输入的处理,自定义View的绘制等。如果我们插入的代码比价耗时,如网络请求或数据库读取,就会阻塞UI线程其他逻辑的执行,从而导致界面卡顿。如果卡顿时间超过5秒,系统就会报ANR错误。所以,如果要执行耗时的操作,我们需要另起线程执行。 在新线程执行完耗时的逻辑后,往往需要将结果反馈给界面,进行UI更新。Android的UI toolkit不是线程安全的