内容提要
本文探讨了批处理、微批处理和流处理的区别与应用。批处理关注数据完整性,微批处理缩短处理时间以适应实时需求。流处理强调实时数据与历史数据的结合。调度系统在两者中的角色不同,批处理重视任务按时启动,流处理则关注任务的稳定性与恢复能力。数据处理模型随着时间边界的变化而演变。
延伸解读
时间边界如何影响数据处理模型
文章指出,数据处理模型随着时间边界的变化而演变。批处理以天为单位,关注数据完整性,处理时间与事件时间的选择至关重要;微批处理将时间间隔缩短至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分钟。
流处理如何处理实时数据与历史数据的关系?
流处理通过结合实时数据流和历史数据,允许在实时任务中动态更新和计算历史数据。
调度系统在批处理和流处理中的角色有什么不同?
批处理重视任务按时启动,而流处理则更关注任务的稳定性和恢复能力。
使用事件时间进行数据处理有什么好处?
使用事件时间可以确保当前批次处理完成后,所有在该时间之前的数据都已处理,系统对外清晰。
数据处理模型是如何随着时间边界变化而演变的?
数据处理模型随着时间边界的变化而演变,反映了对实时性和数据完整性的不同需求。