Apache Storm

Extending the Yahoo! Streaming Benchmark

萝らか妹 提交于 2020-04-29 18:11:08
could accomplish with Flink back at Twitter. I had an application in mind that I knew I could make more efficient by a huge factor if I could use the stateful processing guarantees available in Flink so I set out to build a prototype to do exactly that. The end result of this was a new prototype system which computed a more accurate result than the previous one and also used less than 1% of the resources of the previous system. The better accuracy came from the fact that Flink provides exactly-once processing guarantees whereas the existing system only provided at-most-once. The efficiency

大数据——如何设计实时数据平台(设计篇)

和自甴很熟 提交于 2020-04-28 21:38:46
导读:本文将会分上下两篇对一个重要且常见的大数据基础设施平台展开讨论,即“实时数据平台”。 在上篇设计篇中,我们首先从两个维度介绍实时数据平台:从现代数仓架构角度看待实时数据平台,从典型数据处理角度看待实时数据处理;接着我们会探讨实时数据平台整体设计架构、对具体问题的考量以及解决思路。 在下篇技术篇中,我们会进一步给出实时数据平台的技术选型和相关组件介绍,并探讨不同模式适用哪些应用场景。希望通过对本文的讨论,读者可以得到一个有章可循、可实际落地的实时数据平台构建方案。 一、相关概念背景 1.1 从现代数仓架构角度看待实时数据平台 现代数仓由传统数仓发展而来,对比传统数仓,现代数仓既有与其相同之处,也有诸多发展点。首先我们看一下传统数仓(图1)和现代数仓(图2)的模块架构: 图1 传统数仓 图2 现代数仓 传统数仓大家都很熟悉,这里不做过多介绍,一般来说,传统数仓只能支持T+1天时效延迟的数据处理,数据处理过程以ETL为主,最终产出以报表为主。 现代数仓建立在传统数仓之上,同时增加了更多样化数据源的导入存储,更多样化数据处理方式和时效(支持T+0天时效),更多样化数据使用方式和更多样化数据终端服务。 现代数仓是个很大的话题,在此我们以概念模块的方式来展现其新的特性能力。首先我们先看一下图3中Melissa Coates的整理总结: 在图3 Melissa

第02讲:Flink 入门程序 WordCount 和 SQL 实现

白昼怎懂夜的黑 提交于 2020-04-28 19:45:30
本课时我们主要介绍 Flink 的入门程序以及 SQL 形式的实现。 上一课时已经讲解了 Flink 的常用应用场景和架构模型设计,这一课时我们将会从一个最简单的 WordCount 案例作为切入点,并且同时使用 SQL 方式进行实现,为后面的实战课程打好基础。 我们首先会从环境搭建入手,介绍如何搭建本地调试环境的脚手架;然后分别从 DataSet(批处理)和 DataStream(流处理)两种方式如何进行单词计数开发;最后介绍 Flink Table 和 SQL 的使用。 Flink 开发环境 通常来讲,任何一门大数据框架在实际生产环境中都是以集群的形式运行,而我们调试代码大多数会在本地搭建一个模板工程,Flink 也不例外。 Flink 一个以 Java 及 Scala 作为开发语言的开源大数据项目,通常我们推荐使用 Java 来作为开发语言,Maven 作为编译和包管理工具进行项目构建和编译。对于大多数开发者而言,JDK、Maven 和 Git 这三个开发工具是必不可少的。 关于 JDK、Maven 和 Git 的安装建议如下表所示: 工程创建 一般来说,我们在通过 IDE 创建工程,可以自己新建工程,添加 Maven 依赖,或者直接用 mvn 命令创建应用: mvn archetype:generate \ -DarchetypeGroupId=org.apache

【Spark】SparkStreaming-输出到Kafka

只谈情不闲聊 提交于 2020-04-28 02:54:21
SparkStreaming-输出到Kafka sparkstreaming output kafka_百度搜索 SparkStreaming采用直连方式(Direct Approach)获取Kafka数据的研究心得 - Lin_wj1995的博客 - CSDN博客 spark/RecoverableNetworkWordCount.scala at master · apache/spark spark streaming 输出数据到kafka - CSDN博客 整合Kafka到Spark Streaming——代码示例和挑战 - stark_summer的专栏 - CSDN博客 kafka-storm-starter/PooledKafkaProducerAppFactory.scala at develop · miguno/kafka-storm-starter scala - How to write to Kafka from Spark Streaming - Stack Overflow spark-kafka-writer/SKRSpec.scala at master · BenFradet/spark-kafka-writer Spark and Kafka integration patterns · allegro.tech ProducerRecord

【Spark】Sparkstreaming-性能调优

你说的曾经没有我的故事 提交于 2020-04-28 02:53:58
Sparkstreaming-性能调优 Spark Master at spark://node-01:7077 sparkstreaming 线程 数量_百度搜索 streaming中partition里用线程池异步优化 - 曾晓森的博客 - CSDN博客 第116课: Spark Streaming性能优化:如何在毫秒内处理处理大吞吐量的和数据波动比较大 的程序 - CSDN博客 Spark(十二)--性能调优篇 - 蒋源德 - 博客园 转:spark通过合理设置spark.default.parallelism参数提高执行效率 - Feeling - BlogJava spark通过合理设置spark.default.parallelism参数提高执行效率 - CSDN博客 Spark的性能调优 Spark运行模式(一)-----Spark独立模式 - CSDN博客 spark spark.executor.cores 多个 线程_百度搜索 Spark并发度理解一 - lee的个人空间 spark executor - zyc920716的博客 - CSDN博客 spark 指定相关的参数配置 num-executor executor-memory executor-cores - 新际航 - 博客园 手把手教你 Spark 性能调优 - ImportNew

hadoop、storm和spark的区别、比较

北慕城南 提交于 2020-04-25 01:58:10
一、hadoop、Storm该选哪一个? 为了区别hadoop和Storm,该部分将回答如下问题: 1.hadoop、Storm各是什么运算 2.Storm为什么被称之为流式计算系统 3.hadoop适合什么场景,什么情况下使用hadoop 4.什么是吞吐量 首先整体认识:Hadoop是磁盘级计算,进行计算时,数据在磁盘上,需要读写磁盘;Storm是内存级计算,数据直接通过网络导入内存。读写内存比读写磁盘速度快n个数量级。根据Harvard CS61课件,磁盘访问延迟约为内存访问延迟的75000倍。所以Storm更快。 注释: 延时 , 指数据从产生到运算产生结果的时间,“快”应该主要指这个。 吞吐, 指系统单位时间处理的数据量。 storm的网络直传、内存计算,其时延必然比hadoop的通过hdfs传输低得多;当计算模型比较适合流式时,storm的流式处理,省去了批处理的收集数据的时间;因为storm是服务型的作业,也省去了作业调度的时延。所以从时延上来看,storm要快于hadoop。 从原理角度来讲: Hadoop M/R基于HDFS,需要切分输入数据、产生中间数据文件、排序、数据压缩、多份复制等,效率较低。 Storm 基于ZeroMQ这个高性能的消息通讯库,不持久化数据。 为什么storm比hadoop快,下面举一个应用场景 说一个典型的场景,几千个日志生产方产生日志文件

Storm 核心组件详解及storm编程核心Api

不羁岁月 提交于 2020-04-24 08:33:49
storm编程模型 Topologies Streams Spouts Bolts Storm核心组件 Topologies Streams Spouts Bolts Stream groupings Reliability Tasks Workers 具体介绍如下: topology 是storm中运行的一个实时应用程序的名称(拓扑),因为各个组件间的消息流动而形成逻辑上的拓扑结构。 stream 表示数据的流向,流式Storm的核心抽象。一个流是一个无界Tuple序列,Tuple可以包含整性、长整型、短整型、字节、字符、双精度数、浮点数、布尔值和字节数组。用户可以通过定义序列化器,在本机Tuple使用自定义类型; spout 在一个topology中获取源数据流的组件,通常情况下spout会从外部数据源读取数据,然后转换为topology内部的源数据; bolt 接收数据,然后执行处理的组件,用户可以其中执行自己想要的操作(Bolt可以完成过滤、业务处理、连接运算、连接访问数据库等业务); stream grouping (流分组) 流分组是拓扑定义的一部分,为每个Bolt指定应该接收哪个流作为输入。在bolt的任务中定义流应该如何分区,Storm有7个内置的流分组接口(随机分组(Shuffle grouping)、字段分组(Fields grouping)、全部分组(All

spark面试题

时光总嘲笑我的痴心妄想 提交于 2020-04-23 03:04:08
1.Spark 消费Kafka,分布式的情况下,如何保证消息的顺序? Kafka分布式的单位是Partition,如何保证消息有序,需要分一下几个条件讨论。 同一个Partition用一个 write ahead log 组织,所以可以保证FIFO的顺序。 不同Partition之间不能保证顺序但是绝大多数用户可以通过 message key 来定义,因为同一个key的 message 可以保证只发送到同一个Partition。如果说key是user id, table row id 等等,所以同一个user 或者同一个 record 的消息永远只会发送到同一个 Partition 上,保证了同一个 user 或 record 的顺序。 当然,如果你有 key skewnes就有些麻烦,需要谨慎处理。 实际情况中,(1)不关注顺序的业务大量存在,队列无序不代表消息无序。(2)我们不保证队列的全局有序,但可以保证消息的局部有序,举个例子:保证来自同一个order id 的消息,是有序的。Kafka中发送1条消息的时候,可以指定(topic,partition,key) 3个参数。partition和key是可选的,如果你指partition,那就是所有消息发往同一个partition,就是有序的,而且在消费端,Kafka保证,1个partition只能被一个consumer消费

前端中台名词扫盲

孤街浪徒 提交于 2020-04-21 04:16:29
中台 课堂笔记 什么是中台 以拍电影为例: 我们看到的前台就是产出的电影本身,后台是整个拍摄组,那么中台就相当于横店影视城,提供可复用的场景来供后台使用,比如拍古装、民国片对应的场景,来产出不同的电影。 前台:所见即所得 后台:复杂逻辑 中台:拥有可复用的场景的平台 中台的作用/特点 减少重复劳动、赋能、平台化 中台的划分 主要分为:前台与后台之间的中台、技术中台、业务中台、组织中台 举例: GraphQL、FireBase、Kubernetes、PostgREST、LeanCloud等 除此之外还有两种特殊的 孵化中台的中台:例如Spark、Storm等,可以孵化语音识别、人脸识别的AI中台,而这些孵化的中台可以给其它项目来用 调度中台的中台:比如淘宝会把很多中台产出的项目合成到一个时间线上,这些都是需要有一个中台来调度 涉及到的代码概念 元数据(metadata):用来描述数据的数据,比如下图中常见的请求头和响应头 高阶函数 处理函数的函数(arr.reduce) 返回函数的函数 (koa中 app.use()) Proxy server:代理服务器 ES6 Proxy: 方便开发者劫持对对象的操作 getter/setter Function call/construct 来看下面这段代码,axios,从空对象空手套白狼,来拦截get方法,一层层拦截name,method属性

Kafka学习(三)-------- Kafka核心之Consumer

南笙酒味 提交于 2020-04-19 05:31:39
了解了什么是kafka( https://www.cnblogs.com/tree1123/p/11226880.html)以后 学习Kafka核心之消费者,kafka的消费者经过几次版本变化,特别容易混乱,所以一定要搞清楚是哪个版本再研究。 一、旧版本consumer 只有旧版本(0.9以前)才有 high-level consumer 和 low-level consumer之分,很多的文章提到的就是这两个:低阶消费者和高阶消费者,低阶消费者更灵活但是需要自己维护很多东西,高阶就死板一点但是不需要维护太多东西。 high-level consumer就是消费者组。 low-level consumer是单独一个消费者,单个consumer没有什么消费者组的概念,与其他consumer相互之间不关联。 1、low-level consumer low-level consumer底层实现是 SimpleConsumer 他可以自行管理消费者 Storm的Kafka插件 storm-kafka就是使用了SimpleConsumer 优点是灵活 , 可以从任意位置拿消息 。 如果需要: 重复读取数据 只消费部分分区数据 精确消费 就得用这个, 不过必须自己处理位移提交 寻找分区leader broker 处理leader变更。 接口中的方法: fetch send 发送请求