文章目录

  • 系列文章目录
  • 前言
  • 一、基于数据湖icerberg的流批一体架构
  • 二、创建表
  • 三、创建topic
  • 四. 测试:
  • 1.测试count
  • 4.2 测试group by count
  • 4.3 参考官网配置流模式
  • 4.4 流模式group by测试
  • 总结



前言

lambda架构中, kafka->flink中支持 各种流函数,
数据入iceberg后,如何对icberg进行流操作,实现类似流函数的结果?
基于数据湖的流批一体是什么意思?


一、基于数据湖icerberg的流批一体架构

整体思路:

批流一体化架构 流批一体计算_批流一体化架构


批计算,很好理解,跟原来hive的离线任务一样。

流计算:基于iceberg能否支持想操作kafka一样的流计算? 有什么特点?流计算测试三种语法: 1.select * ,2.select count 3.group by count语法,如下图

批流一体化架构 流批一体计算_flink_02

二、创建表

创建表:

CREATE TABLE IF NOT EXISTS KafkaTableSource_XXZH (
    `log` STRING,
	`date` STRING
) WITH (
    'connector' = 'kafka',
    'topic' = 'test_xxzh',
    'properties.bootstrap.servers' = 'hadoop101:9092,hadoop102:9092,hadoop103:9092',
    'properties.group.id' = 'testGroup',
    'scan.startup.mode' = 'earliest-offset',
    'format' = 'csv'
);


CREATE CATALOG hive_iceberg_catalog WITH (
    'type'='iceberg',
    'catalog-type'='hive',
    'uri'='thrift://hadoop101:9083',
    'clients'='5',
    'property-version'='1',
    'warehouse'='hdfs:///user/hive/warehouse/hive_iceberg_catalog'
);
use catalog hive_iceberg_catalog;
CREATE TABLE IF NOT EXISTS ods_base.IcebergSink_XXZH (
    `log` STRING,
	`dt` STRING
)with(
    'write.metadata.delete-after-commit.enabled'='true',
    'write.metadata.previous-versions-max'='5',
    'format-version'='2'
 );
 
 insert into  ods_base.IcebergSink_XXZH select * from default_catalog.default_database.KafkaTableSource_XXZH;

批流一体化架构 流批一体计算_架构_03


上面sql意义:

批流一体化架构 流批一体计算_kafka_04

三、创建topic

[root@hadoop101 hadoop]# kafka-console-producer.sh --broker-list hadoop10192,hadoop102:9092,hadoop103:9092 --topic test_xxzh

四. 测试:

1.测试count

批流一体化架构 流批一体计算_kafka_05

观察结果

批流一体化架构 流批一体计算_hadoop_06


结果: 多生产一条,count的结果,增加1

批流一体化架构 流批一体计算_批流一体化架构_07


结论: count能实时随数据变化

4.2 测试group by count

对source 表测试,没用

批流一体化架构 流批一体计算_kafka_08


没有变化,生产者不断加数据,groupBy结果没变化

批流一体化架构 流批一体计算_kafka_09


失败原因: 是没有使用流模式,下面使用流模式测试

4.3 参考官网配置流模式

SET execution.type = streaming ;
SET table.dynamic-table-options.enabled=true;
select `date`,count(*) from KafkaTableSource_XXZH /*+ OPTIONS('streaming'='true', 'monitor-interval'='1s')*/ group by `date`  ;

参考官网语法: https://iceberg.apache.org/docs/latest/flink/

批流一体化架构 流批一体计算_架构_10

4.4 流模式group by测试

对数据湖表测试:
select dt,count(1) from icebergsink_xxzh /+ OPTIONS(‘streaming’=‘true’, ‘monitor-interval’=‘1s’)/ group by dt;

Flink SQL>  select dt,count(1) from icebergsink_xxzh  /*+ OPTIONS('streaming'='true', 'monitor-interval'='1s')*/  group by dt;

批流一体化架构 流批一体计算_架构_11

批流一体化架构 流批一体计算_flink_12


批流一体化架构 流批一体计算_flink_13


结果加1

批流一体化架构 流批一体计算_kafka_14

总结

测试结果:对iceberg操作, 基于批的sql,也能实现update的效果! 流批一体,就是使用一套sql实现流批语义,摆脱原来流批两套语义的语法。

批流一体化架构 流批一体计算_flink_02