当前位置: 首页 > news >正文

Flink 成长之路专栏 - 导读目录

目录

一.简介

二.Flink API 详解

三.Flink 常用 Demo 案例

四.Flink 线上开发异常解决与分析

五.心路历程


一.简介

Flink 成长之路是博主在接触并开发公司 Flink 线上项目后,从 API + 实战角度按顺序总结的专栏,Flink 版本适配 1.13.x、Scala 版本适配 2.11.x、2.12.x,其中大部分章节和 Demo 主要基于 Flink + Scala 的组合实现,少部分章节内容也涉及到 Java 的开发,其中很多内容都是在千万级别用户、十亿级别流量场景实战总结而来。 主要分为3个部分:

- Flink API 详解

- Flink 常用 Demo 案例

- Flink 线上开发异常解决与分析

后续也会继续基于开发场景总结更新这三部分内容 ...



二.Flink API 详解

基于官方 API 翻译并扩展,增加使用 Demo。

适用文章关键字
Scala1.Flink 入门 DemoSink、WindowFunction
Scala2.Flink DataSet 生成 DataSourceDataSet、readFile
Scala3.Flink DataStream 生成 DataSourceDataStream、addSource
Scala4.DataSet 常用 Transform 函数DataSet、transform
Scala5.DataStream 常用 Transform 函数DataStream、transform
Scala6.WatermarkStrategy 与 EventTimeWaterMark、EventTime
Scala7.DataSet 与 DataStream Sink 输出数据Sink、AddSink
Scala8.DataSet 应用 Broadcast VariablesDataSet、Broadcast
Scala9.DataStream Broadcast State 示例详解DataStream、Broadcast
Scala10.TimeWindow And TimeWindowAll 详解TimeWindow、TimeWindowall
Scala / Java11.Window Trigger 简介与使用Window、Trigger
Scala12.CountTrigger && ProcessingTimeTrigerCount、ProcsssTime Trigger
Scala13.CountAndProcessTimeTrigger 实现Count + ProcessTime Trigger
Scala / Java14.Flink 内存模型详解Flink Memory
Scala15.最新 StateBackend 状态后端详解StateBackend
Scala16.有状态算子和应用Demo详解ValueState
Scala17.Metrics 使用与详解Metrics

三.Flink 常用 Demo 案例

线上开发以及基础项目实现 Demo 与调优。

适用文章关键字
Scala1.使用 CountWindow 实现按条数触发窗口CountWindow、WindowFunction
Scala2.使用 RedisSink 存储数据RedisSink、Jedis
Scala / Java3.Flink 读取 Parquet 文件readFile、parquet、schema
Scala4.BroadCast 数据先到再处理 Source 数据Broadcast、ValueState
Scala5.ProcessFunction 之间共用缓存测试ProcessFunction、Cache
Scala6.Jedis、JedisPool 作为 Source 读取数据Jedis、Source
Scala / Java7.大规模状态 ValueState IO 实践与优化ValueState、Statebackend、IO
Scala8.Timer 与 TimerService 源码分析与详解TimerService、OnTimer
Scala9.Kafka 下发消息过大分析Kafka、Record
Scala10.ProcessFunction 使用缓存详解ProcessFunction、Cache
Scala11.大规模状态 ValueState 内存实践与优化ValueState、Statebackend、内存
Scala12.Aggregate 详解与 UV、PV 统计实战Aggregate、UV、PV
Scala13.TimeWindow 处理迟到数据详解TimeWindow、LateData
Scala14.AllWindow & KeyedProcess 处理 TopKAllWindow、KeyedProcess、TopK
Scala15.Stream 基本合流操作 - Union & ConnectStream、Union、Connect
Scala16.Stream 基于时间合流Join、CoGroup、IntervalJoin

四.Flink 线上开发异常解决与分析

本地测试与线上运行遇到的异常与分析排查解决。

适用文章关键字
Scala1.新增 BroadcastStream 无 watermarkBroadcastValue、WaterMark
Scala2.non serializable fields 无法序列化问题Object、Serializable
Scala3.InternalError: Malformed class nameMalformed、Case Class
Scala4.util.RetryCounter.sleepUntilNextRetryHbase、backpressure
Scala5.Failed to start Queryable State Data ServerLocal、Linux
Scala6.FixedDelayRestartBackoffTimeStrategyRecover、Restart Strategy
Scala7.Java8ClosureRegistrar.areOnJava8()ZNoSuchMethod、arOnJava8()Z
Scala8.NumberFormatException: Not a version: 9NumberFormat、LocalCache
Scala9.The heartbeat of TaskManager Timed OutTM、Headtbeat、Timed Out
Scala10.Not all required task are currently runningCheckpoint、Running

五.心路历程

想着 20 年第一次接手离职同事的 Flink 项目,当时是还是用 Flink 1.8 + Java 开发,不断学习了一年多,22年正好有新的项目需求和 Flink 十分匹配,也借此机会把  Flink 的一些基础知识相对系统的过了一遍,由于自己开发 Scala 居多,所以还需要把 java 相关语言都转换到 Scala,同时新项目大概从 3 月迭代到 9月,期间也是不断增加需求,不断线上出错最终也是不断踩坑不断调整,终于达到了现在高并发高可用的状态。通过不断更迭项目也对 Flink 有了新的认识,再重新回看很多当年觉得晦涩难懂的概念,有一种恍然大悟的感觉。最明显的就是对 WaterMark 水位线的理解,记得最早接触这个概念在 CSDN 搜了一篇大佬的博客,看了好几遍也没明白所以然,好在后来没有放弃,看书看博客写代码测试,总算是搞明白一点。 不管怎样,坚持一定会有收获,加油吧 !💪

相关文章:

  • 软考高级系统架构设计师系列论文五十:论SOA在企业集成架构设计中的应用
  • spring boot企业网站设计与实现毕业设计源码211750
  • springboot基于JavaWeb的疫苗接种管理系统-JAVA.JSP【数据库设计、毕业设计、源码、开题报告】
  • vue组件间传值的六种方法
  • 2022牛客杭电多校dp题汇总
  • 记一次内网靶场渗透测试
  • 案例分析重点知识 变更文档配置收尾
  • Tomcat基本使用以及项目部署。
  • 编译redis5.0.4报错/usr/bin/ld: cannot find -latomic
  • 项目 - AES对称加密算法加密和解密设备联动码
  • ROS2在ROS1 的基础的改进点
  • “对症下药”很重要——u盘数据恢复的四种方法
  • 【漏洞复现-thinkphp-代码执行】vulfocus/thinkphp-cve_2018_1002015
  • 文本生成图像工作简述--概念介绍和技术梳理
  • 计算机网络——网络安全
  • 收藏网友的 源程序下载网
  • .pyc 想到的一些问题
  • 2017-09-12 前端日报
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6 ...操作符
  • ES6--对象的扩展
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Java|序列化异常StreamCorruptedException的解决方法
  • java8 Stream Pipelines 浅析
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Phpstorm怎样批量删除空行?
  • REST架构的思考
  • Spring Cloud中负载均衡器概览
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开发基于以太坊智能合约的DApp
  • 数据可视化之 Sankey 桑基图的实现
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • HanLP分词命名实体提取详解
  • ​用户画像从0到100的构建思路
  • #etcd#安装时出错
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (1)STL算法之遍历容器
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (4) PIVOT 和 UPIVOT 的使用
  • (done) 两个矩阵 “相似” 是什么意思?
  • (JS基础)String 类型
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (三分钟)速览传统边缘检测算子
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET6实现破解Modbus poll点表配置文件
  • .NetCore实践篇:分布式监控Zipkin持久化之殇