flink-china / flink-forward-asia-hackathon-2021

本 GitHub 项目是 Flink Forward Asia Hackathon (2021) 的投票专用项目。
120 stars 19 forks source link

[参赛项目] 基于 Flink 实现 Kafka + Iceberg 的流批一体 Hybrid Storage #28

Open wuchong opened 2 years ago

wuchong commented 2 years ago

项目简述

基于 Apache Flink 实现 Kafka + Iceberg 的流批一体混合存储。通过结合消息队列和数据湖的优点,为用户提供逻辑层统一的表视图,可使用 Flink SQL 直接查询和写入,并同时具备毫秒级流式写入和读取、归档数据高效查询分析、存储成本廉价高效、支持row-level更新删除、全增量一体化读取等优点和特性。

背景

目前用户在使用 Kafka 等消息队列构建实时数仓时,遇到了非常多的痛点,包括

  1. Kafka 的存储成本昂贵,无法存储所有历史消息,通常只能存储最近几天的数据。无法满足长周期作业的需求,如机器学习、数据库CDC。
  2. Kafka 的存储格式并不是面向分析设计的,查询效率低下,不满足离线分析、ad-hoc 需求。
  3. 为了满足上面的需求,经常需要将 kafka 数据导出到离线数仓(hive, etc..)中,但这也导致了流批链路的割裂

也有许多用户基于数据湖框架(Hudi、Iceberg)构建近实时数仓,但是方案在架构上就无法满足实时数仓的秒级、毫秒级的需求。所以经常能看到用户只能维护实时、近实时、离线等多条链路,浪费了大量的数据成本,也导致了极高的维护成本。

目标

用户的本质需求是一个流批一体的数仓,所以我们会基于 Flink 融合 Kafka 与 Iceberg 两种存储,最近的增量数据存储在 Kafka 中,提供低时延的写入和消费能力,历史数据会周期性归档至 Iceberg 中,提供高效的查询分析能力和低成本的存储能力。且对于用户屏蔽物理存储细节,只暴露统一的表视图,流式消费时会读取历史全量+增量数据并实现自动切换,从而可以方便简单地构建多级的数仓模型(ODS -> DWD -> DWS)。最后,希望这个混合存储能够具备 row-level 的更新删除能力,从而能更好的支持和集成 CDC 场景。

实施方案

核心设计思路是借助于 FLIP-150 实现的 HybridSource 框架,实现 Kafka 和 Iceberg 之间的自动切换。但是切换的核心问题在于寻找正确的切换位点(kafka offset),因此需要抽象一个 HybridSink 的框架,在写入 Kafka 数据的同时,能够自动将 Kafka 数据也能回流到 Iceberg 中,并记录对应的 kafka offset。当使用 Hybrid Source 流式读取时,借助 Iceberg snapshot 中记录的 kafka offset 来切换到对应的 kafka offset 继续流式读取。

又因为 HybridSource 依赖 connector 实现了 FLIP-27 Source 接口,而 Iceberg 目前只实现了 SourceFunction 接口,因此还需额外开发基于 FLIP-27 的 Iceberg Source 实现。

因此核心工作包含:

  1. 基于 FLIP-27 的 Iceberg Source 实现
  2. Kafka + Iceberg 的 HybridSink 实现,完成 kafka offset 在 Iceberg Snapshot 中的记录。
  3. Kafka + Iceberg 的 HybridSource 实现,完成 Iceberg 到 Kafka 位点的切换。
  4. 实现基于 Kafka + Iceberg 的 Hybrid 的 DynamicTableSource 和 DynamicTableSink。

成员介绍

xuhui1231 commented 2 years ago

你好请问代码开源了吗

wuchong commented 2 years ago

源码: flink+kafka : https://github.com/wuchong/flink/tree/FLINK_HACHATHON_2021_hybrid_storage iceberg: https://github.com/wuchong/iceberg/tree/FLINK_HACHATHON_2021_hybrid_storage

andoxir commented 1 year ago

就这也冠军。。。

813BoZai commented 1 year ago

s

就这也冠军。。。

show me

smm321 commented 1 year ago

来自大佬的降维打击

yangdonggitlub commented 1 year ago

学习一下 点赞