Flink基础教程(简约笔记)

2019-07-14  本文已影响0人  gregocean

第一章 为何选择Flink

第二章 流处理架构

image.png
  1. 消息传输层(Kafka或者MapR Streams)
  1. 流处理层

第三章 Flink用途

  1. 计算用户连续访问时长(解决了刚工作时遇到的一个痛点——用python脚本分析用户在JZB_App上的访问时长。当时问题很多,除了数据处理的缓慢,内存消耗,如何定义连续访问都很麻烦,没法确定哪种是最好的,否则就要每个定义都计算一份数据)
  1. Flink优势——能够区分这两类时间
  1. 故障后保持准确

第四章 对时间的处理

批处理

定期运行批处理作业,实现应用持续性。数据被持续地分割为文件(比如每小时一单位),作业以文件作为输入

流处理

柱状为kafka.png

流处理中的批处理

时间

时间窗口

支持滚动和滑动


滚动.png
stream.timeWindow(Time.minutes(1))
滑动.png
stream.timeWindow(Time.minutes(1), Time.seconds(30))

计数窗口

采用计数窗口时,分组依据不再是时间戳,而是元素的数量。滚动和滑动的计数窗口分别定义如下。

stream.countWindow(4)
stream.countWindow(4, 2)

假设计数窗口定义的元素数量为 100,而某个 key 对应的元素永远达不到 100 个,那么窗口就永远不会关闭,被该窗口占用的内存也就浪费了。

会话窗口

可方便处理用户连续访问页面时长的问题(通过设定间隔时长)。

stream.window(SessionWindows.withGap(Time.minutes(5))

时空穿梭

image.png

很有用:调试或者重新处理数据。但需要流处理器支持事件时间,否则结果会不同(机器时间不同了)

水印

当计算基于事件时间时,如何判断所有的事件已到达?需要依靠由数据驱动的时钟而非系统时钟。
比如滚动窗口中,计算10:00:00-10:01:00的事件,因为时间戳就是数据,那如何判断是否存在某个10:00:59的元素还没到呢?

Flink 通过水印来推进事件时间。水印是嵌在流中的常规记录,计算程序通过水印获知某个时间点已到。水印使事件时间与处理时间完全无关。

水印由应用程序开发人员生成,需要领域知识。启发式水印可能出错。

第五章 有状态的计算

image.png

一致性

流处理一致性三个级别(对于故障发生后的恢复能力):

检查点

上一篇下一篇

猜你喜欢

热点阅读