消息队列

大数据学习路线是怎么样的?

与世无争的帅哥 提交于 2019-12-09 16:39:54
1.Linux基础和分布式集群技术 学完此阶段可掌握的核心能力: 熟练使用Linux,熟练安装Linux上的软件,了解熟悉负载均衡、高可靠等集群相关概念,搭建互联网高并发、高可靠的服务架构; 学完此阶段可解决的现实问题: 搭建负载均衡、高可靠的服务器集群,可以增大网站的并发访问量,保证服务不间断地对外服务; 学完此阶段可拥有的市场价值: 具备初级程序员必要具备的Linux服务器运维能力。 1.内容介绍: 在大数据领域,使用最多的操作系统就是Linux系列,并且几乎都是分布式集群。该课程为大数据的基础课程,主要介绍Linux操作系统、Linux常用命令、Linux常用软件安装、Linux网络、防火墙、Shell编程等。 2.案例:搭建互联网高并发、高可靠的服务架构。 2.离线计算系统课程阶段 1. 离线计算系统课程阶段 hadoop核心技术框架 学完此阶段可掌握的核心能力: 1、通过对大数据技术产生的背景和行业应用案例了解hadoop的作用;2、掌握hadoop底层分布式文件系统HDFS的原理、操作和应用开发;3、掌握MAPREDUCE分布式运算系统的工作原理和分布式分析应用开发;4、掌握HIVE数据仓库工具的工作原理及应用开发。 学完此阶段可解决的现实问题: 1、熟练搭建海量数据离线计算平台;2、根据具体业务场景设计、实现海量数据存储方案;3

Kafka实战解惑

落花浮王杯 提交于 2019-12-09 14:02:01
#一、Kafka简介# Kafka是LinkedIn使用Scala开发的一个分布式消息中间件,它以水平扩展能力和高吞吐率著称,被广泛用于日志处理、ETL等应用场景。Kafka具有以下主要特点: **消息的发布、订阅均具有高吞吐量:**据统计数字表明,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。 **消息可持久化:**消息可持久化到磁盘并且通过Replication机制防止数据丢失。 **分布式系统,可水平扩展:**所有的生产者(Producer)、消费者(Consumer)、消息中间存储(Broker Server)都可实现多实例分布式部署,且在不停机情况下实现水平扩展。 **高可靠性:**消息被处理的状态由消费者同步到Zookeeper而非Broker Server中,当Broker Server失效时,通过副本切换机制选择一个新的Broker Server,消费者在从Zookeeper中读取之前消费消息的位置,不会引起消息丢失。 支持Online和Offline的场景。 随着Kafka开源后被业界成功且广泛的使用,LinkedIn开发Kafka的核心技术人员Jay Kreps离开LinkedIn成立了一个新公司Confluent,打造了一个基于Kafka且拥有更为丰富的产品线,意图构建一个基于Kafka的生态系统,与Kafka相比

【2】Hello World示例

廉价感情. 提交于 2019-12-09 12:28:22
介绍 RabbitMQ是作为一个消息代理中间件,其设计的目的很简单:收集消息然后转发消息。你可以把它当成一个邮局:当你发送邮件到邮箱时你肯定相信邮递员肯定会把这封邮件送到收件人手上。在这个比喻中,RabbitMQ实际充当了邮箱、邮局以及邮递员的角色。 与邮局最大的不同是,RabbitMQ它不处理纸张文件,而是负责接收,储存以及转发 二进制数据 message。 在详细介绍之前,我们首先了解一些RabbitMQ的术语: 生产者:我们称用来发送消息的程序端为生产者,下面以图“P”表示: 消息队列:消息队列存在RabbitMQ server端中;虽然消息流经你的应用程序和RabbitMQ server,但他们只可以储存在RabbitMQ server队列中。队列是不受任何限制的,它可以储存你发送的所有消息,因为本质上它就是一个无限缓冲区。可以多个生产者同时发送消息给一个队列,同时 也可以多个消费者从一个队列接收数据。以下图来表示消息队列: 消费者:我们称大部分时间都在等待接收消息的程序端为消费者;以下图来表示消费者: ”Hello world“ 在本节我们将用java编写两个程序:一个生产者用来发送消息以及一个消费者用来接收消息并且打印出来。在实现过程中我们主要关注如何实现功能而对于java API的细节一笔带过。 在下面这个图中,”P”代表生产者,”C”代表消费者,在中间的盒子表示队列

如果有人再问你怎么实现分布式延时消息,这篇文章丢给他

早过忘川 提交于 2019-12-09 12:21:58
1.背景 上篇文章介绍了 RocketMQ整体架构和原理 有兴趣的可以阅读一下,在这篇文章中的延时消息部分,我写道开源版的RocketMQ只提供了18个层级的消息队列延时,这个功能在开源版中显得特别鸡肋,但是在阿里云中的RocketMQ却提供了支持40天之内任意秒级延时队列,果然有些功能你只能充钱才能拥有。当然你或许想换一个开源的消息队列,在开源社区中消息队列延时消息很多都没有被支持比如:RabbitMQ,Kafka等,都只能通过一些特殊方法才能完成延时的功能。为什么这么多都没有实现这个功能呢?是因为技术难度比较复杂吗?接下来我们分析一下如何才能实现一个延时消息。 2.本地延时 在实现分布式消息队列的延时消息之前,我们想想我们平时是如何在自己的应用程序上实现一些延时功能的?在Java中可以通过下面的方式来完成我们延时功能: ScheduledThreadPoolExecutor:ScheduledThreadPoolExecutor继承了ThreadPoolExecutor,我们提交任务的时候,会将任务首先提交到DelayedWorkQueue一个优先级队列中,按照过期时间进行排序,这个优先级队列也就是我们堆结构,每次提交任务排序的复杂度是O(logN)。然后取任务的时候就会从堆顶取出我们的任务,也就是我们延迟时间最小的任务

RabbitMQ的安装

牧云@^-^@ 提交于 2019-12-09 10:10:26
首先,我们要知道RabbitMQ开源消息队列服务是使用Erlang语言开发的,因此我们要使用他就必须先进行Erlang语言环境的搭建。 一、Erlang语言环境的搭建 RabbitMQ开源消息队列服务是使用Erlang语言开发的,因此我们要使用他就必须先进行Erlang语言环境的搭建,其实是非常简单的。 下载地址: http://www.erlang.org/downloads 1. 登录Erlang官网,进入下载页,然后按照自己的系统环境来选择需要下载的安装文件。 下载完成后进行安装。 2.安装完成后,配置Erlang环境变量。 (1)ERLANG_HOME: erlang安装路径 (2)PATH:%ERLANG_HOME%\bin 点击确定,再需要配置下path,如图: 点击新建,将%ERLANG_HOME%\bin加入到path中,如图: 如何修改环境变量请参考: https://jingyan.baidu.com/article/b24f6c82cba6dc86bfe5da9f.html 3.最后,windows键+R键,输入cmd,再输入erl,看到版本号就说明erlang安装成功了。 二、下载并安装RabbitMQ 下载地址 http://www.rabbitmq.com/download.html ,选择 1 双击下载后的.exe文件

【转帖】全网最通俗易懂的Kafka入门

跟風遠走 提交于 2019-12-08 19:09:27
全网最通俗易懂的Kafka入门 http://www.itpub.net/2019/12/04/4597/ 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 众所周知,消息队列的产品有好几种,这里我选择学习Kafka的原因,无他,公司在用。 我司使用的是Kafka和自研的消息队列(Kafka和RocketMQ)改版,于是我就想学学Kafka这款消息队列啦。本篇文章对Kafka入门,希望对大家有所帮助。 本文知识点提前预览: 这篇文章花了我很长时间画图,目的是希望以最通俗易懂的方式带大家入门,如果觉得不错,希望能给我点个赞! 一、什么是Kafka? 首先我们得去官网看看是怎么介绍Kafka的: https://kafka.apache.org/intro 在收集资料学习的时候,已经发现有不少的前辈对官网的介绍进行翻译和总结了,所以我这里就不重复了,贴下地址大家自行去学习啦: https://scala.cool/2018/03/learning-kafka-1/ https://colobu.com/2014/08/06/kafka-quickstart/ 我之前写过的消息队列入门文章也提到了,要做一个消息队列可能要考虑到以下的问题: 使用消息队列不可能是单机的(必然是分布式or集群)

Kafka基础——Kafka架构

人走茶凉 提交于 2019-12-07 20:31:41
目录 Kafka 简介 使用消息队列的好处 Kakfa 架构 分区 Kafka 简介 Kafka最初是由LinkedIn公司采用Scala语言开发的一个多分区、多副本并且基于ZooKeeper协调的分布式消息系统,现在已经捐献给了Apache基金会。目前Kafka已经定位为一个分布式流式处理平台,它以 高吞吐、可持久化、可水平扩展、支持流处理等多种特性而被广泛应用。 Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 使用消息队列的好处 解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 可恢复性 系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。 缓冲 有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。 灵活性 & 峰值处理能力 在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。 异步通信 很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制

Android RIL结构分析与移植

橙三吉。 提交于 2019-12-07 19:19:51
Android RIL结构分析与移植 介绍 本文档对Android RIL部分的内容进行了介绍,其重点放在了Android RIL的原生代码部分。 包括四个主题: 1.Android RIL框架介绍 2.Android RIL与 WindowsMobile RIL 3.Android RIL porting 4.Android RIL的java框架 在本文档中将Android代码中的重要模块列出进行分析,并给出了相关的程序执行流程介绍,以加深对模块间交互方式的理解。 对于java代码部分,这里仅进行简单的介绍。如果需要深入了解,可以查看相关参考资料。 本文档中还对Android RIL的Porting部分内容进行了描述和分析。 针对对unix操作系统环境并不熟悉的读者,本文档中所涉及到的相关知识包括: Unix file system Unix socket Unix thread Unix 下I/O多路转接 以上信息可以在任意一份描述Unix系统调用的文档中找到。 1.Android RIL框架介绍 术语: fd unix文件描述符 pipe unix管道 cond 一般是condition variable的缩写 tty 通常使用tty来简称各种类型的终端设备 unsolicited response 被动请求命令来自baseband event loop

浅谈RabbitMQ

与世无争的帅哥 提交于 2019-12-07 16:28:50
知识先知 其实引入这个解决方案,纯属是因为在项目中有这样的应用场景; 何为解决方案 ,其实通俗讲就是针对于某些应用场景,选取适合的解决办法,这里指的是较好的,或许解决方案会有许多,包括MQ消息队列要解决的应用场景。 前因后果 场景一、目前常见的分布式服务项目,都是通过服务于服务之间进行通信完成各自的业务逻辑,因此相互之间耦合性比较较大; (1)只要中间服务出了故障后,上游和下游都会受到波及,同时相互之间的调用关系为被动; (2)后期进行扩增和删减的话,都会波及依赖的服务; 解决方式:引用MQ后,上游服务只负责将下游想要的东西发送给它,至于下游如何处理,这就不是上游需要考虑的问题了;相互之间的调用关系为主动。 场景二、一些大数据量的频繁同步处理,一个系统如果不光在本项目读写数据,而且还要调用其他项目操作库,这时候,他们之间的处理如果是同步的话,损耗的时间就是两者之和了。 解决方式:引入MQ后,上游系统连续发送消息到MQ队列中,直接返回;当然也可以利用多线程的方式解决,但是会造成单体服务内存损耗。 场景三、比如某个业务处理过程一直都处于稳定状态,但是某一时间点后,用户请求量突增,针对于这种场景,提升服务器的硬件显然不是最好的方式。 解决方式:引入MQ后,利用消息队列持久化存储的机制,可以避过短时间业务量突增的场景,稍后等到请求平稳后,慢慢处理业务量。 合理分析 难道说

【消息队列MQ】各类MQ比较

混江龙づ霸主 提交于 2019-12-07 16:26:23
目前业界有很多MQ产品,我们作如下对比: RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。 Redis 是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。 入队 出队 128B 512B 1K 10K 128B 512B 1K 10K Redis 16088 15961 17094 25 15955 20449 18098 9355 RabbitMQ