批处理和流处理的思考

批处理和流处理的思考

💡 原文中文,约3700字,阅读约需9分钟。
📝

内容提要

本文探讨了批处理、微批处理和流处理的区别与应用。批处理关注数据完整性,微批处理缩短处理时间以适应实时需求。流处理强调实时数据与历史数据的结合。调度系统在两者中的角色不同,批处理重视任务按时启动,流处理则关注任务的稳定性与恢复能力。数据处理模型随着时间边界的变化而演变。

🔎

延伸解读

时间边界如何影响数据处理模型

文章指出,数据处理模型随着时间边界的变化而演变。批处理以天为单位,关注数据完整性,处理时间与事件时间的选择至关重要;微批处理将时间间隔缩短至10分钟,更注重时效性;流处理则强调实时数据与历史数据的结合,模型和思维方式发生显著变化。理解不同时间边界下的模型差异,有助于在实际场景中选择合适的数据处理方式。

微批处理中的增量计算与删除处理

微批处理需产出批次内变化的数据,而非全量。文章提出通过(A-inc JOIN (B-base + B-inc)) UNION (B-inc JOIN (A-base + A-inc))的方式实现增量关联,这要求存储系统支持upsert和点查。同时,删除数据的传递容易被忽略,若物理删除需依赖binlog读取增量,否则需采用markDel方式。这些细节直接影响微批处理的正确性与实现复杂度。

调度系统在批流处理中的不同角色

批处理调度重视任务按时启动,核心指标是调度延迟;流处理调度更关注任务失败恢复时间,因此强调HA和Restart-Strategy。批处理任务每天调度,变量替换影响准确性;流处理任务长期运行,checkpoint决定正确性,从错误checkpoint启动可能导致丢数。两者在任务状态管理、日志、重试等方面相似,但在监控、资源调优等方面差异明显。

统一平台管理批流任务的挑战与方向

文章认为,公司应通过一套平台统一开发和管理实时与离线任务,以提供一致的使用习惯、权限和报警。但底层调度系统对一次性批任务和长期流任务的统一管理仍有难度。Kubernetes在资源调度上提供了Job、Crontab、Deployment等多种对象,值得借鉴。统一管理有助于降低维护成本,但需平衡不同任务类型的特性。

❓

Q&A

批处理和流处理的主要区别是什么?

批处理关注数据完整性和按时启动任务,而流处理强调实时数据与历史数据的结合,关注任务的稳定性与恢复能力。

微批处理的特点是什么?

微批处理通过缩短处理时间来适应实时需求,处理时间间隔通常为10分钟。

流处理如何处理实时数据与历史数据的关系?

流处理通过结合实时数据流和历史数据,允许在实时任务中动态更新和计算历史数据。

调度系统在批处理和流处理中的角色有什么不同?

批处理重视任务按时启动,而流处理则更关注任务的稳定性和恢复能力。

使用事件时间进行数据处理有什么好处?

使用事件时间可以确保当前批次处理完成后,所有在该时间之前的数据都已处理,系统对外清晰。

数据处理模型是如何随着时间边界变化而演变的?

数据处理模型随着时间边界的变化而演变,反映了对实时性和数据完整性的不同需求。

🏷️

标签

➡️

继续阅读