![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
流计算
神之凝视
这个作者很懒,什么都没留下…
展开
-
Flink高级特性之检查点
一.概述Flink中的每个函数和运算符都可以是有状态的。有状态功能在处理单个元素/事件的过程中存储数据,使状态成为任何类型的更复杂操作的关键构建块。为了使状态容错,Flink需要检查点状态。检查点允许Flink恢复流中的状态和位置,从而为应用程序提供与无故障执行相同的语义。二.先决条件Flink的检查点机制与流和状态的持久存储交互。通常,它要求:持久(或耐用,可以重放某个时间段内一定量的记录)的数据源。此类消息源是持久消息队列(例如,Apache Kafka,RabbitMQ,Amazon Ki原创 2020-11-12 11:24:29 · 800 阅读 · 0 评论 -
Flink之广播状态模式
一.提供的API为了展示所提供的API,我们将以一个示例开始,然后介绍其完整功能。作为正在运行的示例,我们将使用这样的情况,其中有一系列不同颜色和形状的对象,并且我们希望找到遵循某种模式的相同颜色的对象对,例如矩形后跟三角形。我们假设这组有趣的模式会随着时间而演变。在此示例中,第一个流将包含Item带有Color和Shape属性的type元素。另一个流将包含Rules。从流开始Items,我们只需要键入它的Color,因为我们要对相同颜色的。这将确保相同颜色的元素最终出现在同一台物理计算机上。//原创 2020-10-15 20:21:15 · 1952 阅读 · 0 评论 -
Spark Streaming整合检查点与累加器/广播变量
一.简介无法从Spark Streaming中的检查点恢复累加器和广播变量。如果启用检查点并同时使用“ 累加器”或“广播变量” ,则必须为“累加器”和“广播变量”创建延迟实例化的单例实例, 以便在驱动程序发生故障重新启动后可以重新实例化它们。二.代码实现package org.apache.spark.examples.streamingimport java.io.Fileimport java.nio.charset.Charsetimport com.google.common.io.原创 2020-10-09 17:44:24 · 202 阅读 · 0 评论 -
Flink状态与容错【状态生存时间TTL,清理过期状态】
一.状态生存时间(TTL)任何类型的键控状态都可以配置状态的生存期(TTL)。如果配置了TTL且状态值已过期,则将尽力清除存储的值。所有状态收集类型均支持按条目TTL。这意味着列表元素和映射条目独立过期。为了使用状态TTL,必须首先构建一个StateTtlConfig配置对象。然后可以通过传递配置在任何状态描述符中启用TTL功能:import org.apache.flink.api.common.state.StateTtlConfigimport org.apache.flink.api.co原创 2020-09-04 15:16:36 · 2419 阅读 · 2 评论 -
Flink最佳实践
一.传递参数几乎所有的Flink应用程序(批处理和流式处理)都依赖于外部配置参数。它们用于指定输入和输出源(如路径或地址),系统参数(并行度,运行时配置)和特定于应用程序的参数(通常在用户功能内使用)。Flink提供了一个简单的实用程序,称为ParameterTool提供解决这些问题的一些基本工具。请注意,使用ParameterTool不是必须的。其他框架(例如Commons CLI和 argparse4j)也可以与Flink一起使用。将配置值放入ParameterTool所述ParameterTo原创 2020-08-26 20:30:04 · 520 阅读 · 0 评论 -
Flink流计算之聚合函数
一.Reduce功能ReduceFunction指定如何将输入中的两个元素组合在一起以产生相同类型的输出元素。Flink使用ReduceFunction来逐步聚合窗口的元素。ReduceFunction可以定义像这样使用:val input: DataStream[(String, Long)] = ...input .keyBy(<key selector>) .window(<window assigner>) .reduce { (v1, v2原创 2020-08-07 18:18:34 · 4068 阅读 · 0 评论 -
Spark Streaming之容错&高可用
一.背景Spark的RDD的基本容错语义:RDD是一个不变的,确定性可重新计算的分布式数据集。每个RDD都会记住在容错输入数据集上用于创建它的确定性操作的血缘关系。如果由于工作节点故障而导致RDD的任何分区丢失,则可以使用操作血缘关系从原始的容错数据集中重新计算该分区。假设所有RDD转换都是确定性的,则最终转换后的RDD中的数据将始终相同,而不管Spark集群中的故障如何。Spark在容错文件系统【例如HDFS或S3】中的数据上运行。因此,从容错数据生成的所有RDD也是容错的。但是,Spark原创 2020-07-31 18:14:21 · 228 阅读 · 0 评论 -
Flink窗口概述及用法详解
一.简介窗口window是处理无限流的核心。窗口将流分成有限大小的“存储块”,我们可以在其上应用计算。本博客重点介绍如何在Flink中执行窗口化,以及程序员如何从其提供的功能中获得最大收益。窗口式Flink程序的一般结构如下所示。第一个片段指的是键控流,而第二个片段指的是非键控流。正如人们所看到的,唯一的区别是keyBy(…)使用window操作键控流和使用windowAll(…)操作的非键控流。键控窗口stream .keyBy(...) <- k原创 2020-07-30 17:47:16 · 2069 阅读 · 0 评论 -
Flink常用转换算子及物理分区
一.转换算子原创 2020-07-29 18:59:10 · 297 阅读 · 0 评论 -
Spark Streaming之内存调优
一.内存调优Spark Streaming应用程序所需的集群内存大小在很大程度上取决于所使用的转换类型。例如,如果要对最后10分钟的数据使用窗口操作,则集群应具有足够的内存以将10分钟的数据保存在内存中。或者,如果想使用updateStateByKey操作大量的kv类型数据,则所需的存储空间会很大。相反,如果想执行一个简单的map-filter-store操作,则所需的内存将很少。通常,由于通过接收器接收的数据存储在StorageLevel.MEMORY_AND_DISK_SER_2中,因此无法容纳在内原创 2020-07-27 19:10:28 · 732 阅读 · 0 评论 -
Spark Streaming之性能调优
一.简介要在集群上的Spark Streaming应用程序中获得最佳性能,需要进行一些调整。可以调整以提高应用程序性能的许多参数和配置。从高层次上讲,需要考虑两件事:通过有效地使用群集资源来减少每批数据的处理时间。设置正确的批处理大小,以便可以按接收到的批处理速度处理一批数据【也就是说,数据处理跟上数据摄取的速度】。由于大多数Spark计算的内存性质,Spark程序可能会受到群集中任何资源【CPU,网络带宽或内存】的瓶颈。通常,如果数据适合内存,则瓶颈是网络带宽,但是有时,还需要进行一些调整,例原创 2020-07-23 19:12:11 · 273 阅读 · 0 评论 -
Spark Streaming应用程序【部署、升级、监控】
一.部署应用要部署运行Spark Streaming应用程序,需要具备以下条件。使用集群管理器进行集群部署,这是任何Spark应用程序的一般要求。将应用程序JAR打包 ,必须将流式应用程序编译为JAR。如果spark-submit用于启动应用程序,则无需在JAR中提供Spark和Spark Streaming。但是,如果应用程序使用高级数据源【例如Kafka】,则必须将它们链接到的额外工件及其依赖项打包在用于部署应用程序的JAR中。例如,使用的应用程序KafkaUtils 必须将spark-stre原创 2020-07-22 20:29:29 · 377 阅读 · 0 评论 -
Spark Streaming之检查点
一.缓存/持久化与RDD相似,DStream也允许开发人员将流的数据持久存储在内存中。也就是说,在DStream上使用persist()方法将自动对该DStream的每个RDD持久存储在内存中。如果DStream中的数据将被多次计算(例如,对同一数据进行多次操作),这将很有用。对于基于窗口操作reduceByWindow和reduceByKeyAndWindow以及基于状态操作的updateStateByKey而言,这都是隐含的。因此,由基于窗口操作生成的DStream会自动保存在内存中,而无需开发人员调原创 2020-07-21 17:46:03 · 440 阅读 · 0 评论 -
Flink流连接器之Kafka【三】【事件时间与水印、分区计划、容错、Kerberos身份验证】
一.Kafka使用者和时间戳提取/水印发射在许多情况下,记录的时间戳(显式或隐式地)嵌入到记录本身。另外,用户可能希望例如基于包含当前事件时间水印的Kafka流中的特殊记录,周期性地或以不规则的方式发出水印。对于这些情况,Flink Kafka Consumer允许指定一个AssignerWithPeriodicWatermarks或一个AssignerWithPunctuatedWatermarks。可以按此处所述指定自定义的时间戳提取器/水印发射器,或使用预定义的提取器/水印发射器 。这样做之后,可原创 2020-07-15 10:13:31 · 1398 阅读 · 0 评论 -
SparkStreaming中使用DataFrame和SQL操作
一.简介可以轻松地对流数据使用DataFrames和SQL操作。StreamingContext和其使用的SparkContext必须来自同一个SparkSession。以便可以在驱动程序故障时重新启动它。这是通过创建SparkSession的延迟实例化单例实例来完成的。在下面的示例中,修改了前面的单词计数示例,以使用DataFrames和SQL生成单词计数。每个RDD都转换为一个DataFrame,注册为临时表,然后使用SQL查询。二.代码实战package spark2.streamingim原创 2020-07-13 15:50:00 · 759 阅读 · 0 评论 -
SparkStreaming之数据输出
一.简介输出操作允许将DStream的数据推出到外部系统,例如数据库或文件系统。由于输出操作实际上允许外部系统使用转换后的数据,因此它们会触发所有DStream转换的实际执行【类似于RDD的操作】。二.算子翻译:...原创 2020-07-11 18:23:50 · 672 阅读 · 0 评论 -
SparkStreaming DStream关联操作【流流关联、流数据集关联】
一.流流关联1.普通流流连接 val lines = ssc.socketTextStream("master",9999) val words = lines.flatMap(_.split(" ")) .map(word => (word,1)) .reduceByKey(_ + _) val result = words.join(words)在此,在每个批处理间隔中,stream1的RDD将与stream2的RDD关联在一起。也可以做l原创 2020-07-04 17:38:20 · 922 阅读 · 0 评论 -
Flink流连接器之Kafka【二】【Kafka Offset设置、容错、主题和分区动态发现】
一.Kafka offset 配置Flink Kafka Consumer可以配置Kafka分区的起始位置。代码://获取数据源 kafkaval consumer : FlinkKafkaConsumer09[String] = new FlinkKafkaConsumer09[String]( "spark", new SimpleStringSchema(), properties)//val hashMap : util.Map[KafkaTopicPartition, java.la原创 2020-07-03 19:26:35 · 1427 阅读 · 0 评论 -
Spark1.x升级Spark2.x常见异常Kafka篇【TopicMetadataRequest】
一.原因分析当Spark从1.x升级到2.x时,如果使用SparkStreaming加载Kafka的数据,即使Kafka版本没有变化【一般会有所升级】,对应的spark-streaming-kafka也必须升级到对应版本,访问方式也会有所变化。此处是从Spark1.6.0升级到Spark2.4.3,Kafka略有升级【从2.1.0升级到2.2.1】,初始使用的是:import org.apache.spark.streaming.kafka.KafkaUtilsval dframe = Kafka原创 2020-07-01 14:18:56 · 391 阅读 · 2 评论 -
Flink流连接器之Kafka【一】【Kafka安装、Kafka版本差异、序列化类型】
一.简介Flink提供了特殊的Kafka连接器,用于在Kafka主题之间读写数据。Flink Kafka Consumer与Flink的检查点机制集成在一起,以提供一次精确的处理语义。为了实现这一目标,Flink不仅依赖于Kafka的消费者组偏移量跟踪,而且在内部也跟踪并检查这些偏移量。对于大多数用户来说,FlinkKafkaConsumer08【08代表Kafka的版本】是合适的。具体如下:二.安装Apache Kafka参考博客:Kafka分布式安装备注:按照Kafka快速入门中的说明原创 2020-06-27 17:18:26 · 770 阅读 · 0 评论 -
Flink流连接器【数据源/接收器】
一.预定义的源和接收器Flink内置了一些基本数据源和接收器,它们始终可用。该预定义的数据源包括文件,目录和Socket,并可以加载集合和迭代器的数据。该预定义的数据接收器支持写入文件,输出信息和异常。二.捆绑式连接器连接器提供用于与各种第三方系统接口的代码。当前支持以下系统:Apache Kafka(源/接收器)Apache Cassandra(接收器)Amazon Kinesis Streams(源/接收器)Elasticsearch(接收器)Hadoop文件系统(接收器)Rabbi原创 2020-06-27 16:58:43 · 982 阅读 · 0 评论 -
Flink流计算状态与容错【键控状态、操作状态、托管状态】
有状态的函数和运算符在处理单个元素/事件的过程中存储数据,从而使状态成为任何类型的更精细操作的关键构建块。包括:当应用程序搜索某些事件模式时,状态将存储到目前为止遇到的事件序列。在每分钟/小时/天汇总事件时,状态将保留待处理的汇总。在数据点流上训练机器学习模型时,状态保持模型参数的当前版本。当需要管理历史数据时,该状态允许有效访问过去发生的事件。Flink需要了解状态,以便使用检查点使状态容错并允许流应用程序的保存点。状态还允许重新缩放Flink应用程序,这意味着Flink负责在并行实例之原创 2020-06-25 20:05:01 · 626 阅读 · 0 评论 -
Spark Streaming窗口函数
一.简介Spark Streaming还提供了窗口计算,可以在数据的滑动窗口上应用转换。下图说明了此滑动窗口。如该图所示,每当窗口滑动在源DStream,落入窗口内的源RDDS被组合及操作以产生RDDS的窗口DStream。在这种特定情况下,该操作将应用于数据的最后3个时间单位,并以2个时间单位滑动。这表明任何窗口操作都需要指定两个参数。窗口长度 - 窗口的持续时间。滑动间隔 -进行窗口操作的间隔。这两个参数必须是源DStream的批处理间隔的倍数。让我们用一个例子来说明窗口操作。每10秒原创 2020-06-20 11:49:09 · 646 阅读 · 0 评论 -
Sparkstreaming常用算子详解
一.基本算子二.updateStateByKeyupdateStateByKey操作可以保持任意状态,同时不断用新信息更新它。要使用此功能,必须执行两个步骤。定义状态-状态可以是任意数据类型。定义状态更新功能-使用功能指定如何使用输入流中的先前状态和新值来更新状态。在每个批次中,Spark都会对所有现有密钥应用状态更新功能,而不管它们是否在批次中具有新数据。如果更新函数返回,None将删除键值对。让我们用一个例子来说明。假设要保持在文本数据流中看到的每个单词的连续计数。此处,运行计数是状态原创 2020-06-20 11:32:41 · 1740 阅读 · 0 评论 -
Flink预定义时间戳提取器/水印发射器
一.简介Flink提供了抽象,允许程序员分配自己的时间戳并发出自己的水印。更具体地说,根据使用情况,可以通过实现AssignerWithPeriodicWatermarks和AssignerWithPunctuatedWatermarks接口之一来实现。简而言之,第一个将定期发出水印,而第二个则根据传入记录的某些属性发出水印,例如,每当流中遇到特殊元素时。为了进一步简化此类任务的编程工作,Flink附带了一些预先实现的时间戳分配器。二.时间戳递增的分配器定期生成水印的最简单的特殊情况是给定源任务看到原创 2020-06-16 17:32:52 · 420 阅读 · 0 评论 -
Flink整合Kafka实现WordCount
一.简介Flink的基本信息和API信息以及Kafka的基本信息在此不再赘述,需要了解的参考博客:Flink:Flink流处理API编程指南 Kafka:Kafka基本信息二.代码实战package cn.kafkaimport java.util.Propertiesimport org.apache.flink.api.common.serialization.SimpleStringSchemaimport org.apache.flink.streaming.api.window原创 2020-06-15 17:50:14 · 437 阅读 · 0 评论 -
Flink整合Kafka报objenesis
一.场景因Scala函数式和链式编程使用使得代码简介性相较Java有质的提升,因此,在Flink开发时还是使用Scala进行编程。但是在加载Kafka的数据时报objenesis异常,但是代码中没有使用POJO类。二.异常信息D:\Users\Administrator\jdk1.8.0_66\bin\java -Didea.launcher.port=7536 -Didea.launcher.bin.path=D:\Users\Administrator\IDEA15\bin -Dfile.enco原创 2020-06-15 17:25:44 · 238 阅读 · 0 评论 -
Flink生成时间戳/水印
一.概述生成时间戳/水印与在事件时间有关。有关事件时间, 处理时间和摄取时间,参考:事件时间概述为了处理事件时间,流式传输程序需要相应地设置时间特征。val env = StreamExecutionEnvironment.getExecutionEnvironmentenv.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)二.分配时间戳为了使用事件时间,Flink需要知道事件的时间戳,这意味着流中的每个元素都需要分配其事件时间原创 2020-06-12 18:53:56 · 2918 阅读 · 0 评论 -
Spark Streaming编程指南【快速入门】
一.概述Spark Streaming是核心Spark API的扩展,可实现实时数据流【微批处理】的可伸缩,高吞吐量,容错流处理。数据可以从像kafka,flume,kinesis或TCP套接字许多来源摄入,并且可以使用高级函数例如map,reduce,join和window来表达复杂的算法。最后,可以将处理后的数据推送到文件系统,数据库和实时仪表板。实际上,可以在数据流上应用Spark的机器学习和 图计算算法。在内部,Spark Streaming接收实时输入数据流,并将数据分成批处理,然后由Spa原创 2020-06-08 15:14:37 · 189 阅读 · 0 评论 -
Flink迭代流代码实战及原理分析【包含完整代码】
一.简介参考:DataStream API编程指南二.代码实战package cn.streamingimport org.apache.flink.streaming.api.scala._import org.apache.flink.api.java.utils.ParameterToolimport org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}/** * 统计不及格、及原创 2020-06-05 19:05:16 · 312 阅读 · 0 评论 -
Flink DataStream API编程指南
一.简介Flink中的DataStream程序是常规程序,可对数据流实施转换(例如,过滤,更新状态,定义窗口,聚合)。最初从各种来源(例如,消息队列,套接字流,文件)创建数据流。结果通过接收器返回,接收器可以例如将数据写入文件或标准输出(例如命令行终端)。Flink程序可以在各种上下文中运行,独立运行或嵌入其他程序中。执行可以在本地JVM或许多计算机的群集中进行。二.代码案例以下程序是流式窗口单词计数应用程序的一个完整的工作示例,该应用程序在5秒的窗口中对来自Socket套接字的单词进行计数。pac原创 2020-06-04 20:05:34 · 237 阅读 · 0 评论 -
Flink之Java lambda表达式
一.简介Java 8引入了一些新的语言功能,旨在更快,更清晰地编码。它具有最重要的功能,即所谓的“ Lambda表达式”,为函数式编程打开了大门。Lambda表达式允许以直接方式实现和传递函数,而无需声明其他(匿名)类。注意: Flink支持对Java API的所有运算符使用lambda表达式,但是,每当lambda表达式使用Java泛型时,都需要显式声明类型信息。二.范例与限制下面的示例说明如何实现一个简单的内联map()函数,该函数使用lambda表达式对输入进行平方。函数的输入i和输出参数的类原创 2020-06-02 14:42:34 · 1186 阅读 · 0 评论 -
Flink扩展API
一.简介为了在Scala和Java API之间保持相当程度的一致性,用于批处理和流传输的标准API省略了一些允许在Scala中进行高水平表达的功能。如果想享受完整的Scala体验,则可以选择加入通过隐式转换来增强Scala API的扩展。要使用所有可用的扩展,只需导入相应的扩展组件即可:1.DataSet APIimport org.apache.flink.api.scala.extensions._2.DataStream APIimport org.apache.flink.strea原创 2020-05-30 09:15:20 · 290 阅读 · 0 评论 -
Flink报org.objenesis.strategy.InstantiatorStrategy原因及解决方案
一.场景当在Flink中使用POJO时,经常会出现该异常,代码如下:1.POJO类:class WordWithCount(word : String, count : Int){ def this(){ this(null, 0) }}2.逻辑代码 val input = execution.fromElements( new WordWithCount("hello", 1), new WordWithCount("word", 2))原创 2020-05-23 10:23:52 · 2484 阅读 · 2 评论 -
Flink基本API及核心概念详解
一.概述Flink程序是常规程序,可对分布式集合进行转换(例如,过滤,映射,更新状态,联接,分组,定义窗口,聚合)。集合最初是从源创建的(例如,通过读取文件,kafka主题或本地内存中的集合)。结果通过接收器返回,接收器可以将数据写入(分布式)文件或标准输出(例如,命令行终端)。Flink程序可以在各种上下文中运行,独立运行或嵌入其他程序中。执行可以在本地JVM或许多计算机的群集中进行。根据数据源的类型(即有界或无界源),您将编写批处理程序或流程序,其中DataSet API用于批处理,而DataStr原创 2020-05-21 20:43:09 · 761 阅读 · 0 评论 -
Flink配置【依赖、连接器、类库】
一.简介每个 Flink 应用都需要依赖一组 Flink 类库。Flink 应用至少需要依赖 Flink APIs。许多应用还会额外依赖连接器类库(比如 Kafka、Cassandra 等)。 当用户运行 Flink 应用时(无论是在 IDE 环境下进行测试,还是部署在分布式环境下),运行时类库都必须可用。二.Flink 核心依赖以及应用依赖与其他运行用户自定义应用的大多数系统一样,Flink 中有两大类依赖类库:Flink 核心依赖:Flink 本身包含运行所需的一组类和依赖,比如协调、网络通讯原创 2020-05-19 14:34:21 · 980 阅读 · 0 评论 -
Flink流计算项目搭建【SBT、Maven】
一.构建工具可以使用不同的构建工具来构建Flink项目。 为了快速入门,Flink为以下构建工具提供了项目模板:SBTMaven这些模板将帮助建立项目的框架并创建初始化的构建文件。二.SBT1.创建项目使用SBT模板:sbt new tillrohrmann/flink-project.g8这里将提示输入几个参数 (项目名称,Flink版本…) 然后从 Flink项目模版创建一个Flink项目。 你的sbt版本需要不小于0.13.13才能执行这个命令。如有必要,你可以参考这个安装指南获取原创 2020-05-18 19:16:25 · 578 阅读 · 0 评论 -
Flink词汇表【常用词汇集锦】
Flink应用程序集群:专门的Flink集群,它仅执行一个Flink作业。生命周期与该作业相同。在工作模式下,以前的Flink应用程序集群也称为Flink集群。Flink集群:一种分布式系统,通常由一个Flink Master和一个或多个Flink TaskManager进程组成。事件:有关由应用程序建模的域的状态更改的声明。事件可以是流或批处理应用程序的输入或输出。事件是特殊类型的记录。执行图:见16:物理图功能:功能由用户实现,并封装Flink程序的应用程序逻辑。大多数功能由相应的运算符包装。.原创 2020-05-16 12:55:13 · 269 阅读 · 0 评论 -
Flink分布式运行分析【任务与操作链、任务槽与资源、状态后端与保存点】
一.任务与操作链对于分布式执行,Flink链操作子任务一起放入任务。每个任务由一个线程执行。将操作链接到任务是一个有用的优化:它减少了线程到线程的切换和缓冲的开销,并降低延迟的同时提高了总体吞吐量,链接可配置。如下图:二.JobManager、TaskManager、ClientJobManager【也称master】负责协调分布式执行。安排任务,协调检查点,协调故障恢复等。TaskManager【也称worker】执行任务的数据流,以及缓冲器和交换数据流。Client不是运行和程序执行的一原创 2020-05-15 15:27:30 · 576 阅读 · 0 评论 -
Flink时间【事件时间、摄取时间、处理时间】与水印概述
一.事件时间事件时间是每个事件在其生产者上创建的时间。该时间通常在它们进入Flink之前嵌入到记录中,并且可以从每个记录中提取事件时间戳。在事件时间中,时间的进度取决于数据,而不取决于任何时钟。事件时间程序必须指定如何生成“ 事件时间水印”,这是一种表示事件时间进展的机制。在理想情况下,事件时间处理将产生完全一致且确定的结果,而不管事件何时到达或它们的顺序如何。但是,除非已知事件是按时间戳(按时间戳)到达的,否则事件时间处理会在等待无序事件时产生一定的延迟。由于只能等待有限的时间,因此这限制了确定性事原创 2020-05-13 10:40:31 · 3898 阅读 · 0 评论