Learn Flink: Hands-On Training

本节是Flink的一个简单入门介绍,主要focus在四点:

  • continuous processing of streaming data
  • event time
  • stateful stream processing
  • state snapshots

1. Stream Processing

数据总是以流的形式产生的,但分析的时候我们可以选择处理有界的数据流,也可以选择处理无界的数据流。批处理是处理有界流的一种方式,在分析之前需要输入完整的数据集。而流处理的输入和处理过程是没有结束的。在Flink里,流数据从一个或多个数据源通过用户定义的operator, 流出到一个或多个sink。


通常一个transformation会对应一个operator,但有时一个transformation也需要多个operator共同完成。
parallel dataflows
flink里的程序一般都是分布式的并发的。在执行过程中,一个stream被分成多个stream partitions, 而一个operator会有一个或多个operator subtask, subtasks之间彼此独立,在不同的线程甚至是机器上运行。subtasks的数量就是一个operator的并发数量,一个程序里不同的operator有不同的并发数。

两个operator之间传输stream有两种方式:

  • one-to-one: source到map就是这种模式,流的分区和元素的顺序都会保持不变
  • redistributing: map到keyBy是这种模式,流会被重新分区,每个operator会根据transformation的逻辑把数据传输到对应的目标subtask上去。只有同一个partition中到同一个目标subtask中的数据会保持顺序一致。如都是来源于map[1]且都到keyBy[1]的数据顺序不会改变。

2. Timely Stream Processing

有时候我们会希望像处理当前的数据一样处理历史数据,或者希望按照数据产生的时间进行处理而不是事件到达程序的时间,这时候我们需要用到数据流中标记事件时间的时间戳。

3. Stateful Stream Processing

Flink是有状态的,这意味着Flink可以基于累计的状态值对一个事件进行不同的逻辑处理。而Flink里一个operator的subtask是并发独立地运行的,所以一个stateful operator的并发实例应该共享一个state的key-value store, 而每个实例可能还需要维护自己的特定key的state, 这些state存储在本地。

4. Fault Tolerance via State Snapshots

Flink通过state快照和stream重播来实现容错。需要记住整个application的state, 已经当前处理到stream的什么位置,以便回到特定点重新开始运行。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容