
flink
文章平均质量分 76
大数据开发工程师-宋权
攻城狮,嗷!!!!
展开
-
开源Flink迁移至实时计算Flink
Flink各类任务迁移。数据准确性校验。业务稳定性验证。Flink集群容量评估。原创 2022-10-11 10:42:13 · 1586 阅读 · 0 评论 -
实时计算Flink+Hologres
对于主键关联的场景(即 Join 条件分别是两条流的主键),我们可以将 Join 的工作下沉到 Hologres 去做,通过 Hologres 的局部更新功能来实现宽表 Merge,从而省去了 Flink Join 的状态维护成本。数据实时入仓形成了 ODS 层的数据后,通常需要将事实数据与维度数据利用 Flink 多流 Join 的能力实时地打平成宽表,结合 Hologres 宽表极佳的多维分析性能,助力上层业务查询提速。目前该方案已在阿里巴巴内部、众多云上企业生产落地,成为实时数仓的最佳解决方案之一。原创 2022-10-11 10:40:04 · 3069 阅读 · 0 评论 -
Flink CDC数据同步
一、什么是FLinkApache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。接下来,我们来介绍一下 Flink 架构中的重要方面。原创 2022-10-11 09:51:24 · 4717 阅读 · 1 评论 -
Flink SQL CDC实践以及一致性分析
在Flink 1.11引入了CDC机制,CDC的全称是Change Data Capture,用于捕捉数据库表的增删改查操作,是目前非常成熟的同步数据库变更方案。Flink CDC Connectors是Apache Flink的一组源连接器,是可以从MySQL、PostgreSQL数据直接读取全量数据和增量数据的Source Connectors,开源地址:https://github.com/ververica/flink-cdc-connectors。原创 2022-10-11 09:49:17 · 935 阅读 · 0 评论 -
Flink cdc技术实践
CDC 的实现方式主要有两种,分别是基于查询和基于日志:基于查询:查询后插入、更新到数据库即可,无须数据库的特殊配置以及账号权限。它的实时性基于查询频率决定,只能通过提高查询频率来保证实时性,而这必然会对 DB 造成巨大压力。此外,因为是基于查询,所以它无法捕获两次查询之间数据的变更记录,也就无法保证数据的一致性。基于日志:通过实时消费数据的变更日志实现,因此实时性很高。而且不会对 DB 造成很大的影响,也能够保证数据的一致性,因为数据库会将所有数据的变动记录在变更日志中。原创 2022-10-10 15:48:21 · 2371 阅读 · 0 评论 -
FlinkCDC入门
一.背景数据准实时复制(CDC)是目前行内实时数据需求大量使用的技术,随着国产化的需求,我们也逐步考虑基于开源产品进行准实时数据同步工具的相关开发,逐步实现对商业产品的替代。我们评估了几种开源产品,canal,debezium,flinkCDC等产品。作了如下的对比: 组件 Canal Debezium Flink 开源方 阿里 redhat ..原创 2022-05-09 18:24:58 · 2813 阅读 · 1 评论 -
flink数据源不稳定导致宕机问题
flink应用数据源不稳定导致程序宕机_zhou_zhao_xu的博客-优快云博客_flink不稳定错误异常日志org.apache.flink.runtime.JobException: Recovery is suppressed by NoRestartBackoffTimeStrategyat org.apache.flink.runtime.executiongraph.failover.flip1.ExecutionFailureHandler.handleFailure(ExecutionF原创 2022-04-11 11:52:33 · 1700 阅读 · 0 评论 -
flink Table API 与 SQL
Table API 是流处理和批处理通用的关系型 API,Table API 可以基于流输入或者 批输入来运行而不需要进行任何修改。Table API 是 SQL 语言的超集并专门为 Apache Flink 设计的,Table API 是 Scala 和 Java 语言集成式的 API。与常规 SQL 语言中将 查询指定为字符串不同,Table API 查询是以 Java 或 Scala 中的语言嵌入样式来定义 的,具有 IDE 支持如:自动完成和语法检测。 1 需要引入的 po原创 2021-11-17 17:20:20 · 867 阅读 · 0 评论 -
Flink+Kafka 如何实现端到端的 exactly-once 语义
我们知道,端到端的状态一致性的实现,需要每一个组件都实现,对于 Flink + Kafka 的数据管道系统(Kafka 进、Kafka 出)而言,各组件怎样保证 exactly-once 语义呢? ⚫ 内部 —— 利用 checkpoint 机制,把状态存盘,发生故障的时候可以恢复, 保证内部的状态一致性⚫ source —— kafka consumer 作为 source,可以将偏移量保存下来,如果后 续任务出现了故障,恢复的时候可以由连接器重置偏移量,重新消费数据, 保证原创 2021-11-17 17:09:39 · 216 阅读 · 0 评论 -
flink端到端状态一致性
目前我们看到的一致性保证都是由流处理器实现的,也就是说都是在 Flink 流 处理器内部保证的;而在真实应用中,流处理应用除了流处理器以外还包含了数据 源(例如 Kafka)和输出到持久化系统。 端到端的一致性保证,意味着结果的正确性贯穿了整个流处理应用的始终;每 一个组件都保证了它自己的一致性,整个端到端的一致性级别取决于所有组件中一 致性最弱的组件。具体可以划分如下: ⚫ 内部保证 —— 依赖 checkpoint ⚫ source 端 —— 需要外部源可重设数据的读取位置原创 2021-11-17 16:59:41 · 825 阅读 · 0 评论 -
flink 状态编程和容错机制
流式计算分为无状态和有状态两种情况。无状态的计算观察每个独立事件,并 根据最后一个事件输出结果。例如,流处理应用程序从传感器接收温度读数,并在 温度超过 90 度时发出警告。有状态的计算则会基于多个事件输出结果。以下是一些 例子。 ⚫ 所有类型的窗口。例如,计算过去一小时的平均温度,就是有状态的计算。 ⚫ 所有用于复杂事件处理的状态机。例如,若在一分钟内收到两个相差 20 度 以上的温度读数,则发出警告,这是有状态的计算。 ⚫ 流与流之间的所有关联操作,以及流与静态表或动态表之间原创 2021-11-09 10:28:30 · 153 阅读 · 0 评论 -
ProcessFunction API(底层 API)
我们之前学习的转换算子是无法访问事件的时间戳信息和水位线信息的。而这 在一些应用场景下,极为重要。例如 MapFunction 这样的 map 转换算子就无法访问 时间戳或者当前事件的事件时间。 基于此,DataStream API 提供了一系列的 Low-Level 转换算子。可以访问时间 戳、watermark 以及注册定时事件。还可以输出特定的一些事件,例如超时事件等。 Process Function 用来构建事件驱动的应用以及实现自定义的业务逻辑(使用之前的 window原创 2021-11-09 10:02:28 · 184 阅读 · 0 评论 -
flink在EvnetTime 在 window 中的使用
1 滚动窗口(TumblingEventTimeWindows)(Scala 版)结果是按照 Event Time 的时间窗口计算得出的,而无关系统的时间(包括输入 的快慢)2 滑动窗口(SlidingEventTimeWindows) 3 会话窗口(EventTimeSessionWindows) 相邻两次数据的 EventTime 的时间差超过指定的时间间隔就会触发执行。如果 加入 Watermark, 会在符合窗口触发的情况下进行延迟。到达...原创 2021-11-08 11:20:16 · 177 阅读 · 0 评论 -
flink 时间语义与 Wartermark
1 Flink 中的时间语义在 Flink 的流式处理中,会涉及到时间的不同概念,如下图所示: Event Time:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的 日志数据中,每一条日志都会记录自己的生成时间,Flink 通过时间戳分配器访问事 件时间戳。 Ingestion Time:是数据进入 Flink 的时间。Processing Time:是每一个执行基于时间操作的算子的本地系统时间,与机器 相关,默认的时间属性就是 Processi.原创 2021-11-08 11:12:10 · 213 阅读 · 0 评论 -
flink 中Window API
1 TimeWindowTimeWindow 是将指定时间范围内的所有数据组成一个 window,一次对一个 window 里面的所有数据进行计算。1. 滚动窗口 Flink 默认的时间窗口根据 Processing Time 进行窗口的划分,将 Flink 获取到的 数据根据进入 Flink 的时间划分到不同的窗口中。 时间间隔可以通过 Time.milliseconds(x),Time.seconds(x),Time.minutes(x)等其 中的一个来指定.原创 2021-11-08 10:23:06 · 1449 阅读 · 0 评论 -
Flink 中的 Window
1 Window 概述streaming 流式计算是一种被设计用于处理无限数据集的数据处理引擎,而无限 数据集是指一种不断增长的本质上无限的数据集,而 window 是一种切割无限数据为有限块进行处理的手段。 Window 是无限数据流处理的核心,Window 将一个无限的 stream 拆分成有限大 小的”buckets”桶,我们可以在这些桶上做计算操作。2 Window 类型 Window 可以分成两类: ➢ CountWindow:按照指定的数据条数生成一个原创 2021-11-08 10:09:37 · 147 阅读 · 0 评论 -
flink sink
Sink(对外输出)Flink 没有类似于 spark 中 foreach 方法,让用户进行迭代的操作。虽有对外的 输出操作都要利用 Sink 完成。最后通过类似如下方式完成整个任务最终输出操作。 stream.addSink(new MySink(xxxx)) 官方提供了一部分的框架的 sink。除此以外,需要用户自定义实现 sink。1 Kafkapom.xml 主函数中添加 sink:2 Redis 定义一个 redis ...原创 2021-11-03 11:26:59 · 326 阅读 · 0 评论 -
flink中UDF函数
1 函数类(Function Classes) Flink 暴露了所有 udf 函数的接口(实现方式为接口或者抽象类)。例如 MapFunction, FilterFunction, ProcessFunction 等等。下面例子实现了 FilterFunction 接口: 还可以将函数实现成匿名类我们 filter 的字符串"flink"还可以当作参数传进去。 2 匿名函数(Lambda Functions) 3 富函数(Rich Fu...原创 2021-11-03 11:17:06 · 2006 阅读 · 0 评论 -
flink支持数据类型
Flink 流应用程序处理的是以数据对象表示的事件流。所以在 Flink 内部,我们 需要能够处理这些对象。它们需要被序列化和反序列化,以便通过网络传送它们; 或者从状态后端、检查点和保存点读取它们。为了有效地做到这一点,Flink 需要明 确知道应用程序所处理的数据类型。Flink 使用类型信息的概念来表示数据类型,并 为每个数据类型生成特定的序列化器、反序列化器和比较器。 Flink 还具有一个类型提取系统,该系统分析函数的输入和返回类型,以自动获 取类型信息,从而获得序列化器和原创 2021-11-03 11:09:04 · 885 阅读 · 0 评论 -
flink 转换算子
Transform 转换算子 1 map2 flatMap 3 Filter 4 KeyBy5 滚动聚合算子(Rolling Aggregation)这些算子可以针对 KeyedStream 的每一个支流做聚合⚫ sum() ⚫ min() ⚫ max()⚫ minBy() ⚫ maxBy() 6 Reduce7 Split 和 Select SplitSelect ...原创 2021-11-03 10:58:02 · 614 阅读 · 0 评论 -
Flink 流处理 API
Flink 流处理 APIEnvironmentgetExecutionEnvironment创建一个执行环境,表示当前执行程序的上下文。 如果程序是独立调用的,则 此方法返回本地执行环境;如果从命令行客户端调用程序以提交到集群,则此方法 返回此集群的执行环境,也就是说,getExecutionEnvironment 会根据查询运行的方 式决定返回什么样的运行环境,是最常用的一种创建执行环境的方式。如果没有设置并行度,会以 flink-conf.yaml 中的配..原创 2021-11-03 10:41:56 · 190 阅读 · 0 评论 -
flink任务调度原理
任务调度原理客户端不是运行时和程序执行 的一部分,但它用于准备并发送 dataflow(JobGraph)给 Master(JobManager),然后,客户端断开连接或者维持连接以 等待接收计算结果。 当 Flink 集 群 启 动 后 , 首 先 会 启 动 一 个 JobManger 和一个或多个的 TaskManager。由 Client 提交任务给 JobManager,JobManager 再调度任务到各个 TaskManager 去执行,然后 TaskMa.原创 2021-10-28 14:11:41 · 442 阅读 · 0 评论 -
Flink 运行架构
Flink 运行时的组件 Flink 运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作: 作业管理器(JobManager)、资源管理器(ResourceManager)、任务管理器(TaskManager), 以及分发器(Dispatcher)。因为 Flink 是用 Java 和 Scala 实现的,所以所有组件都会运行在 Java 虚拟机上。每个组件的职责如下: ⚫ 作业管理器(JobManager)(市场专员)控制一个应用程序执行的主进程,也就是原创 2021-10-28 11:46:57 · 137 阅读 · 0 评论 -
Flink 部署
Standalone 模式 安装解压缩 flink-1.10.1-bin-scala_2.12.tgz,进入 conf 目录中。 1)修改 flink/conf/flink-conf.yaml 文件:2)修改 /conf/slaves 文件: 3)分发给另外两台机子: 4)启动:访问 http://localhost:8081 可以对 flink 集群和任务进行监控管理提交任务1) 准备数据文件(如果需要)2) 把含数...原创 2021-10-28 11:32:17 · 199 阅读 · 0 评论 -
flink入门
Flink 的重要特点 事件驱动型应用是一类具有状态的应用,它从一个或多个事件流提取数据,并 根据到来的事件触发计算、状态更新或其他外部动作。比较典型的就是以 kafka 为 代表的消息队列几乎都是事件驱动型应用。 与之不同的就是 SparkStreaming 微批次,如图:流与批的世界观批处理的特点是有界、持久、大量,非常适合需要访问全套记录才能完成的计 算工作,一般用于离线统计流处理的特点是无界、实时, 无需针对整个数据集执行操作,而是对通过系统 传输的.原创 2021-10-28 11:13:44 · 164 阅读 · 0 评论