【问题标题】:Exceptions from Data Lake immutability rule数据湖不变性规则的例外情况
【发布时间】:2020-03-26 04:24:01
【问题描述】:

Data Lake should be immutable:

重要的是,放入湖中的所有数据都应该清晰 出处地点和时间。每个数据项都应该有一个明确的 追溯它来自哪个系统以及数据的生成时间。这 因此,数据湖包含历史记录。这可能来自 将领域事件馈入湖中,与 Event Sourced 天然契合 系统。但它也可能来自定期转储的系统 当前状态进入湖中 - 一种有价值的方法 源系统没有任何时间能力,但你想要一个 对其数据进行时间分析。这样做的结果是数据 入湖不可更改,一经陈述的观察不能 已删除(尽管稍后可能会被驳斥),您还应该期待 矛盾的观察。

规则是否有任何例外,在哪些情况下覆盖 Data Lake 中的数据可能被认为是一种好习惯?我想没有,但有些队友有不同的理解。

我认为在累积算法的情况下需要数据来源和可追溯性,以便能够重现最终状态。如果最终状态不依赖于先前的结果怎么办?如果他说 Data Lake 中的 Data Lake 不变性(事件溯源)仅用于累积算法,那么有人说得对吗?

例如,您每天满负荷摄取表 A 和 B,然后计算表 C。如果用户只对 C 的最新结果感兴趣,是否有任何理由保留历史记录 ( A、B、C 的基于日期划分的事件溯源?

另一个问题可能是 ACID 合规性 - 您的文件可能已损坏或部分写入。但是假设我们正在讨论可以从源系统轻松恢复 A 和 B 的最新状态的情况。

【问题讨论】:

    标签: architecture bigdata etl event-sourcing data-lake


    【解决方案1】:

    规则是否有任何例外情况,在哪些情况下覆盖 Data Lake 中的数据可能被认为是一种好的做法?

    最好的做法是不要覆盖数据湖中的数据。以防某些事件因错误或错误而生成。应该产生补偿前一个事件的新事件。这样,Datalake 会记录所有事件历史记录,包括补偿事件和最终的重新处理。

    我认为在累积算法的情况下需要数据来源和可追溯性,以便能够重现最终状态。如果最终状态不依赖于先前的结果怎么办?如果他说只有累积算法才需要 Data Lake 中的 Data Lake 不变性(事件溯源),那么有人说得对吗?

    DataLake 是所有相关事件的最终归宿。并非所有事件都需要记录在数据湖中。通常,我们区分操作/通信和业务事件。 DataLake 中记录的业务事件可用于重新处理或用于依赖于事件历史的新功能。也可以生成不依赖于事件历史的孤立事件并将其添加到历史中。因此,我们可以推断出最终状态不违反不变性原则。对于一组在时间上连续的不可变事件,我们总是可以产生最终状态。所以,答案不仅仅针对累积算法。

    例如,您每天对表 A 和 B 进行全负载摄取,然后计算表 C。如果用户只对 C 的最新结果感兴趣,是否有任何理由保留历史记录(基于事件溯源A、B、C的日期划分)?

    事件历史的起始事件无法重现。只有在第一个事件之后,我们才能考虑最终状态。在这种特殊情况下,不应将 A 和 B 元组和聚合视为事件。而是计算函数输入。计算函数输入应作为业务事件记录在数据湖中。最后的事件X(计算输入)产生事件Y。如果事件X没有记录在事件的历史中,则Y应该被认为是开始事件。

    【讨论】:

    • 谢谢你这么详细的回答,我已经读了很多遍了。不幸的是,我不明白,在此先抱歉。在第 2 部分 - 对我来说仍然不清楚为什么非累积算法需要事件历史;以及业务/运营/通信事件术语如何影响答案。你能举个例子吗?第 3 节 - 对我来说听起来像是一个有术语的游戏:“数据湖应该是不可变的,但如果它是可变的 - 就让它成为一个起始事件”。
    • 第 2 节示例。想象我们需要计算税收的购买。我们需要一个带有税率的事件 (tax_rate_updated) 和一个用于购买物品的事件 (item_checkout)。最终值(产生的事件)不依赖于 DataLake,也不使用累积算法。这同样适用于折扣券。
    • 第 3 节。不变性发生在事件级别。 Datalake 应该只会增加。曾经记录在 Datalake 中的事件是不可变的。不应该改变。我们可以类比一条以水坝为终点的河流。大坝大小发生变化。但是水还是一样的(不可变的)。
    • 关于“业务/运营/通信事件术语影响答案”只是为了澄清并非系统中发生的所有事件都应记录。但只有那些与业务相关并且我们将需要重新处理并对业务有价值的部分。
    • 事件溯源是一种潜在的 DataLake 功能,但它不是主要目标。数据湖应被视为公司资产。新的解决方案和分析可以使用数据湖中的数据,而不仅限于事件溯源。事件溯源可以重建应用程序状态、进行时间查询(应用程序在某个时间点的阶段)和事件重播(如果需要,重新发布事件)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多