首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Streaming Systems》第五章-精确一次处理

《Streaming Systems》第五章-精确一次处理

作者头像
哒呵呵
发布2019-04-26 14:24:26
1.1K0
发布2019-04-26 14:24:26
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

今天的文章简单提下所谓的流计算中精确一次处理的实现。所谓精确一次处理是相对于至少一次和至多一次处理而言的,由系统保证在整个处理过程中所有数据有且仅被处理一次。

在Dataflow模型诞生以前的大多数流处理系统中只会提供至少一次和至多一次的选项。精确一次处理是一种比较理想化的情况,因为要保证精确一次处理需要从源数据侧、系统处理的shuffle过程和输出侧同时保证数据的唯一性。而Dataflow模型也承认保证实现精确一次处理是需要很多条件,例如完整性和精确性的矛盾(迟到的数据是过时丢弃导致精确性不能保证,还是一直等待导致数据累积系统崩溃或者是延迟),开发者代码充满副作用(代码里需要与外部系统交互,外部系统不能保证无论重试多少次结果都一样)。

由于源数据侧和输出侧的不可控,如今的流处理系统都着眼于系统处理本身的shuffle过程数据有且仅被处理一次,例如Spark使用RDD、Flink使用全局快照和checkpoint、Cloud Dataflow赋予数据在系统内唯一ID和重试机制。具体的实现可以阅读相关的论文(见文末的参考文章)。

当然也不能说源数据侧和输出侧真的不可控,当源数据端使用类似Kafka、文件流这种可以保证幂等性,也就是无论读取多少次都保证读的数据一样(Kafka的消息带有offset,文件本身的不可变)的系统,流处理系统就可以保证消息有且仅被处理一次,同理输出测也需要类似的特性才能保证输出的数据有且仅被处理一次。

至此对于流计算中精确一次处理的讨论告一段落,从上面地讨论中,我们可以注意到只要开发者认真的评估权衡性能、时延等各个因素,仔细设计上下流系统,在流处理系统中实现就不是不可能的。

参考文章:

  1. http://spark.apachecn.org/#/docs/paper
  2. https://arxiv.org/pdf/1506.08603.pdf
  3. 《Streaming Systems》第五章
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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