Flink - Timer定时器
1. Timer
系统收到 1 条数据,计算,输出 0~N 条数据,这种 Event-driven 的方式是最简单和自然的。
但实际上,由于存在乱序、丟数,以及业务周期性更新的需求,计算还会依赖于时间触发,例如Dataflow Model的第三节 IMPLEMENTATION & DESIGN 的场景。
这些场景依赖于 Timer,Flink 的窗口也是基于 Timer 实现。
Timer 不是简单的时间触发回调,Process Function#Timers文档介绍了 Timers,主要有几点:
ProcessingTime 和 EventTime 都是由 TimerService 维护的,定时触发用户的 onTimer 方法
TimerService 会...
Flink - 窗口理论、实现
1. Theory - Dataflow Model
Dataflow Model这篇论文,对大数据的处理范式做了总结,并且提出了一套处理模型。
1.1. Window
数据转换操作,有两种:
ParDo: 1->N,例如 map/flatmap/filter 等,这类操作在 unbound 和 bound 数据集上没有区别
GroupByKey: 聚合操作在 bound 数据集很自然;在 unbound 数据集上,既然数据不会结束,就需要解决何时聚合的问题。
之前在批处理和流处理的思考这篇笔记里提到过,bound 数据集其实也是在 unbound 数据集的一个划分,通常情况是 1 天/小时的数据。而论文则用更抽象的角度,提出了 window 的概念,用于在u...
一个环境导致读取 Kakfa TimeoutException 的问题
最近遇到一个比较奇怪的现象:相同 Flink 任务,换个运行环境就会报读取 kafka 失败,但是排查环境跟 Kafka 源的连通性又没有问题。
今天简化代码验证,感觉值得总结一版。
1. TimeoutException
org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata
这个报错在读取 Kafka 时容易遇到,往往是 client 跟 bootstrap.server 的网络问题,或者 server 本身不可用导致。
但是从我的情况看,任务代码及配置是一致的,报错跟环境相关,唯一的疑点是任务 KafkaConsumer 配置的 boo...
批处理和流处理的思考
1.时间的边界
1.1. T+1
时间分两种,处理时间和事件时间。大部分情况,数据处理都会选择事件时间。
以离线的天级 Hive 表任务为例,我们看看是如何产出 T+1 的数据的。
T+1 00:00 是处理时间,假定 A 表 Tday 的数据在 00:05 完全到达,B 表 T-day 的数据在 01:05 完全到达。
数据完全到达后,开始 merge Tday 的增量数据,然后根据需要生成全量表或者拉链表。可能的时间轴:
00:05 -> 00:30: merge A 表 Tday 的增量数据,记录到 A-inc
00:30 -> 01:35: merge A-inc + A-base,记录到 A 表 Tday 分区
01:05 ->...
大数据和后端服务的思考
大数据和后端服务之间的差别,远比后端服务之间,比如推荐架构、搜索架构、直播架构等的差别要大。两者比较的文章似乎很少见。
但实际上,我在做后端服务的时候,也曾调研过能否使用大数据的组件,比如 Flink、Kafka。很多后端服务也会用到大数据的存储,比如 Hbase 来存储数据。
还记得刚从后端转到大数据开发时,对各种差别感到疑惑。如今做了几年大数据,有的疑惑逐渐解开,有的疑惑依旧看不清,有必要阶段性的总结一下。当然,工程师不应该限制自己是大数据、前端还是后端还是算法,但是试图理清区别和联系,能够让我们的视野看的更高。
1. 大数据的技术本质还是后端服务
以在大数据离线任务开发中,常见的 Apache DolphinScheduler 工作流调度系统为例。DolphinSched...
Flink - fabric8 的使用
Flink 使用 Fabric8 Kubernetes client1作为 Kubernetes 的客户端,本文结合 Flink 提交 JobManager、TaskManager 的代码介绍 Fabric8 的使用。
1. Flink 使用 Fabric8 相关源码
Fabric8 是一个 Java 的 Kubernetes 客户端,使用一套自定义的 DSL 跟 REST API 交互。
我们可以使用链式调用方式访问和操作集群资源,例如:
ListOptions options = new ListOptions();
options.setLabelSelector("type=flink-native-kubernetes"...
264 post articles, 22 pages.