Apache Flink

Apache Flink 零基础入门(十八)Flink Table API&SQL

六眼飞鱼酱① 提交于 2019-12-05 23:15:54
什么是Flink关系型API? 虽然Flink已经支持了DataSet和DataStream API,但是有没有一种更好的方式去编程,而不用关心具体的API实现?不需要去了解Java和Scala的具体实现。 Flink provides three layered APIs. Each API offers a different trade-off between conciseness and expressiveness and targets different use cases. Flink提供了三层API,每一层API提供了一个在简洁性和表达力之间的权衡 。 最低层是一个有状态的事件驱动。在这一层进行开发是非常麻烦的。 虽然很多功能基于DataSet和DataStreamAPI是可以完成的,需要熟悉这两套API,而且必须要熟悉Java和Scala,这是有一定的难度的。一个框架如果在使用的过程中没法使用SQL来处理,那么这个框架就有很大的限制。虽然对于开发人员无所谓,但是对于用户来说却不显示。因此SQL是非常面向大众语言。 好比MapReduce使用Hive SQL,Spark使用Spark SQL,Flink使用Flink SQL。 虽然Flink支持批处理/流处理,那么如何做到API层面的统一? 这样Table和SQL应运而生。 这其实就是一个关系型API

聊聊flink Table的Joins

天大地大妈咪最大 提交于 2019-12-05 21:20:46
序 本文主要研究一下flink Table的Joins 实例 Inner Join Table left = tableEnv.fromDataSet(ds1, "a, b, c"); Table right = tableEnv.fromDataSet(ds2, "d, e, f"); Table result = left.join(right).where("a = d").select("a, b, e"); join方法即inner join Outer Join Table left = tableEnv.fromDataSet(ds1, "a, b, c"); Table right = tableEnv.fromDataSet(ds2, "d, e, f"); Table leftOuterResult = left.leftOuterJoin(right, "a = d").select("a, b, e"); Table rightOuterResult = left.rightOuterJoin(right, "a = d").select("a, b, e"); Table fullOuterResult = left.fullOuterJoin(right, "a = d").select("a, b, e"); outer

「漏洞预警」Apache Flink 任意 Jar 包上传导致远程代码执行漏洞复现

醉酒当歌 提交于 2019-12-05 16:38:18
漏洞描述 Apache Flink是一个用于分布式流和批处理数据的开放源码平台。Flink的核心是一个流数据流引擎,它为数据流上的分布式计算提供数据分发、通信和容错功能。Flink在流引擎之上构建批处理,覆盖本地迭代支持、托管内存和程序优化。近日有安全研究人员发现apache flink允许上传任意的jar包从而导致远程代码执行。 漏洞级别 高危 影响范围 Apache Flink <=1.9.1 漏洞复现 首先下载Apache Flink 1.9.1安装包并进行解压,之后进入bin文件夹内运行./start-cluster.sh启动环境,浏览器访问 http://ip:8081验证是否成功,如下图所示: 接着使用生成jar的木马文件并进行上传,如下图所示: 开启msf进行监听并点击提交,可看到成功返回一个shell。如下图所示: 修复建议 建议用户关注Apache Flink官网,及时获取该漏洞最新补丁。 临时解决建议 设置IP白名单只允许信任的IP访问控制台并添加访问认证。 漏洞检测方法 目前github已有相应公开的检测poc,如下图所示: 链接: https://github.com/LandGrey/flink-unauth-rce ​ 更多Flink相关博文欢迎关注实时流式计算 本文由博客一文多发平台 OpenWrite 发布! 来源: https://my

聊聊flink的JDBCAppendTableSink

一世执手 提交于 2019-12-05 14:39:48
序 本文主要研究一下flink的JDBCAppendTableSink 实例 JDBCAppendTableSink sink = JDBCAppendTableSink.builder() .setDrivername("org.apache.derby.jdbc.EmbeddedDriver") .setDBUrl("jdbc:derby:memory:ebookshop") .setQuery("INSERT INTO books (id) VALUES (?)") .setParameterTypes(INT_TYPE_INFO) .build(); tableEnv.registerTableSink( "jdbcOutputTable", // specify table schema new String[]{"id"}, new TypeInformation[]{Types.INT}, sink); Table table = ... table.insertInto("jdbcOutputTable"); 这里使用tableEnv.registerTableSink注册JDBCAppendTableSink,之后利用table.insertInto往该sink写数据 JDBCAppendTableSink flink-jdbc_2.11-1.7.0

聊聊flink的FsCheckpointStorage

混江龙づ霸主 提交于 2019-12-05 14:39:37
序 本文主要研究一下flink的FsCheckpointStorage CheckpointStorage flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointStorage.java /** * CheckpointStorage implements the durable storage of checkpoint data and metadata streams. * An individual checkpoint or savepoint is stored to a {@link CheckpointStorageLocation}, * created by this class. */ public interface CheckpointStorage { boolean supportsHighlyAvailableStorage(); boolean hasDefaultSavepointLocation(); CompletedCheckpointStorageLocation resolveCheckpoint(String externalPointer) throws IOException; CheckpointStorageLocation

聊聊flink的FsCheckpointStreamFactory

為{幸葍}努か 提交于 2019-12-05 14:39:25
序 本文主要研究一下flink的FsCheckpointStreamFactory CheckpointStreamFactory flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointStreamFactory.java /** * A factory for checkpoint output streams, which are used to persist data for checkpoints. * * <p>Stream factories can be created from the {@link CheckpointStorage} through * {@link CheckpointStorage#resolveCheckpointStorageLocation(long, CheckpointStorageLocationReference)}. */ public interface CheckpointStreamFactory { CheckpointStateOutputStream createCheckpointStateOutputStream(CheckpointedStateScope scope) throws

聊聊flink的OperatorStateBackend

做~自己de王妃 提交于 2019-12-05 14:39:07
序 本文主要研究一下flink的OperatorStateBackend OperatorStateBackend flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/OperatorStateBackend.java /** * Interface that combines both, the user facing {@link OperatorStateStore} interface and the system interface * {@link Snapshotable} * */ public interface OperatorStateBackend extends OperatorStateStore, Snapshotable<SnapshotResult<OperatorStateHandle>, Collection<OperatorStateHandle>>, Closeable, Disposable { @Override void dispose(); } OperatorStateBackend接口继承了OperatorStateStore、Snapshotable、Closeable、Disposable接口 OperatorStateStore

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

别等时光非礼了梦想. 提交于 2019-12-05 09:56:03
前言 再上一篇文章中 《从0到1学习Flink》—— Data Source 介绍 讲解了 Flink Data Source ,那么这里就来讲讲 Flink Data Sink 吧。 首先 Sink 的意思是: 大概可以猜到了吧!Data sink 有点把数据存储下来(落库)的意思。 如上图,Source 就是数据的来源,中间的 Compute 其实就是 Flink 干的事情,可以做一系列的操作,操作完后就把计算后的数据结果 Sink 到某个地方。(可以是 MySQL、ElasticSearch、Kafka、Cassandra 等)。这里我说下自己目前做告警这块就是把 Compute 计算后的结果 Sink 直接告警出来了(发送告警消息到钉钉群、邮件、短信等),这个 sink 的意思也不一定非得说成要把数据存储到某个地方去。其实官网用的 Connector 来形容要去的地方更合适,这个 Connector 可以有 MySQL、ElasticSearch、Kafka、Cassandra RabbitMQ 等。 Flink Data Sink 前面文章 《从0到1学习Flink》—— Data Source 介绍 介绍了 Flink Data Source 有哪些,这里也看看 Flink Data Sink 支持的有哪些。 看下源码有哪些呢? 可以看到有 Kafka

聊聊flink Table的select操作

倾然丶 夕夏残阳落幕 提交于 2019-12-05 09:55:49
序 本文主要研究一下flink Table的select操作 Table.select flink-table_2.11-1.7.0-sources.jar!/org/apache/flink/table/api/table.scala class Table( private[flink] val tableEnv: TableEnvironment, private[flink] val logicalPlan: LogicalNode) { //...... def select(fields: String): Table = { val fieldExprs = ExpressionParser.parseExpressionList(fields) //get the correct expression for AggFunctionCall val withResolvedAggFunctionCall = fieldExprs.map(replaceAggFunctionCall(_, tableEnv)) select(withResolvedAggFunctionCall: _*) } def replaceAggFunctionCall(field: Expression, tableEnv: TableEnvironment): Expression =

聊聊flink的EventTime

十年热恋 提交于 2019-12-05 09:55:37
序 本文主要研究一下flink的EventTime SourceFunction flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/functions/source/SourceFunction.java /** * Interface that source functions use to emit elements, and possibly watermarks. * * @param <T> The type of the elements produced by the source. */ @Public // Interface might be extended in the future with additional methods. interface SourceContext<T> { /** * Emits one element from the source, without attaching a timestamp. In most cases, * this is the default way of emitting elements. * * <p>The timestamp that the element will get