前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >再谈流计算的基本概念

再谈流计算的基本概念

作者头像
哒呵呵
发布2021-07-19 11:01:55
8050
发布2021-07-19 11:01:55
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

所谓流计算可以理解为对无界数据的计算。在一般意义上,我们处理的数据都是有边界条件的,比如某个时间段的累积,而无界数据在理论上是没有开始也没有结束的边界的。

从实际上来说,所有数据都是有始有终的,但是对于无界数据,推广到某个尽可能大的维度,我们是看不到它的终点的,也不知道它是如何开始的。

而流计算处理的数据就是无界数据,在大部分企业中,常用的批处理计算则是有界数据。常见的无界数据有正在使用的 App 客户端的用户使用日志,有界数据则多了,比如传输某个固定大小的文件。

数据既然是无界的,我们是等不到它结束的那天,对于实际的计算情况来说,是需要按照一定规则对无界数据进行切分,对每一个分块进行相应的处理。此时就需要按时间段进行切分,让无界数据变成有界数据。

那么按照什么时间呢?一般来说,可以按照数据实际产生的时间或者是数据实际到达流计算引擎的时间进行划分。第一种称为事件时间,第二种是处理时间。理论上来说事件时间应该和处理时间保持一致,实际上因为网络、软件错误、硬件故障等原因会导致处理时间往往大于事件时间。这里的不一致,也是流计算引擎相对于批处理引擎复杂的原因。

基于事件时间和处理时间的概念,我们可以采用两类不同的方式切分数据。

  • 按处理时间做时间窗口分片:流计算引擎本质上是把进来的数据进行缓存,达到一定的处理时间窗口再对缓存的数据进行处理。优点在于简单、容易判断完整性,但是无法准确地反映事件时间。
  • 按事件时间做时间窗口分片:把事件按照发生时的时间分进有限的块内,一般地理解就是会话,虽然一个用户的事件到达系统的时间不一致,但是依然会划分到一个窗口进行处理。这个的缺点在于依赖于缓存,并且确定一个窗口是否已经收集到所需的数据会是一个大问题。

选择了对数据的划分方式后,我们需要对数据进行处理。鉴于事件时间和处理时间的不一致,我们需要引入水印的概念,去解决迟到数据的问题。当事件时间超过某一个临界值,便不再等到这个数据到来,而是认为这个时间段的数据已经齐备了,可以进入到计算阶段了。这个临界值就是水印。

当然,如果这个数据有依赖于外界条件或者是数据本身某些特殊性质的话,还需要等待某个触发条件去触发计算。等待流计算引擎计算完成后,便可以将结果输出。结果的输出可以选择累加,也可以覆盖原有数据,当然你也可以放弃这个数据。

在这个模型框架内,批计算便成了某种特例,它只是固定的根据处理时间划分窗口,无水印,某个时间到了便触发计算的流计算。

这个模型有一个官方名称叫做 Dataflow 模型,Structure Streaming 和 Flink 便是根据这个模型进行设计的。换句话说,这也是常见的流批一体概念。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档