左移架构 -- 从攒批,湖仓到使用数据流的实时数据产品

编辑导读: 这篇文章翻译自 Kai Waehner的 《The Shift Left Architecture – From Batch and Lakehouse to Real-Time Data Products with Data Streaming》。文章通过数据产品的概念引出了如何创建可重复使用的数据产品使企业能够从当前和未来的数据中获得价值。基于构建数据产品发挥数据价值的基本思想,作者提出了利用Apache Kafka 以及 Flink 来构建左移架构,在data pipeline的前端尽早构建优质的数据产品,并且将原始实时数据流通过iceberg格式进行入湖和后续的分析消费。该文充分说明了 Apache Kafka 在当前现代化的左移数据栈中如何发挥重要的作用。AutoMQ[1] 是全球唯一一款与 Apache Kafka 100% 完全兼容的新一代 Kafka,可以做到10倍成本降低和极速的弹性,因此以下方法论也完全适用于 AutoMQ,欢迎使用我们 Github 开源的社区版本或者联系我们进行商业试用。

数据整合是每个企业面临的重大挑战。批处理和反向ETL是数据仓库、数据湖等存储方案中的常见方法。这些方法可能带来数据不一致、计算成本高和信息过时等后果。本文介绍了一种新的设计模式来解决这些问题:左移架构(the Shift Left Architecture)。左移架构通过实时数据产品实现数据网格(Data Mesh),利用 Apache Kafka、Flink 和 Iceberg 统一事务性和分析性工作负载。一致的信息通过流式处理或提取到 Snowflake、Databricks、Google BigQuery 或任何分析/AI 平台。以此提高灵活性,降低成本,并实现数据驱动的公司文化,提高创新软件应用的上市速度。

数据产品 - 数据网格的基础

在数据网格中,数据产品是一个关键概念,它代表了从传统的集中式数据管理向去中心化方法的转变。

麦肯锡认为:“如果企业能像管理消费品一样管理数据(无论是数字数据还是物理数据),就能从数据投资中收获短期价值并为明天迅速获得更多价值铺平道路。创建可重复使用的数据产品和拼接数据技术的模式,使企业能够从当前和未来的数据中获得价值。”:

麦肯锡认为,数据产品方法可以带来巨大的效益:

  • 新业务用例的交付速度可提高 90%

  • 包括技术、开发和维护在内的总成本可降低 30%

  • 更低的风险和数据管理负担

从技术角度看数据产品

下面从技术角度介绍数据网格中的数据产品:

  1. 去中心化的数据所有权:每个数据产品由一个特定的领域团队所有。应用程序之间是真正解耦的。

  2. 源于运行和分析系统:数据产品包括来自任意数据源的信息,包括最关键的系统和分析/报告平台。

  3. 自包含和可发现:数据产品不仅包括原始数据,还包括相关的元数据、文档和 API。

  4. 标准化接口:数据产品遵循标准化的接口和协议,确保数据网格中的其他数据产品和消费端可以轻松访问和使用。

    <
在Ant Design Vue库中的`a-table`组件中,如果你想要实现在表格中展示两个表的数据,并允许用户进行左移和右移的操作,你可以这样做: 首先,你需要准备两个数组分别存储你要显示的数据,假设它们是`data1`和`data2`。然后,可以在`a-table`组件内,通过`v-for`遍历这两个数组,每个循环里创建一个新的行元素。 ```html <template> <div> <a-table :columns="columns" :data="data1"> <!-- 每一行可以这样表示 --> <template slot-scope="scope"> <tr> <!-- 表格列内容... --> <!-- 可能需要添加一个操作列,比如编辑、删除等 --> <td> <button @click="moveRow(scope.$index, data1, 'left')">左移</button> <button @click="moveRow(scope.$index, data1, 'right')">右移</button> </td> </tr> </template> </a-table> <a-table :columns="columns" :data="data2"> <!-- 类似的结构,但是数据源是data2 --> <!-- ... --> </a-table> </div> </template> <script> export default { data() { return { columns: ..., // 定义你的列配置 data1: ..., // 数据源1 data2: ... // 数据源2 }; }, methods: { moveRow(index, dataSource, direction) { if (direction === 'left') { if (index > 0) { const [firstItem, rest] = [...dataSource]; dataSource[index - 1] = firstItem; dataSource[index] = rest; } } else if (direction === 'right') { if (index < dataSource.length - 1) { const [lastItem, rest] = [...dataSource.slice(0, index + 1)]; dataSource[index + 1] = lastItem; dataSource[index] = rest; } } // 更新数据源的状态 this[dataSource].splice(index, 1); } } }; </script> ``` 这里只是一个基本的示例,实际操作中可能还需要处理一些边界情况,如索引越界、并发修改等问题。同时,为了保持数据的一致性,可能需要在后台同步这两份数据的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值