本文是关于如何在实时分析中使用云原生应用程序对股票数据进行连续 SQL 操作的教程。
线上flink任务稳定运行了两个多月了,突然之间收到了消息堆积较多的报警,kafka上看到的现象是消息堆积较多。问过业务人员得知,对应的流表在前一天重新刷了一遍数据,在我们的这个任务中有两次维表关联,而且内层有一个split操作会造成外层维表关联的数据量膨胀(最大可能为80倍,即split之后产生了80条新记录)。开始了问题分析之路。
本文从以下五个小节介绍 flink sql source\sink\format 的概念、原理。
最进再看官方flink提供的视频教程,发现入门版本因为时间关系都是基于1.7.x讲解的. 在实际操作中跟1.12.x版本还是有差距的, 所以整理一下从1.7 版本到1.12版本之间的相对大的变动. 做到在学习的过程中可以做到心里有数.
面试题总结是一个长期工作,面试不停,这份面试题总结就不会停。以后会慢慢把Java相关的面试题、计算机网络等都加进来,其实这不仅仅是一份面试题,更是一份面试参考,让你熟悉面试题各种提问情况,当然,项目部分,就只能看自己了,毕竟每个人简历、实习、项目等都不一样。
AI前线导读:本文是 **Apache Beam实战指南系列文章** 的第二篇内容,将重点介绍 Apache Beam与Flink的关系,对Beam框架中的KafkaIO和Flink源码进行剖析,并结合应用示例和代码解读带你进一步了解如何结合Beam玩转Kafka和Flink。系列文章第一篇回顾Apache Beam实战指南之基础入门
本文是《Flink的DataSource三部曲》的终篇,前面都是在学习Flink已有的数据源功能,但如果这些不能满足需要,就要自定义数据源(例如从数据库获取数据),也就是今天实战的内容,如下图红框所示:
本篇介绍一个特殊的JOIN,那就是JOIN LATERAL。JOIN LATERAL为什么特殊呢,直观说因为JOIN的右边不是一个实际的物理表,而是一个VIEW或者Table-valued Funciton。如下图所示:
基于 Hive 的离线数仓往往是企业大数据生产系统中不可缺少的一环。Hive 数仓有很高的成熟度和稳定性,但由于它是离线的,延时很大。在一些对延时要求比较高的场景,需要另外搭建基于 Flink 的实时数仓,将链路延时降低到秒级。但是一套离线数仓加一套实时数仓的架构会带来超过两倍的资源消耗,甚至导致重复开发。
Apache Flink 提供了两种关系型 API 用于统一流和批处理,Table 和 SQL API。
ProcessFunction 是flink 提供面向用户low-level 层级的api,通过ProcessFunction可以访问state、注册处理时间/事件时间定时器来帮助我们完成一些比较复杂的操作,但是其有一个限制那就是只用使用在keyedStream中,是由于根据getRuntimeContext 得到的StreamingRuntimeContext 只提供了KeyedStateStore的访问权限,所以只能访问keyd state, 另外根据前面的分析可知,注册的定时器必须是与key相关,也就解释了在ProcessFunction中只能在keyedStream做定时器注册。目前在flink中,提供了ProcessFunction与KeyedProcessFunction 这两个面向用户的api,但是ProcessFunction却无法帮助我们注册定时器,透过源码(ProcessOperator)可以发现,注册时会主动抛出UnsupportedOperationException异常。今天重点在于分析KeyedProcessFunction 是如何完成定时功能。
在前面Fayson介绍了《0876-7.1.7-如何在CDP中部署Flink1.14》,同时Flink也提供了SQL Client的能力,可以通过一种简单的方式来编写、调试和提交程序到Flink集群,而无需编写一行Java或Scala代码。本篇文章主要介绍如何在CDP集群中使用Flink SQL Client与Hive集成。Flink与Hive的集成,主要有如下两个目的:
作者介绍:董亭亭,快手大数据架构实时计算引擎团队负责人。目前负责 Flink 引擎在快手内的研发、应用以及周边子系统建设。2013 年毕业于大连理工大学,曾就职于奇虎 360、58 集团。主要研究领域包括:分布式计算、调度系统、分布式存储等系统。
线程模型能帮助我们更深刻的理解Flink任务执行原理,更精确的控制Flink程序,这些是使用Flink解决复杂问题、写出高性能和高可用程序的基础。
本文是《Flink的sink实战》系列的第三篇,主要内容是体验Flink官方的cassandra connector,整个实战如下图所示,我们先从kafka获取字符串,再执行wordcount操作,然后将结果同时打印和写入cassandra:
导读:Flink从1.9.0开始提供与Hive集成的功能,随着几个版本的迭代,在最新的Flink 1.11中,与Hive集成的功能进一步深化,并且开始尝试将流计算场景与Hive进行整合。本文主要分享在Flink 1.11中对接Hive的新特性,以及如何利用Flink对Hive数仓进行实时化改造,从而实现批流一体的目标。主要内容包括:
Flink Forward,给了我一个绝佳的机会,向全球 Apache Flink 社区介绍微博如何使用 Apache Flink 在我们的平台上运行实时数据处理和机器学习。在以下各节中,我将向您介绍微博,并将描述我们的机器学习平台的体系结构以及我们如何使用Apache Flink开发实时机器学习管道。最后,我将解释我们如何计划在微博上扩展 Flink 的用途,并简要了解我们在组织中使用开源技术的经验。
本系列主题是大数据开发面试指南,旨在为大家提供一个大数据学习的基本路线,完善数据开发的技术栈,以及我们面试一个大数据开发岗位的时候,哪些东西是重点考察的,这些公司更希望面试者具备哪些技能。
摘要:本文总结了 Dinky 社区在 Doris Summit 2022 上分享的《Dinky 在Doris实时整库同步和模式演变的探索实践》,其分享主要分为四个章节,内容包括:
在定义数据处理管道时,Table API 和 DataStream API 同样重要。
摘要:本文由社区志愿者陈政羽整理,内容来源自阿里巴巴高级开发工程师徐榜江 (雪尽) 7 月 10 日在北京站 Flink Meetup 分享的《详解 Flink-CDC》。深入讲解了最新发布的 Flink CDC 2.0.0 版本带来的核心特性,包括:全量数据的并发读取、checkpoint、无锁读取等重大改进。
本文摘编于《Flink SQL 与 DataStream 入门、进阶与实战》,作者羊艺超,经出版方授权发布,转载请标明文章出处。
大家好,我是老羊,今天我们来学习 Flink SQL 中的 TopN、Order By、Limit 3个操作。
问题导读 1.Flink1.8引入对什么状态的连续清理? 2.保存点兼容性方面,不在兼容哪个版本? 3.Maven依赖在Hadoop方便发生了什么变化? 4.Flink是否发布带有Hadoop的二进制文件? Flink1.8发布,主要改变如下: 1.将会增量清除旧的State 2.编程方面TableEnvironment弃用 3.Flink1.8将不发布带有Hadoop的二进制安装包 更多详细如下:
1.Flink1.8.0引入对状态的清理? 2.保存点兼容性方面,不在兼容哪个版本? 3.Maven依赖在Hadoop方便发生了什么变化? 4.Flink是否发布带有Hadoop的二进制文件?
本文来自9月1日在成都举行的Apache Flink China Meetup,分享来自于云邪。
https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/connectors/index.html
Flink 是流批一体计算框架,早些年主要用于流计算场景。近些年随着流批一体概念的推广,越来越多的企业开始使用 Flink 处理批业务。
本文是《Flink的DataSource三部曲》系列的第二篇,上一篇《Flink的DataSource三部曲之一:直接API》学习了StreamExecutionEnvironment的API创建DataSource,今天要练习的是Flink内置的connector,即下图的红框位置,这些connector可以通过StreamExecutionEnvironment的addSource方法使用:
最初,BIGO 的消息流平台主要采用开源 Kafka 作为数据支撑。随着数据规模日益增长,产品不断迭代,BIGO 消息流平台承载的数据规模出现了成倍增长,下游的在线模型训练、在线推荐、实时数据分析、实时数仓等业务对消息流平台的实时性和稳定性提出了更高的要求。开源的 Kafka 集群难以支撑海量数据处理场景,我们需要投入更多的人力去维护多个 Kafka 集群,这样成本会越来越高,主要体现在以下几个方面:
最近flink真是风生水起,但是浪院长看来这不过是阿里错过了创造spark影响力之后,想要在flink领域创建绝对的影响力。但是,不可否认flink在实时领域确实目前来看独树一帜,当然也有它不适合的地方,比如今天要推荐的第一个基于flink开发的项目,流表和维表的join,还有很多地方还是用spark streaming更合适,但是整体的流处理而言flink确实很优秀,虽然目前测出了一些bug,后面会发文说明一下flink开发时候常见的坑和已有的自身bug。接下来转入正题。
自定义Flink Source,案例分别实现了继承于SourceFunction的四个案例,三个完全自定义的Source, 另外一个Source为常见的MySQL,通过这几个案例,启发我们进行实际案例的Source研发
CDC(Change Data Capture)从广义上讲所有能够捕获变更数据的技术都可以称为CDC,但本篇文章中对CDC的定义限定为以非侵入的方式实时捕获数据库的变更数据。例如:通过解析MySQL数据库的Binlog日志捕获变更数据,而不是通过SQL Query源表捕获变更数据。Hudi 作为最热的数据湖技术框架之一, 用于构建具有增量数据处理管道的流式数据湖。其核心的能力包括对象存储上数据行级别的快速更新和删除,增量查询(Incremental queries,Time Travel),小文件管理和查询优化(Clustering,Compactions,Built-in metadata),ACID和并发写支持。Hudi不是一个Server,它本身不存储数据,也不是计算引擎,不提供计算能力。其数据存储在S3(也支持其它对象存储和HDFS),Hudi来决定数据以什么格式存储在S3(Parquet,Avro,…), 什么方式组织数据能让实时摄入的同时支持更新,删除,ACID等特性。Hudi通过Spark,Flink计算引擎提供数据写入, 计算能力,同时也提供与OLAP引擎集成的能力,使OLAP引擎能够查询Hudi表。从使用上看Hudi就是一个JAR包,启动Spark, Flink作业的时候带上这个JAR包即可。Amazon EMR 上的Spark,Flink,Presto ,Trino原生集成Hudi, 且EMR的Runtime在Spark,Presto引擎上相比开源有2倍以上的性能提升。在多库多表的场景下(比如:百级别库表),当我们需要将数据库(mysql,postgres,sqlserver,oracle,mongodb等)中的数据通过CDC的方式以分钟级别(1minute+)延迟写入Hudi,并以增量查询的方式构建数仓层次,对数据进行实时高效的查询分析时。我们要解决三个问题,第一,如何使用统一的代码完成百级别库表CDC数据并行写入Hudi,降低开发维护成本。第二,源端Schema变更如何同步到Hudi表。第三,使用Hudi增量查询构建数仓层次比如ODS->DWD->DWS(各层均是Hudi表),DWS层的增量聚合如何实现。本篇文章推荐的方案是: 使用Flink CDC DataStream API(非SQL)先将CDC数据写入Kafka,而不是直接通过Flink SQL写入到Hudi表,主要原因如下,第一,在多库表且Schema不同的场景下,使用SQL的方式会在源端建立多个CDC同步线程,对源端造成压力,影响同步性能。第二,没有MSK做CDC数据上下游的解耦和数据缓冲层,下游的多端消费和数据回溯比较困难。CDC数据写入到MSK后,推荐使用Spark Structured Streaming DataFrame API或者Flink StatementSet 封装多库表的写入逻辑,但如果需要源端Schema变更自动同步到Hudi表,使用Spark Structured Streaming DataFrame API实现更为简单,使用Flink则需要基于HoodieFlinkStreamer做额外的开发。Hudi增量ETL在DWS层需要数据聚合的场景的下,可以通过Flink Streaming Read将Hudi作为一个无界流,通过Flink计算引擎完成数据实时聚合计算写入到Hudi表。
兄弟们,在 18w 字《Flink SQL 成神之路》之后,我的另一篇《Flink 对线面试官》申请出战!
下图就 word count 的 sum 所使用的StreamGroupedReduce类为例讲解了如何在代码中使用 keyed state:
Flink 1.5.0 是 1.x.y 系列的第六个主要版本。与往常一样,它兼容之前 1.x.y 版本中使用 @Public 注解标注过的 API。
作者 | 陈航 BIGO 于 2014 年成立,是一家高速发展的科技公司。基于强大的音视频处理技术、全球音视频实时传输技术、人工智能技术、CDN 技术,BIGO 推出了一系列音视频类社交及内容产品,包括 Bigo Live(直播)和 Likee(短视频)等,在全球已拥有近 1 亿用户,产品及服务已覆盖超过 150 个国家和地区。 1挑战 最初,BIGO 的消息流平台主要采用开源 Kafka 作为数据支撑。随着数据规模日益增长,产品不断迭代,BIGO 消息流平台承载的数据规模出现了成倍增长,下游的在线模型训练
Flink是一个开源流处理框架,注意它是一个处理计算框架,类似Spark框架,Flink在数据摄取方面非常准确,在保持状态的同时能轻松地从故障中恢复。
Flink内置了一些基本数据源和接收器,并且始终可用。该预定义的数据源包括文件,目录和插socket,并从集合和迭代器摄取数据。该预定义的数据接收器支持写入文件和标准输入输出及socket。
数栈是云原生—站式数据中台PaaS,我们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,也可以采集实时变化的数据,是全域、异构、批流一体的数据同步引擎。大家喜欢的话请给我们点个star!star!star!
Apache Hudi 0.9.0实验性地支持使用Spark SQL进行DDL/DML操作,朝着让所有用户(非工程师、分析师等)更容易访问和操作Hudi迈出了一大步。用户可以直接使用CREATE TABLE ... USING HUDI以及CREATE TABLE ... AS SELECT语法来在像Hive的catalogs中创建和管理表。用户然后可以使用INSERT,UPDATE, MERGE INTO以及DELETE sql语法来操纵数据。除此之外,INSERT OVERWRITE语句可用于覆盖表或分区中现有的批处理ETL管道中的现有数据。更多信息,点击SparkSQL选项卡查看我们的文档。请参阅RFC-25了解更多实现细节。
摘要:本文整理自阿里云开发工程师耿飙&阿里云开发工程师胡俊涛,在 FFA 实时风控专场的分享。本篇内容主要分为四个部分:
作者 | Uber 工程博客 翻译 | 王者 策划 | 蔡芳芳 Uber 的 Kafka 生态系统 Uber 拥有世界上最大的 Kafka 集群,每天处理数万亿条消息和几个 PB 的数据。如图 1 所示,Kafka 现在成了 Uber 技术栈的基石,我们基于这个基石构建了一个复杂的生态系统,为大量不同的工作流提供支持。其中包含了一个用于传递来自乘客和司机 App 事件数据的发布 / 订阅消息总线、为流式分析平台(如 Apache Samza、Apache Flink)提供支持、将数据库变更日志流到下游订阅
主要是当Flink开启Checkpoint的时候,会往Source端插入一条barrir,然后这个barrir随着数据流向一直流动,当流入到一个算子的时候,这个算子就开始制作checkpoint,制作的是从barrir来到之前的时候当前算子的状态,将状态写入状态后端当中。然后将barrir往下流动,当流动到keyby 或者shuffle算子的时候,例如当一个算子的数据,依赖于多个流的时候,这个时候会有barrir对齐,也就是当所有的barrir都来到这个算子的时候进行制作checkpoint,依次进行流动,当流动到sink算子的时候,并且sink算子也制作完成checkpoint会向jobmanager 报告 checkpoint n 制作完成。
2019 年是大数据实时计算领域最不平凡的一年,2019 年 1 月阿里巴巴 Blink (内部的 Flink 分支版本)开源,大数据领域一夜间从 Spark 独步天下走向了两强争霸的时代。Flink 因为其天然的流式计算特性以及强大的处理性能成为炙手可热的大数据处理框架。
Flink 里已经提供了一些绑定的 Connector,例如 kafka source 和 sink,Es sink 等。读写 kafka、es、rabbitMQ 时可以直接使用相应 connector 的 api 即可,虽然该部分是 Flink 项目源代码里的一部分,但是真正意义上不算作 Flink 引擎相关逻辑,并且该部分没有打包在二进制的发布包里面。所以在提交 Job 时候需要注意, job 代码 jar 包中一定要将相应的 connetor 相关类打包进去,否则在提交作业时就会失败,提示找不到相应的类,或初始化某些类异常。
SQL是开发人员与数据分析师必备的技能,Flink也提供了Sql方式编写任务,能够很大程度降低开发运维成本,这篇是flink join的终极篇SQL Join, 首先介绍sql join使用方式、然后介绍global join带来的状态存储成本及解决方式、最后从源码角度分析sql join实现。
Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务:
领取专属 10元无门槛券
手把手带您无忧上云