消息队列

漫谈消息队列

爱⌒轻易说出口 提交于 2020-01-20 01:55:40
消息队列 今天电话面试,被问及,为什么你框架设计都是用线程创建,不用进程。我说产品比较简单,没必要做那么多。现在想想这样的回答的确肤浅。 在聊进程间通讯前,先说下选用进程和线程的规章, 进程与线程的选择取决以下几点: 1、需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的。 2、线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应 3、因为对CPU系统的效率使用上线程更占优,所以多机分布的用进程,多核分布用线程; 4、并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求; 5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。 说白了就是:进程是独立堆栈,开销大。线程共享,响应快。由于线程共享,一个线程挂了,进程就挂了。进程独立,所以互不影响。**总结就是第五点:** 需要更稳定安全时,适合选择进程;需要速度时,选择线程更好 那么既然是进程,那么进程间如何通讯呢? 进程通信有好多方式:管道,共享内存,消息队列,信号,套接字。 这里说下消息队列,这个是系统维护的IPC,也就说这是系统方法,不需要用户维护,可以理解成工具。 先说几个标准函数: ftok函数: key_t ftok(const char *pathname, int proj_id); 功能:生成一个key(键值),唯一的。 参数

Apache Kafka 消息队列

时光怂恿深爱的人放手 提交于 2020-01-19 16:19:50
概述 Kafka是Apache软件基金会的开源的流处理平台,该平台提供了消息的订阅与发布,能够基于Kafka实现对网络日志流实时在线处理,在这个维度上弥补了Hadoop的离线分析系统的不足。因为基于hadoop的MapReduce系统分析离线数据延迟较高,而且不支持动态数据处理和分析。Kafka的流处理平台不仅仅可以为离线系统储备数据(通常使用Kafka作为数据缓冲),而且Kafka自身也提供了一套数据流的处理机制,实现对数据流在线处理,比如: 统计。 作为消息队列(Message Queue)充当系统的缓冲组件 - MiddleWare 作为一套在线实时流处理 组件 (轻) 场景分析 异步消息 使用Kafka MQ功能实现模块间异步通信,把一些费时的操作交给额外的服务或者设备去执行,这样可以提升系统运行效率,加速连接释放的速度,例如:用户注册模块,在用户注册成功后,业务系统需要给用户发送一个通知短信,通知用户登录邮箱去激活刚注册的用户信息。这种业务场景如图所示,因为短信通知和邮件发送是一个比较耗时的操作,所以在这里没必要将短信和邮件发送作为注册模块的流程,使用Message Queue功能可以将改业务和主业务注册分离,这样可以缩短用户浏览器和服务建立的链接时间,同时也能满足发送短信和邮件的业务。 系统间解耦|削峰填谷 ①在某些高吞吐的业务场景下

kafka原理篇

前提是你 提交于 2020-01-19 14:38:56
目录 消息队列分类 点对点 发布/订阅 kafka介绍 kafka架构说明 Topic与Partition的关系 partition复制机制 Consumer与Topic的关系 消息队列分类 点对点 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。这里要注意: 消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。 Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。 发布/订阅 消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。 kafka介绍 kafka是一个分布式的、分区的、多副本的、多订阅者的日志系统(分布式消息队列)。可同时支持点对点模式的消息队列和发布/订阅模式的消息队列。 kafka架构说明 kafka角色术语: Broker:一台kafka服务器就是一个broker。一个集群由多个broker组成 Topic:消息队列,不同的消息会被发送至不同的队列当中 Producer:消息生产者,就是向kafka broker发消息的客户端 Consumer:消息消费者,从kafka broker取消息的客户端 Consumer Group(CG):这是kafka用于实现一个topic消息广播

kafka 基础知识梳理及集群环境部署记录

流过昼夜 提交于 2020-01-19 14:35:06
一、kafka基础介绍 Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。 kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关键指标之一,Kafka可以实现高效文件存储,实际应用效果极好。 1.1) kafka名词解释(架构的四个部分) - producer:生产者。 - consumer:消费者。 - topic: 消息以topic为类别记录,Kafka将消息种子(Feed)分门别类,每一类的消息称之为一个主题(Topic)。 - broker:以集群的方式运行,可以由一个或多个服务组成

kafka

自闭症网瘾萝莉.ら 提交于 2020-01-19 08:28:17
学习kafka必会名词 producer:生产者,就是它来生产“鸡蛋”的。 consumer:消费者,生出的“鸡蛋”它来消费。 topic:你把它理解为标签,生产者每生产出来一个鸡蛋就贴上一个标签(topic),消费者可不是谁生产的“鸡蛋”都吃的,这样不同的生产者生产出来的“鸡蛋”,消费者就可以选择性的“吃”了。相当于“队列” broker:就是篮子了。 kafka的架构 一个典型的Kafka包含若干Producer,若干broker(Kafka支持水平扩展,一般broker越多,吞吐量越高),若干Consumer Group,以及一个zookeeper集群,通过zookeeper管理集群配置,选举leader,Producer使用push将消息发送到broker,Consumer使用pull模式从broker订阅并消费消息。 Kafka会为每一个Consumer Group保留一些metadata信息——当前消费的消息的position,也即offset。这个offset由Consumer控制。正常情况下Consumer会在消费完一条消息后递增该offset。 使用Consumer high level API时,同一Topic的一条消息只能被同一个Consumer Group内的一个Consumer消费,但多个Consumer Group可同时消费这一消息。 优化:

rabbitMQ和redis区别

╄→尐↘猪︶ㄣ 提交于 2020-01-19 05:29:12
消息队列是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保消息的可靠传递。消息发布者只管把消息发布到MQ中而不用管谁来取,消息使用者只管从MQ中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。 Redis Redis就是一个内存数据库,具有丰富的数据类型,当然也支持队列queue,redis支持数据持久化,主从集群。 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 rabbitMQ 是一个专门做队列的框架,在队列方面要比redis队列性能要好,支持的功能会更多,消息的可靠性更强,可以根据路由规则去选择进入哪一个队列,做到更加细致的消息分发 所有MQ产品从模型抽象上来说都是一样的过程: 消费者订阅某个队列。生产者创建消息,然后发布到队列中,最后将消息发送到监听的消费者。 RabbitMQ架构 组件: Message(消息):RabbitMQ转发的二进制对象,包括Headers(头)、Properties(属性)和Data(数据),其中数据部分不是必要的; Producer(生产者):消息的生产者

06 Spring Boot 整合RabbitMQ

六眼飞鱼酱① 提交于 2020-01-19 04:50:43
6. Spring 整合RabbitMQ 6.1. 搭建生产者工程 6.1.1. 创建工程 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nRET1n6r-1578323120296)(F:\learning\javaee\笔记\第五阶段\04RabbitMQ\06 Spring Boot 整合RabbitMQ\img\1565149342994.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-egWNK3ug-1578323120297)(F:\learning\javaee\笔记\第五阶段\04RabbitMQ\06 Spring Boot 整合RabbitMQ\img\1565144326498.png)] 6.1.2. 添加依赖 修改pom.xml文件内容为如下: <?xml version="1.0" encoding="UTF-8"?> < project xmlns = " http://maven.apache.org/POM/4.0.0 " xmlns: xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi: schemaLocation = " http://maven.apache.org/POM/4.0.0 http:/

RabbitMQ常见问题

吃可爱长大的小学妹 提交于 2020-01-18 18:56:31
rabbitmq 的使用场景有哪些? ①. 跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。 ②. 多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。基于消息队列的耦合,不需要发送方和接收方同时在线。在企业应用集成(EAI)中,文件传输,共享数据库,消息队列,远程过程调用都可以作为集成的方法。 ③. 应用内的同步变异步,比如订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依次获得消息处理,高峰时的大量订单可以积压在队列里慢慢处理掉。由于同步通常意味着阻塞,而大量线程的阻塞会降低计算机的性能。 ④. 消息驱动的架构(EDA),系统分解为消息队列,和消息制造者和消息消费者,一个处理流程可以根据需要拆成多个阶段(Stage),阶段之间用队列连接起来,前一个阶段处理的结果放入队列,后一个阶段从队列中获取消息继续处理。 ⑤. 应用需要更灵活的耦合方式,如发布订阅,比如可以指定路由规则。 ⑥. 跨局域网,甚至跨城市的通讯(CDN行业),比如北京机房与广州机房的应用程序的通信。 rabbitmq 有哪些重要的角色? RabbitMQ 中重要的角色有:生产者、消费者和代理: 生产者:消息的创建者,负责创建和推送数据到消息服务器

【消息队列_1】消息队列入门: 从糖果厂老板来了解消息队列

泪湿孤枕 提交于 2020-01-18 04:55:35
引言 如果你想了解消息队列,那么欢迎你读下去 消息队列一词相比各位都多有耳闻,就算你没有用过你也知道 队列 吧。 考试时,面试时都经常会被问到 队列和栈有什么区别? 99%的同学都能答出来栈是先进后出,而队列是先进先出。 那消息队列是什么呢?他又有什么作用? 🍬糖果厂老板的例子 来,让我们从一个家具厂的例子来了解消息队列 话说方老板开了一家糖果厂,为了方便管理,他将厂分为两个车间:加工车间和包装车间 加工车间主要负责将加工制作成散装糖果 包装车间主要负责将糖果称重检查并包装 一般来说,加工车间的工人会将加工好的糖果运送到包装车间 但一来二去方老板发现,加工车间的工人在运输糖果🍬去包装车间的时候 就不得不停下手中的活,将糖果送过去再回来继续加工 这大大降低了生产的效率 怎么办呢? 方老板在两个车间之间装了一条传送带,加工车间只需要将加工完的糖果放到传送带上 就可以接着去加工了,包装车间直接从传送带上去取糖果。这样大大提升了效率 但是不久又出现了新的问题: 加工车间动作太快了,包装车间上一批还没包装完,这一批就已经到了 怎么办呢? 方老板在包装车间旁开出开一块糖果冷藏室,用来保存加工车间加工完的糖果 包装车间只需要从冷藏室取糖果就好 方老板不知不觉完成了一个 消息队列 为解决效率问题: 他在两个车间(程序)间加了传送带 为解决加工包装不一致的问题: 他在两个车间(程序)间加了存储仓库

RabbitMQ安装与原理详解

人走茶凉 提交于 2020-01-18 02:40:32
文章目录 一、概述 1. 什么是消息队列 2. 为什么要使用消息队列 3. RabbitMQ特点 二、安装 1. 安装Erlang 2. 安装RabbitMQ 三、RabbitMQ 1. 启动和关闭 2. 插件管理 3. 用户管理 4. 权限管理 5. vhost管理 6. 设置管理员权限 四、消息发送和接收 1. RabbitMQ消息发送和接收机制 2. AMQP 中的消息路由 3. Exchange与Queue关联绑定 4. Exchange 类型 (1)direct (2)fanout (3)topic 5. Client与Brocker进行连接 五、RabbitMQ镜像集群 1. 准备 2. 配置Cookie文件 3. 配置hosts文件 4. 组建集群 5. 节点类型 一、概述 1. 什么是消息队列 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。 2. 为什么要使用消息队列 从上面的描述中可以看出消息队列是一种应用间的 异步协作机制