flink

Flink学习札记1——2020.2.25新一代大数据计算引擎 Flink从入门到实战

这一生的挚爱 提交于 2020-02-26 13:46:53
#Flink开发批处理应用程序 需求:词频统计(word count) 文件,统计文件中每个单词出现的次数分隔符是\t统计结果我们直接打印在控制台(生产上肯定是Sink到目的地) 实现 Flink,+ Java Flink + Scala ##环境准备: ### JDK: 下载地址:https://www.oracle.com/technetwork/java/javase/ Mac:dmg Linux:tar.gz indows:exe ###Maven 官网:maven.apache.org 下载地址:https://archive.apache.org/dist/maven/maven-3/3 Linux/Mac/Windows:解压 tar-zxvf apache-maven-3.3.9-bin.tar.qz ~C/app ##开发流程/开发八股文编程 1)set up the batch execution environment 2)read 3)transform operations 开发的核心所在:开发业务逻辑 4)execute program ##功能拆解 1)读取数据 hello welcome 2)每一行的数据按照指定的分隔符拆分hello welcome 3)为每一个单词赋上次数为1 (hetlo,1) (welcome,1) 4)合并操作 创建项目

1.Flink学习之旅(一)

笑着哭i 提交于 2020-02-24 21:17:59
文章目录 1. [Apache Flink官网](https://flink.apache.org/) 2. 登峰大数据(微信公众号) 3. Flink简介 4. Flink常见的几类应用 4.1. 事件驱动型应用 4.2. 数据分析应用 4.3. 数据管道应用 5. Flink的安装部署和尝鲜 5.1. 本地安装教程 5.2. WordCount演示(scala版本) 6. 路漫漫其修远兮,吾将上下而求索 1. Apache Flink官网 2. 登峰大数据(微信公众号) 3. Flink简介 Apache Flink 是一个开源 框架 和 分布式 处理引擎,用于在 无边界 和 有边界 数据流上进行有 状态 的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。 总述 处理无界和有界数据 部署应用到任意地方 Flink 集成了所有常见的集群资源管理器,例如 Hadoop YARN 、 Apache Mesos 和 Kubernetes ,但同时也可以作为 独立集群 运行。 运行任意规模应用 Flink 旨在 任意规模上运行 有状态 流式应用 Flink 很容易维护非常大的应用程序状态。其异步和增量的检查点算法对处理延迟产生最小的影响,同时保证精确一次状态的一致性。 利用内存性能 特性 批流一体化 精密的状态管理 事件时间支持 精确一次的状态一致性保障

实战场景 Flink读取kafka数据,处理以后写入到ElasticSearch

拜拜、爱过 提交于 2020-02-23 02:57:55
参考文章: 实战场景 Flink读取kafka数据,处理以后写入到ElasticSearch 添加pom: <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-kafka-0.9_2.11</artifactId> <version>1.6.1</version> </dependency> 代码: import java.util.Properties import org.apache.flink.streaming.api._ import org.apache.flink.streaming.connectors.kafka._ import org.apache.flink.streaming.util.serialization.SimpleStringSchema import org.apache.flink.streaming.api.scala._ object Flink_kafka { def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment // 非常关键,一定要设置启动检查点!! env

[源码分析] 从源码入手看 Flink Watermark 之传播过程

心已入冬 提交于 2020-02-22 17:38:13
[源码分析] 从源码入手看 Flink Watermark 之传播过程 0x00 摘要 本文将通过源码分析,带领大家熟悉Flink Watermark 之传播过程,顺便也可以对Flink整体逻辑有一个大致把握。 0x01 总述 从静态角度讲,watermarks是实现流式计算的核心概念;从动态角度说,watermarks贯穿整个流处理程序。所以为了讲解watermarks的传播,需要对flink的很多模块/概念进行了解,涉及几乎各个阶段。我首先会讲解相关概念,然后会根据一个实例代码从以下几部分来解释:程序逻辑/计算图模型/程序执行。最后是详细Flink源码分析(略冗长,可以选择性阅读)。 0x02 相关概念 流计算被抽象成四个问题,what,where,when,how。 window解决的是where,也就是将无界数据划分成有界数据。 window的数据何时被计算是when?解决这个问题用的方式是watermark和trigger,watermark用来标记窗口的完整性。trigger用来设计窗口数据触发条件。 1. 乱序处理 乱序问题一般是和event time关联的, 对于一个流式处理系统的process time来说,是不存在乱序问题的。所以下面介绍的watermark/allowedLateness也只是在event time作为主时间才生效。 Flink中处理乱序依赖的

Flink的入门

◇◆丶佛笑我妖孽 提交于 2020-02-22 14:34:13
Apache Flink(下简称Flink)项目是大数据处理领域最近冉冉升起的一颗新星,其不同于其他大数据项目的诸多特性吸引了越来越多人的关注。本文将深入分析Flink的一些关键技术与特性,希望能够帮助读者对Flink有更加深入的了解,对其他大数据系统开发者也能有所裨益。本文假设读者已对MapReduce、Spark及Storm等大数据处理框架有所了解,同时熟悉流处理与批处理的基本概念。 Flink简介 Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务: DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。 DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作,支持Java和Scala。 Table API,对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过类SQL的DSL对关系表进行各种查询操作,支持Java和Scala。 此外,Flink还针对特定的应用领域提供了领域库,例如: Flink ML,Flink的机器学习库

flink dataset join笔记

…衆ロ難τιáo~ 提交于 2020-02-20 11:53:35
1、dataset的join连接,通过key进行关联,一般情况下的join都是inner join,类似sql里的inner join key包括以下几种情况: a key expression a key-selector function one or more field position keys (Tuple DataSet only). Case Class Fields 2、inner join的几种情况 2.1 缺省的join,jion到一个Tuple2元组里 public static class User { public String name; public int zip; } public static class Store { public Manager mgr; public int zip; } DataSet<User> input1 = // [...] DataSet<Store> input2 = // [...] // result dataset is typed as Tuple2 DataSet<Tuple2<User, Store>> result = input1.join(input2) .where("zip") // key of the first input (users) .equalTo("zip"); //

Flink Connectors 介绍与 Kafka Connector

时间秒杀一切 提交于 2020-02-15 08:45:32
文章目录 1. Streaming Connectors 预定义的 source 和 sink Boundled connectors Apache Bahir 中的连接器 异步 IO 2. Flink Kafka Connector 2.1 Flink Kafka Consumer 1)反序列化 2)消费起始位置设置 3)topic 和 partition 动态发现 4)commit offset 方式 5)Timestamp Extraction/Watermark 生成 2.2 Flink Kafka Producer 1)Producer 写出时的 Partition 分区 2)Producer 容错 3. Q&A 1. Streaming Connectors Connector 的作用就相当于一个连接器,连接 Flink 计算引擎跟外界存储系统。 目前常用的 Connector 有以下几种: 预定义的 source 和 sink 基于文件的 source 和 sink // 从文本文件中读取数据 env . readTextFile ( path ) ; // 以文本的形式读取该文件中的内容 env . readFile ( fileInputFormat , path ) ; // 将结果已文本格式写出到文件中 DataStream . writeAsText (

flink的异步接口调用

时光总嘲笑我的痴心妄想 提交于 2020-02-14 14:25:11
同步接口的调用,是在接口响应之后,才能进行下一数据的请求方法,在接口性能不佳的情况下,严重影响flink的性能,这与flink的实时思想有违背,为了避免这种情况,我们在接口调用的时候,可以采取 异步 的方式。 不废话,直接上代码,需要原理自行官方文档。 AsyncDataStream.unorderedWait(dataSource, new HttpAsyncFunction("url"), 30000, TimeUnit.SECONDS, 20); dataSource :调用接口的数据源 HttpAsynvFunction :博主的工具类,稍后分享给大家 30000: 请求的超时时间 TimeUnit.SECONDS:超时时间单位的描述 20: capacity:可以触发的异步I / O操作的最大数量 public class HttpAsyncFunction extends RichAsyncFunction<String, String> { private static final long serialVersionUID = 8522411971886428444L; private static final long TERMINATION_TIMEOUT = 5000L; private static final int THREAD_POOL_SIZE =

Flink之CheckPoint 构建 真正的End-to-End Exactly-Once

五迷三道 提交于 2020-02-13 03:22:48
本博客内容主要讲解: Flink消费Kafka数据写入MySQL模拟Flink端到端精准一次消费 1. 模拟 kafka数据没1s产生一条,产生60条; 2. Flink 消费Kafka,每10一次检查点; 3. 消费到第15条(前面产生一个检查点,不一定是在消费到第10条,因为第一个10s开始时间不一定是从第一条开始算)设置异常数据,数据不会插入 4. 修正异常数据,重启应用程序,Flink重新消费Kafka,数据全部落入MySQL,没有重复,也没有丢失 Exactly-Once 语义 Exactly-Once 语义指每个数据输入端的事件只能影响最终结果一次.解释机器出现故障,数据既没有重复,也没有丢失 CheckPoint: 一次CheckPoint进行一次快照;容包含以下内容 应用程序的当前状态 输入流位置 在 Flink 1.4.0 之前,Exactly-Once 语义仅限于 Flink 应用程序内部,并没有扩展到 Flink 数据处理完后发送的大多数外部系统。Flink 应用程序与各种数据输出端进行交互,开发人员需要有能力自己维护组件的上下文来保证 Exactly-Once 语义。 模拟 Kafka->Flink->MySQL 端到端 精准一次消费 主要代码 代码1 package com.huonan.twocommit; import lombok.extern

Flink DataStream API 再理解

笑着哭i 提交于 2020-02-12 04:37:52
文章目录 DataStream API 概览 DataStream 的转换 KeyedStream 的理解 数据分区调配算子 类型概览 示例 DataStream API 概览 DataStream 的转换 DataStream 通过 split 给流中的数据打上标签成为 SplitStream,在使用 select 获取指定标签的流,又得到一个 DataStream。 DataStream 通过 Connect 操作,在调用 streamA.connect(streamB)后可以得到一个专门的 ConnectedStream。ConnectedStream 支持的操作与普通的 DataStream 有所区别,由于它代表两个不同的流混合的结果,因此它允许用户对两个流中的记录分别指定不同的处理逻辑,然后它们的处理结果形成一个新的 DataStream 流。由于不同记录的处理是在同一个算子中进行的,因此它们在处理时可以方便的共享一些状态信息。上层的一些 Join 操作,在底层也是需要依赖于 Connect 操作来实现的。ConnectedStream 可以使用 coMap 方法对 ConnectedStreams 中的每一个流分别进行 map。 DataStream 通过 windowAll 方法得到 AllWindowStream,将所有的 window 划分成为一个一个 mini