![](https://img-blog.csdnimg.cn/20200608193351554.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Flink
实时流计算引擎
神之凝视
这个作者很懒,什么都没留下…
展开
-
Flink高级特性之检查点
一.概述Flink中的每个函数和运算符都可以是有状态的。有状态功能在处理单个元素/事件的过程中存储数据,使状态成为任何类型的更复杂操作的关键构建块。为了使状态容错,Flink需要检查点状态。检查点允许Flink恢复流中的状态和位置,从而为应用程序提供与无故障执行相同的语义。二.先决条件Flink的检查点机制与流和状态的持久存储交互。通常,它要求:持久(或耐用,可以重放某个时间段内一定量的记录)的数据源。此类消息源是持久消息队列(例如,Apache Kafka,RabbitMQ,Amazon Ki原创 2020-11-12 11:24:29 · 797 阅读 · 0 评论 -
Flink之广播状态模式
一.提供的API为了展示所提供的API,我们将以一个示例开始,然后介绍其完整功能。作为正在运行的示例,我们将使用这样的情况,其中有一系列不同颜色和形状的对象,并且我们希望找到遵循某种模式的相同颜色的对象对,例如矩形后跟三角形。我们假设这组有趣的模式会随着时间而演变。在此示例中,第一个流将包含Item带有Color和Shape属性的type元素。另一个流将包含Rules。从流开始Items,我们只需要键入它的Color,因为我们要对相同颜色的。这将确保相同颜色的元素最终出现在同一台物理计算机上。//原创 2020-10-15 20:21:15 · 1947 阅读 · 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 · 2392 阅读 · 2 评论 -
Flink最佳实践
一.传递参数几乎所有的Flink应用程序(批处理和流式处理)都依赖于外部配置参数。它们用于指定输入和输出源(如路径或地址),系统参数(并行度,运行时配置)和特定于应用程序的参数(通常在用户功能内使用)。Flink提供了一个简单的实用程序,称为ParameterTool提供解决这些问题的一些基本工具。请注意,使用ParameterTool不是必须的。其他框架(例如Commons CLI和 argparse4j)也可以与Flink一起使用。将配置值放入ParameterTool所述ParameterTo原创 2020-08-26 20:30:04 · 518 阅读 · 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 · 4058 阅读 · 0 评论 -
Flink窗口概述及用法详解
一.简介窗口window是处理无限流的核心。窗口将流分成有限大小的“存储块”,我们可以在其上应用计算。本博客重点介绍如何在Flink中执行窗口化,以及程序员如何从其提供的功能中获得最大收益。窗口式Flink程序的一般结构如下所示。第一个片段指的是键控流,而第二个片段指的是非键控流。正如人们所看到的,唯一的区别是keyBy(…)使用window操作键控流和使用windowAll(…)操作的非键控流。键控窗口stream .keyBy(...) <- k原创 2020-07-30 17:47:16 · 2062 阅读 · 0 评论 -
Flink常用转换算子及物理分区
一.转换算子原创 2020-07-29 18:59:10 · 290 阅读 · 0 评论 -
Flink流连接器之Kafka【三】【事件时间与水印、分区计划、容错、Kerberos身份验证】
一.Kafka使用者和时间戳提取/水印发射在许多情况下,记录的时间戳(显式或隐式地)嵌入到记录本身。另外,用户可能希望例如基于包含当前事件时间水印的Kafka流中的特殊记录,周期性地或以不规则的方式发出水印。对于这些情况,Flink Kafka Consumer允许指定一个AssignerWithPeriodicWatermarks或一个AssignerWithPunctuatedWatermarks。可以按此处所述指定自定义的时间戳提取器/水印发射器,或使用预定义的提取器/水印发射器 。这样做之后,可原创 2020-07-15 10:13:31 · 1388 阅读 · 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 · 1414 阅读 · 0 评论 -
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 · 763 阅读 · 0 评论 -
Flink流连接器【数据源/接收器】
一.预定义的源和接收器Flink内置了一些基本数据源和接收器,它们始终可用。该预定义的数据源包括文件,目录和Socket,并可以加载集合和迭代器的数据。该预定义的数据接收器支持写入文件,输出信息和异常。二.捆绑式连接器连接器提供用于与各种第三方系统接口的代码。当前支持以下系统:Apache Kafka(源/接收器)Apache Cassandra(接收器)Amazon Kinesis Streams(源/接收器)Elasticsearch(接收器)Hadoop文件系统(接收器)Rabbi原创 2020-06-27 16:58:43 · 978 阅读 · 0 评论 -
Flink流计算状态与容错【键控状态、操作状态、托管状态】
有状态的函数和运算符在处理单个元素/事件的过程中存储数据,从而使状态成为任何类型的更精细操作的关键构建块。包括:当应用程序搜索某些事件模式时,状态将存储到目前为止遇到的事件序列。在每分钟/小时/天汇总事件时,状态将保留待处理的汇总。在数据点流上训练机器学习模型时,状态保持模型参数的当前版本。当需要管理历史数据时,该状态允许有效访问过去发生的事件。Flink需要了解状态,以便使用检查点使状态容错并允许流应用程序的保存点。状态还允许重新缩放Flink应用程序,这意味着Flink负责在并行实例之原创 2020-06-25 20:05:01 · 619 阅读 · 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 · 435 阅读 · 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 · 229 阅读 · 0 评论 -
Flink生成时间戳/水印
一.概述生成时间戳/水印与在事件时间有关。有关事件时间, 处理时间和摄取时间,参考:事件时间概述为了处理事件时间,流式传输程序需要相应地设置时间特征。val env = StreamExecutionEnvironment.getExecutionEnvironmentenv.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)二.分配时间戳为了使用事件时间,Flink需要知道事件的时间戳,这意味着流中的每个元素都需要分配其事件时间原创 2020-06-12 18:53:56 · 2900 阅读 · 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 · 309 阅读 · 0 评论 -
Flink DataStream API编程指南
一.简介Flink中的DataStream程序是常规程序,可对数据流实施转换(例如,过滤,更新状态,定义窗口,聚合)。最初从各种来源(例如,消息队列,套接字流,文件)创建数据流。结果通过接收器返回,接收器可以例如将数据写入文件或标准输出(例如命令行终端)。Flink程序可以在各种上下文中运行,独立运行或嵌入其他程序中。执行可以在本地JVM或许多计算机的群集中进行。二.代码案例以下程序是流式窗口单词计数应用程序的一个完整的工作示例,该应用程序在5秒的窗口中对来自Socket套接字的单词进行计数。pac原创 2020-06-04 20:05:34 · 231 阅读 · 0 评论 -
Flink之Java lambda表达式
一.简介Java 8引入了一些新的语言功能,旨在更快,更清晰地编码。它具有最重要的功能,即所谓的“ Lambda表达式”,为函数式编程打开了大门。Lambda表达式允许以直接方式实现和传递函数,而无需声明其他(匿名)类。注意: Flink支持对Java API的所有运算符使用lambda表达式,但是,每当lambda表达式使用Java泛型时,都需要显式声明类型信息。二.范例与限制下面的示例说明如何实现一个简单的内联map()函数,该函数使用lambda表达式对输入进行平方。函数的输入i和输出参数的类原创 2020-06-02 14:42:34 · 1178 阅读 · 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 · 284 阅读 · 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 · 2475 阅读 · 2 评论 -
Flink基本API及核心概念详解
一.概述Flink程序是常规程序,可对分布式集合进行转换(例如,过滤,映射,更新状态,联接,分组,定义窗口,聚合)。集合最初是从源创建的(例如,通过读取文件,kafka主题或本地内存中的集合)。结果通过接收器返回,接收器可以将数据写入(分布式)文件或标准输出(例如,命令行终端)。Flink程序可以在各种上下文中运行,独立运行或嵌入其他程序中。执行可以在本地JVM或许多计算机的群集中进行。根据数据源的类型(即有界或无界源),您将编写批处理程序或流程序,其中DataSet API用于批处理,而DataStr原创 2020-05-21 20:43:09 · 758 阅读 · 0 评论 -
Flink配置【依赖、连接器、类库】
一.简介每个 Flink 应用都需要依赖一组 Flink 类库。Flink 应用至少需要依赖 Flink APIs。许多应用还会额外依赖连接器类库(比如 Kafka、Cassandra 等)。 当用户运行 Flink 应用时(无论是在 IDE 环境下进行测试,还是部署在分布式环境下),运行时类库都必须可用。二.Flink 核心依赖以及应用依赖与其他运行用户自定义应用的大多数系统一样,Flink 中有两大类依赖类库:Flink 核心依赖:Flink 本身包含运行所需的一组类和依赖,比如协调、网络通讯原创 2020-05-19 14:34:21 · 967 阅读 · 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 · 575 阅读 · 0 评论 -
Flink词汇表【常用词汇集锦】
Flink应用程序集群:专门的Flink集群,它仅执行一个Flink作业。生命周期与该作业相同。在工作模式下,以前的Flink应用程序集群也称为Flink集群。Flink集群:一种分布式系统,通常由一个Flink Master和一个或多个Flink TaskManager进程组成。事件:有关由应用程序建模的域的状态更改的声明。事件可以是流或批处理应用程序的输入或输出。事件是特殊类型的记录。执行图:见16:物理图功能:功能由用户实现,并封装Flink程序的应用程序逻辑。大多数功能由相应的运算符包装。.原创 2020-05-16 12:55:13 · 263 阅读 · 0 评论 -
Flink分布式运行分析【任务与操作链、任务槽与资源、状态后端与保存点】
一.任务与操作链对于分布式执行,Flink链操作子任务一起放入任务。每个任务由一个线程执行。将操作链接到任务是一个有用的优化:它减少了线程到线程的切换和缓冲的开销,并降低延迟的同时提高了总体吞吐量,链接可配置。如下图:二.JobManager、TaskManager、ClientJobManager【也称master】负责协调分布式执行。安排任务,协调检查点,协调故障恢复等。TaskManager【也称worker】执行任务的数据流,以及缓冲器和交换数据流。Client不是运行和程序执行的一原创 2020-05-15 15:27:30 · 568 阅读 · 0 评论 -
Flink时间【事件时间、摄取时间、处理时间】与水印概述
一.事件时间事件时间是每个事件在其生产者上创建的时间。该时间通常在它们进入Flink之前嵌入到记录中,并且可以从每个记录中提取事件时间戳。在事件时间中,时间的进度取决于数据,而不取决于任何时钟。事件时间程序必须指定如何生成“ 事件时间水印”,这是一种表示事件时间进展的机制。在理想情况下,事件时间处理将产生完全一致且确定的结果,而不管事件何时到达或它们的顺序如何。但是,除非已知事件是按时间戳(按时间戳)到达的,否则事件时间处理会在等待无序事件时产生一定的延迟。由于只能等待有限的时间,因此这限制了确定性事原创 2020-05-13 10:40:31 · 3883 阅读 · 0 评论 -
Flink数据流编程模型【抽象级别、数据流、视图、检查点】
一.抽象级别Flink提供了不同级别的抽象来开发流处理/批处理应用程序。如图:最低级别的抽象仅提供状态流。它通过Process Function嵌入到DataStream API中。它允许用户自由地处理一个或多个流中的事件,并使用一致的容错状态。此外,用户可以将注册事件时间和处理时间回调,从而允许程序实现复杂的计算。实际上,大多数应用程序不需要上述低级抽象,而是针对核心API进行编程,例如DataStream API和DataSet API。这些流畅的API为数据处理提供了通用的构建块,例如各种形原创 2020-05-08 20:44:52 · 628 阅读 · 0 评论