
Apache Flink 原理和实践
文章平均质量分 61
汇总自己在 NetEase 和 ByteDance 的经验,按照工作内容分为三部分:
1、flink 的实时指标开发,主要集中在电商
2、基于 flink 的实时数据平台
3、实时数据湖平台
wulei.cnvip
Now: ByteDance for ByteLake;
Before: NetEase for Arctic/Sloth;
展开
-
flink metric checkpoints 平台化
flink平台化中,需要根据flink自身提供的restful api来获取作业checkpoints列表展示,以及根据checkpoint进行启动前的存在性校验。restful api参考官网https://ci.apache.org/projects/flink/flink-docs-release-1.9/monitoring/metrics.html需要特别注意的是:1、...原创 2020-02-26 17:42:00 · 352 阅读 · 0 评论 -
flink源码笔记-待整理
入口类CliFrontendLinkedHashMap accessOrder default=false=insertion-orderSystem.setOut 重定向输出流getManiFest get main class-d detach模式, false 可以运行任务后无需再控制台保持连接JobID implement Comparable 内部实现compareT...原创 2020-03-13 11:25:00 · 232 阅读 · 0 评论 -
Flink 消费Kafka的有趣现象:固定时间、固定数量的堆积
今天和同事遇到一个非常有趣的问题,在Kafka监控页面上可以看到该topic的消息会堆积到10万条左右,然后再很快的消费完毕归为0,然后又开始堆积到10万条左右,时间间隔都是3分钟。第一反应,反压? 但是反压的也太整齐了吧。看了一眼代码,哈哈,CheckPoint的时间间隔是3分钟,而且是Exactly_Once的。 所以这3分钟的延迟是必须付出的代价了,算不上问题...原创 2020-03-31 19:08:00 · 1973 阅读 · 3 评论 -
Flink问题整理_wl
1、本地启动flink报错“Caused by: java.lang.NoClassDefFoundError:org/apache/flink/streaming/api/functions/source/SourceFunction”将flink-java和flink-streaming-java_${scala.binary.version}这两个依赖由provided改为compile...原创 2020-04-16 21:36:27 · 865 阅读 · 0 评论 -
flink监控prometheus/influxdb + grafana企业实战
本文档为实时计算相关的监控系统的整体说明,记录监控系统相关的部分细节。监控大盘如图:功能点对Flink集群(服务器)进行监控对源头数据源与目的数据源进行监控对指标作业进行监控告警方案对比当前市场上最为火热的时序数据库为influxdb与prometheus,可视化展示都为grafana。个人理解influxdb与prometheus的区别主要为:在大多数资料中提及对fli...原创 2020-04-17 09:16:04 · 1538 阅读 · 0 评论 -
记一次大数据读写的性能优化 iceberg
背景我司开发了一个非常牛的基础设施,产品的定位可以参考 Apache Hudi,也有一点 Apache Iceberg 的影子。我这边负责的实现主要是 Flink 的写入和 Spark 的读取,开发后就是最有意义的性能调优了~优化除去最基本的通过打印日志排查到底是哪个步骤执行时间较长不谈,着重讲一讲如何通过内存和CPU情况来定位性能问题。内存优化在数据写入阶段,观察 Flink 的 TM 进程,发现其有频繁的 FGC,使用 MAT 工具 dump 后发现并不存在大对象问题。操作步骤如下:// 查原创 2021-06-30 11:32:15 · 680 阅读 · 0 评论 -
Could not complete the pending checkpoint xx. Failure reason: Failure to finalize checkpoint
CheckpointException: Could not complete the pending checkpoint xx. Failure reason: Failure to finalize checkpoint原创 2022-09-15 12:30:22 · 841 阅读 · 1 评论 -
Flink 作业启动耗时统计
本次统计分为两行,第一行表示每个 TaskManager 含有 1 个 Slot,第二行表示每个 TaskManager 含有 5 个 Slot,分别统计在拉起不同 TM 数量的所需耗时,单位是秒。统计方法为当 flink 作业被提交到 Yarn 上为开始时间(startTime),当作业初始化完毕相应的 TaskManager 个数为结束时间(在 flink web ui 上可见为准,endTime),耗时 duration = endTime - startTime。通过表格可以发现,在 Flin原创 2021-01-18 14:12:17 · 1052 阅读 · 1 评论 -
Flink1.11 Application Mode Submit Job 通过 Java API 的方式提交作业到 Yarn (实时计算平台)
实时计算平台原创 2020-12-04 15:29:34 · 3572 阅读 · 6 评论 -
Flink-跟着问题读源码:CheckPoint超时问题总结
最近一段时间处理的业务数据量的增长和处理流程的复杂性,导致flink实时作业不仅仅局限于结果正确,更多的精力放在了性能优化上,接下来对近期CheckPoint时长优化进行总结。我们都知道checkpoint的重要性,整体过程如下:JobManager 向 Source 算子发送 Barrier ,初始化Checkpoint,即JM向Source发起Trigger操作;各个Source 算子一旦收到 Barrier 之后,开始Init自身的State,并同时向下游发送 Barrier;下游算子收到原创 2020-09-10 16:43:27 · 2523 阅读 · 6 评论 -
Flink-跟着问题读源码:近24小时或者近XX小时这种SlidingEventTimeWindows相关的问题
问题描述这周接到一个新需求,近24小时的用户行为标签偏好跑分,实现的算法逻辑非常复杂,需要对用户的各类行为分别统计并求出比例,再配合各种时间衰减因子、反作弊数据等等。下面针对这次的开发总结下自己的心得,主要是flink window和state方面。join维表之前预先聚合,否则CP失败近24小时的window可以拆分为5分钟维度onTimerwatermark的多次申明timestamp必须是毫秒否则数据无法输出,也不报错,并且过滤脏数据,Java中对数的使用,防止负数...原创 2020-08-21 15:28:27 · 995 阅读 · 0 评论 -
Flink-跟着问题读源码:提交作业时未返回yarn applicationId
问题描述在公司做flink实时计算平台时,需要将flink jar提交到yarn上后获取applicationId,以此来处理后续的状态控制。但是在升级flink1.9.0到flink1.10.1后,突然无法从日志中解析得到applicationId了。方案很有意思,最后验证表明,服务端日志和客户端日志可以采用两套日志体系,首先client代码我们公司都是使用logback的,于是,当1、Server端为logback时,即/lib下的包为logback-classic-1.2.3.jar、logb原创 2020-08-17 17:16:27 · 1176 阅读 · 0 评论 -
Flink-跟着问题读源码:ChangelogSocketExample源码示例无效
flink-examples-table模块的ChangelogSocketExample.java是一个很好的example * <p>In particular, the example shows how to * <ul> * <li>create factories that parse and validate options, * <li>implement table connectors, * <li&原创 2020-08-16 10:30:47 · 245 阅读 · 0 评论 -
FlinkKafkaProducer采用EXACTLY_ONCE异常
使用Flink提供的 FlinkKafkaProducer 写入kafka数据的时候,相同的代码相同的环境下,Semantic.AT_LEAST_ONCE 策略一切正常,但是当切换到 Semantic.EXACTLY_ONCE 时,flink作业异常如下:org.apache.kafka.common.KafkaException: Unexpected error in InitProducerIdResponse; The transaction timeout is larger than the原创 2020-08-12 11:06:52 · 3220 阅读 · 3 评论 -
Flink-历史(批/离线)数据冷启动总结
在做用户画像标签时,很多实时指标都需要追溯历史数据,如用户截止此刻的订单数,需要将用户有史以来的所有订单数进行统计,而实时数据一般只能回溯7天。这种情况下就需要先将离线数据预先加载到sink端,或者将数据保存到FlinkState中去。如果离线数据的计算结果在mysql中,那么可以使用类似维表的方式直接进行Stream操作加载离线写入State,实时作业以此restore理论上是可以的,但是按照我上面的写法,代价比较大,因为我的作业中有subtask会处于Finished状态,导致不会触发ch.原创 2020-07-28 16:03:07 · 3076 阅读 · 1 评论 -
flink 源码阅读-准备
fork flink源码到本地git clone git@github.com:apache/flink.git报错如下:Cloning into 'flink'...The authenticity of host 'github.com (13.229.188.59)' can't be established.RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.Are you sure you原创 2020-07-23 11:23:53 · 408 阅读 · 0 评论 -
Flink-跟着问题读源码:从Savapoint重启报错The new state serializer cannot be incompatible
flink相比于其他流计算引擎的一个非常大的优势在于它灵活可靠的状态管理机制,定时的快照可以保证实时计算的连续性与准确性,但是当后续的计算逻辑发生一定程序的变化时,并不能完全保证从原状态完整的恢复。文章主要分为三部分:问题复现及源码分析flink state ttl的设置和创建flink checkpoint在taskmanager中对state的快照1、问题概要商品热度值的flink实时计算作业的chekcpoint state size越来越大,于是计划对一个月内无任何分享、出价、收.原创 2020-07-17 14:11:04 · 2522 阅读 · 1 评论 -
Flink ROW_NUMBER()-排行榜和去重
flink官网链接:https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/sql/queries.html该flink sql的函数主要有两个功能,TOP-N和Deduplication,测试如下测试代码,并nc -lk 9999package com.wwdz.bigdata.flink.streaming.source;import org.apache.flink.api.common.functions原创 2020-07-03 11:57:06 · 4506 阅读 · 5 评论 -
flink问题记录
在flink上跑一个算法的离线指标,报错如下。Map (Map at com.wwdz.recsys.home.ItemFilterDay$.main(ItemFilterDay.scala:186)) -> Combine (GroupReduce at org.apache.flink.api.scala.GroupedDataSet.first(GroupedDataSet.scala:480)) (5/8) (96228117fa07e01079d3cba5f0dc742b) switche原创 2020-07-30 09:46:43 · 11315 阅读 · 7 评论