Flink Iceberg 0.11

2020-12-14  本文已影响0人  HideOnBushKi

背景

我们在使用Flink+Kafka做实时数仓以及数据传输过程中,遇到了一些问题,Iceberg 0.11的新特性解决了这些业务场景,基于Iceberg我们做了一些实践,对比Kafka来说,Iceberg在某些特定场景有自己的优势,在这里做一些小的实践分享

分享主题

痛点1:KAFKA数据丢失

存储上,通常我们会选择kafka做实时数仓,以及日志传输。kafka本身存储成本其实蛮高的,数据保留时间有时效性,一旦消费积压,数据达到过期时间后,会导致数据丢失

什么数据适合入湖

对实时有适当放宽的,能接受1-10分钟的延迟,比如业务方可以接受近实时数据,比如日志类数据这样时效性不是特别敏感的

为什么Iceberg只能做近实时入湖?

物理数据写入Iceberg后,直到触发了checkpoint,这个时候才会写元数据,当元数据写入完毕后,数据由不可见变为可见,这也是实时性为什么不能像kafka一样,只能做近实时


image.png
Flink SQL入湖流程

Flink Iceberg实时读写


实时入湖流程

入湖流程分析

术语解析

image.png
Flink入湖流程
image.png

组件介绍

踩坑记录

我之前在SQL Clinet写数据到Iceberg、data目录数据一直在更新,但是metadata没有数据,导致查询的时候没有数,因为Iceberg的查询计划是需要元数据来索引真实数据的,本质上时候因为IcebergFilesCommitter这个组件需要状态来存储某个checkpoint对应的数据文件,而SQL Clinet是不支持状态开启的。所以会导致data写入数据而metadata目录不写入元数据
PS:写数据必须开启checkpoint

实时读取Demo

前期工作

    //注册Iceberg catalog用于操作Iceberg表
    CREATE CATALOG iceberg_catalog WITH (\n" +
            "  'type'='iceberg',\n" +
            "  'catalog-type'='hive'," +
            "  'uri'='thrift://localhost:9083'" +
            ");

   //实时数据入湖
   insert into iceberg_catalog.iceberg_db.tbl1 \n 
            select  *  from  kafka_tbl;

  //实时查询入湖数据、也可以sink到
  insert into iceberg_catalog.iceberg_db.tbl2  
    select * from iceberg_catalog.iceberg_db.tbl 
    /*+ OPTIONS('streaming'='true', 'monitor-interval'='10s', snapshot-id'='3821550127947089987')*/ ;
参数解释
小文件处理

Iceberg 0.11新特性,对小文件合并支持了处理

CREATE TABLE city_table ( 
     province BIGINT,
     city STRING
  ) PARTITIONED BY (province, city) WITH (
    'write.distribution-mode'='hash' 
  );
Iceberg动态更新Schema

如果数据入hive table,上游数据字段变更,需要重建表、以及重启作业、这是一个相当麻烦的工作,Iceberg通过捕捉上游Schema变更,将元数据信息写入最新的快照版本,通过版本可以动态的读取到最新的Schema
PS:社区暂时不支持的该功能,目前只在商业版做了

元数据变更处理流程

痛点2:Flink结合Hive的近实时越来越慢

image.png
随着表和分区增多,将会面临以下问题
image.png

Iceberg 查询计划

Iceberg 0.11 排序
排序demo
insert into iceberg_table select days from kafka_tbl order by days, province_id
Iceberg manifest详解

参数解释

总结

Apache Iceberg0.11有很多实用的新特性、比如实时读取数据,商业版的捕获Schema动态变更发送下游,通过hash的方法让task处理一个区域的数据,避免了小文件问题,以及排序功能提升了查询速度。

上一篇下一篇

猜你喜欢

热点阅读