实时和离线

实时和离线

💡 原文中文,约3200字,阅读约需8分钟。
📝

内容提要

文章讨论了离线数据处理的时间边界和调度问题,提出了离线数仓任务的模型和任务调度系统。还讨论了微批处理和流处理的模型变化,以及T+1和流处理任务的调度要求和差异。最后,提出了一套统一开发和管理任务的平台。

🔎

延伸解读

事件时间与处理时间的选择逻辑

文章指出,离线数据处理通常选择事件时间,以确保数据完整性。但在微批处理中,如果追求时效性而非严格的时间边界,也可以考虑处理时间。这提示读者,时间语义的选择需权衡数据准确性与处理延迟,并非固定不变。

微批处理增量计算的实现要点

微批处理需产出变化数据,而非全量。文章提出通过增量与基表合并的SQL模式,并依赖支持upsert和点查的存储系统。同时,删除数据的传递(如markDel)和增量获取方式(字段或binlog)也是落地时需考虑的关键点。

流处理模型与SQL语义的转变

从微批到流处理,模型变化显著。文章以历史订单计算为例,说明流计算中聚合和JOIN的语义与离线全量模型不同,流上的操作更像点查。这要求开发者在思维和SQL写法上做出调整,不能简单复用离线逻辑。

调度系统对正确性的潜在影响

调度不仅关乎稳定性,也影响任务正确性。批处理中变量替换错误会导致时间计算偏差,流处理中从错误checkpoint启动可能丢数。因此,统一平台需重视这些细节,确保调度准确,避免数据质量问题。

❓

Q&A

离线数据处理中的时间边界是如何定义的?

离线数据处理中的时间分为处理时间和事件时间,通常选择事件时间进行处理。

T+1 数据处理模型的主要功能是什么?

T+1 数据处理模型通过合并增量数据生成全量表或拉链表,确保数据的完整性。

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

微批处理关注短时间内的数据变化,而流处理则实时处理数据流,模型和 SQL 语义有显著变化。

任务调度系统在离线数仓任务中起什么作用?

任务调度系统在离线数仓任务中负责任务的依赖检查和执行,确保任务按顺序完成。

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

使用事件时间可以清晰地标识当前批次处理完成的时间,确保数据处理的时效性。

K8S 在任务管理中提供了哪些支持?

K8S 提供多种资源对象,如 Job、Crontab 和 Deployment,支持一次性和长时间运行任务的统一管理。

🏷️

标签

➡️

继续阅读