前言
本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见100个问题搞定大数据理论体系
正文
WHY
无界、无序、全球规模的数据集在日常业务中越来越常见(例如网络日志、移动使用统计和传感器网络)。
与此同时,这些数据集的消费者已经进化出复杂的要求,例如事件时间排序和按数据本身的特征进行窗口,此外,他们贪得无厌地渴望更快的答案。
与此同时,实用性要求人们永远无法在正确性、延迟和成本的所有维度上进行完全优化。
因此,数据处理从业者在如何调和这些看似相互竞争的命题之间的紧张关系方面陷入困境,这往往导致不同的实现和系统。
为了应对现代数据处理中的这些演变要求,有必要从根本上转变方法。
数据总是在不停的产生,我们不能视图放任无界的数据集源源不断的积累最终成为一个完整的但是利用却有限的信息池,我们应该总是在假设看不到所有数据的情况下该怎么办?
解决这个问题的唯一方法是通过原则抽象,允许从业者沿着利益轴心选择适当的权衡:正确性、延迟和成本。
DataFlow 模型因此而诞生。
WHAT
DataFlow 模型是系统内信息流交换的图表形式表示。
DataFlow 模型是一种能平衡准确性,延迟程度,处理成本的大规模无边界乱序数据处理实践方法。
DataFlow 模型也可以称为数据流图(DFD)。
HOW
核心原则
从数据类型角度,数据处理系统要处理的数据只有两种:
- 有边界数据
- 无边界数据
请参考我的这篇博客——批处理和流处理如何区分? 有边界数据和无边界数据如何区分?
为了统一数据处理类型,应该将有限数据集视为无限数据流的特例,因为永远不知道数据流何时终结,新的数据只会源源不断地来,源源不断地被处理,然后源源不断地修正老的数据处理结果,而不是像传统批处理系统需要等待一个批次的数据到达完整后才处理。
基于这样的原则而设计出的数据处理系统,既可以处理无限数据流,也可以处理有限数据集。
流程解决方案
基于上面提出的核心设计原则,从数据处理逻辑上提出了通用的数据处理流程,如下
流程阶段 | 解决方案 |
---|---|
要计算什么结果? | 转换 |
事件时间中它们在哪里被计算? | 窗口 |
处理中什么时候被具象化? | 触发器 |
先前的结果如何对后面的数据产生影响? | 增量处理 |
请参考我的博客结合 Apache Flink 来了解具体的实现步骤: