文章目录
- 系列文章目录
- 前言
- 一、基于数据湖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语法,如下图
二、创建表
创建表:
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;
上面sql意义:
三、创建topic
[root@hadoop101 hadoop]# kafka-console-producer.sh --broker-list hadoop10192,hadoop102:9092,hadoop103:9092 --topic test_xxzh
四. 测试:
1.测试count
观察结果
结果: 多生产一条,count的结果,增加1
结论: count能实时随数据变化
4.2 测试group by count
对source 表测试,没用
没有变化,生产者不断加数据,groupBy结果没变化
失败原因: 是没有使用流模式,下面使用流模式测试
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/
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;
结果加1
总结
测试结果:对iceberg操作, 基于批的sql,也能实现update的效果! 流批一体,就是使用一套sql实现流批语义,摆脱原来流批两套语义的语法。