flink

pyflink安装测试

会有一股神秘感。 提交于 2020-02-12 02:21:22
背景 最近在调研flink,因是python技术栈,故研究了一番如何使用python代码来进行flink的开发,首先就是对pyflink的安装,折腾了一番终于安装成功。关于flink的介绍,可看 https://flink.apache.org/zh/ 测试环境 操作系统: centos7.5 python:python 3.7.6 maven:3.3.9 jdk:1.8 node:12.15.0 以上环境需要提前配置好 注意maven配置下阿里源,否则编译过程十分漫长 阿里源配置在 apache-maven-3.3.9/conf/settings.xml 中,内容如下: < mirrors > < mirror > < id > nexus-aliyun < /id > < mirrorOf > central < /mirrorOf > < name > Nexus aliyun < /name > < url > http://maven.aliyun.com/nexus/content/groups/public < /url > < /mirror > < /mirrors > flink编译 1、首先下载flink源码:https://flink.apache.org/zh/downloads.html 下载完成上传至服务器后执行以下命令: tar -zxvf

Flink 运行时架构

强颜欢笑 提交于 2020-02-09 21:54:20
参考链接: https://blog.csdn.net/dajiangtai007/article/details/88575553 1、Flink 运行时架构 Flink 运行时架构主要包含几个部分:Client、JobManager(master节点)和TaskManager(slave节点)。 一、 Client:Flink作业在哪台机器上面提交,那么当前机器称之为Client。用户开发的Program 代码,它会构建出 DataFlow graph,然后通过Client提交给JobManager。 JobManager:是主(master)节点,相当于YARN里面的ResourceManager,生产环境中一般可以做HA高可用。 JobManager会将任务进行拆分,调度到TaskManager上面执行。 TaskManager:是从节点(slave),TaskManager才是真正实现task的部分。 Client 提交作业到JobManager,就需要跟JobManager进行通信,它使用 Akka 框架或者库进行通信,另外Client与JobManager进行数据交互,使用的是 Netty框架。AKKA通信基于 Actor System,Client可以向JobManager发送指令,比如Submit job 或者 Cancel/update job。

flink_初识01

不羁岁月 提交于 2020-02-09 07:56:50
1.flink wordcount package flink import org.apache.flink.api.scala._ import org.apache.flink.core.fs.FileSystem.WriteMode import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment} object FlinkDemo { def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment //source val text: DataStream[String] = env.readTextFile("file:///E:\\\\sparkproject\\\\src\\\\test\\\\data\\\\flink.txt") //transaction val result = text .flatMap { x => x.split("\\s") } .map { x => (x, 1) } .keyBy(0) .sum(1) //sink result.setParallelism(1).print() result

Flink API

南笙酒味 提交于 2020-02-08 19:08:54
一、Flink API 1、DataSet:对静态数据进行批处理操作、将静态数据抽象成分布式数据集,使用Flink各种操作符处理数据,支持 Java 、Scala、Python 2、DataStream:对数据流进行流处理操作,将流式的数据抽象成分布式数据流,用Flink 各种操作符处理数据流,支持 Java、Scala 3、Table API:对结构化数据进行查询操作,将结构化数据抽象成关系表。并通过类SQL的DSL对关系表进行各种查询操作,支持 Java、Scala. 二、反压机制 概念理解:通常是由于某段时间内源头数据量的暴涨,导致任务处理数据的速度远远小于源头数据的流入速度。 导致问题:这种情况会导致流任务的内存越积越大,可能导致资源耗尽甚至系统崩溃。 不同流计算引擎,处理方式不同: storm:通过监控 process bolt 中接收队列负载情况来处理反压,即当超过高水位值,就将反压信息写到Zookeeper, 由zookeeper 的watch 通知worker 进入反压状态,最后spout 停止发送 tuple。 Spark Streaming:设置属性"spark.streaming.bachpressure.enabled" 进行自动反压,即动态控制数据接收速率来适配集群 数据处理能力。 Flink:不需要设置,自动处理反压,即每个组件都有对应的分布式阻塞队列

Flink之KafkaConnector

柔情痞子 提交于 2020-02-08 18:33:54
1.1 Kafka背景 最初由Linkedin 开发的分布式消息中间件现已成为Apache顶级项目 Broker:Kafka中指部署了Kafka实例的服务器节点 Topic:用来区分不同类型信息的主题 Partition:每个topic可以有一个或多个partition(分区)。分区是在物理层面上的,不同的分区对应着不同的数据文件。Kafka使用分区支持物理上的并发写入和读取,从而大大提高了吞吐量 Record:实际写入Kafka中并可以被读取的消息记录。每个record包含了key、value和timestamp Producer:生产者,用来向Kafka中发送数据(record) Consumer:消费者,用来读取Kafka中的数据(record) Offset( 生产offset,消费offset,offset lag):offset lag是kafka消费数据和生产数据的距离偏移量,在0.8版本的时候记录在zk里面,0.9开始用特定的topic来记录 Consumer Group:为了区分不同消费者消费数据的偏移量,提出了消费者组概念,相同消费组会改变相同的偏移量 1.2 引入依赖 Flink读取kafka数据需要通过maven引入依赖: <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink

《从0到1学习Flink》—— Apache Flink 介绍

本秂侑毒 提交于 2020-02-08 01:54:01
前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topic 里面实时读取到监控数据,并将读取到的监控数据做一些 聚合/转换/计算 等操作,然后将计算后的结果与告警规则的阈值进行比较,然后做出相应的告警措施(钉钉群、邮件、短信、电话等)。画了个简单的图如下: 目前告警这块的架构是这样的结构,刚进公司那会的时候,架构是所有的监控数据直接存在 ElasticSearch 中,然后我们告警是去 ElasticSearch 中搜索我们监控指标需要的数据,幸好 ElasticSearch 的搜索能力够强大。但是你有没有发现一个问题,就是所有的监控数据从采集、采集后的数据做一些 计算/转换/聚合、再通过 Kafka 消息队列、再存进 ElasticSearch 中,再而去 ElasticSearch 中查找我们的监控数据,然后做出告警策略。整个流程对监控来说看起来很按照常理,但是对于告警来说,如果中间某个环节出了问题,比如 Kafka 消息队列延迟、监控数据存到 ElasticSearch 中写入时间较长、你的查询姿势写的不对等原因,这都将导致告警从 ElasticSearch 查到的数据是有延迟的。也许是 30 秒、一分钟、或者更长

Flink窗口之滑动窗口scala版本

二次信任 提交于 2020-02-07 07:49:50
Flink窗口之滑动窗口scala版本 代码 package windows import org . apache . flink . api . java . tuple . Tuple import org . apache . flink . streaming . api . scala . _ import org . apache . flink . streaming . api . windowing . time . Time import org . apache . flink . streaming . api . windowing . windows . TimeWindow /**滑动窗口*/ object SlidingWindows { def main ( args : Array [ String ] ) : Unit = { val env : StreamExecutionEnvironment = StreamExecutionEnvironment . getExecutionEnvironment val line : DataStream [ String ] = env . socketTextStream ( "t1" , 9999 ) val flatMaped : DataStream [ String ] = line

flink table 使用Kafka Connector处理嵌套json

依然范特西╮ 提交于 2020-02-06 10:52:52
使用flink table api 连接kafka 处理json类型数据,单层json处理比较简单,官方或网上都有很多例子,处理嵌套的json数据没什么介绍。处理嵌套json数据主要是schema定义。 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); EnvironmentSettings bsSettings = EnvironmentSettings.newInstance().useBlinkPlanner().inStreamingMode().build(); StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env,bsSettings); tableEnv.connect(new Kafka() .version("universal") .topic("w001") .property("zookeeper.connect", "192.168.0.160:3181") .property("bootstrap.servers", "192.168.0.160:9092,192.168.0.161:9092,192.168.0.162:9092")

01-Flink运行架构

江枫思渺然 提交于 2020-02-05 22:42:25
1.flink运行时的组件 ​ Flink 运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作: 作业管理器(JobManager)、资源管理器(ResourceManager)、任务管理器(TaskManager), 以及分发器(Dispatcher)。因为 Flink 是用 Java 和 Scala 实现的,所以所有组件都会运行在 Java 虚拟机上。每个组件的职责如下: 1.1作业管理器(jobmanager) 控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager 所控制执行。 JobManager 会先接收到要执行的应用程序, 这个应用程序会包括:作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有的类、库和其它资源的 JAR 包(也就是我们所说的job作业提交)。 jobManager 会把 JobGraph 转换成一个物理层面的数据流图,这个图被叫做“执行图”(ExecutionGraph),包含了所有可以并发执行的任务。 JobManager 会向资源管理器(ResourceManager)请求执行任务必要的资源,也就是任务管理器(TaskManager)上的插槽( slot)。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的TaskManager 上

Apache Flink - 常见数据流类型

徘徊边缘 提交于 2020-02-04 22:38:59
DataStream: DataStream 是 Flink 流处理 API 中最核心的数据结构。它代表了一个运行在多个分区上的并行流。一个 DataStream 可以从 StreamExecutionEnvironment 通过 env.addSource(SourceFunction) 获得。 DataStream 上的转换操作都是逐条的,比如 map() , flatMap() , filter() 。DataStream 也可以执行 rebalance (再平衡,用来减轻数据倾斜)和 broadcaseted (广播)等分区转换。 如上图的执行图所示,DataStream 各个算子会并行运行,算子之间是数据流分区。如 Source 的第一个并行实例(S1)和 flatMap() 的第一个并行实例(m1)之间就是一个数据流分区。而在 flatMap() 和 map() 之间由于加了 rebalance(),它们之间的数据流分区就有3个子分区(m1的数据流向3个map()实例)。 KeyedStream: KeyedStream 用来表示根据指定的key进行分组的数据流。 KeyedStream 可以通过调用 DataStream.keyBy() 来获得。而在 KeyedStream 上进行任何transformation都将转变回 DataStream 。在实现中,