【Flink-1.17-教程】-【五】Flink 中的时间和窗口(2)时间语义

1)Flink 中的时间语义

在流处理中,时间是一个非常核心的概念,是整个系统的基石。比如,我们经常会遇到这样的需求:给定一个时间窗口,比如一个小时,统计时间窗口的内数据指标。那如何界定哪些数据将进入这个窗口呢?在窗口的定义之前,首先需要确定一个应用使用什么样的时间语义。本文将介绍 Flink 的 Event TimeProcessing TimeIngestion Time 三种时间语义。

在这里插入图片描述

2)时间语义的分类

2.1.处理时间(process time)

处理时间是指的执行操作的各个设备的时间。对于运行在处理时间上的流程序,所有的基于时间的操作(比如时间窗口)都是使用的设备时钟,比如,一个长度为1个小时的窗口将会包含设备时钟表示的1个小时内所有的数据。

假设应用程序在 9:15am分启动,第1个小时窗口将会包含9:15am到10:00am所有的数据,然后下个窗口是10:00am-11:00am,等等。

处理时间是最简单时间语义,数据流和设备之间不需要做任何的协调,他提供了最好的性能和最低的延迟。但是,在分布式和异步的环境下,处理时间没有办法保证确定性,容易受到数据传递速度的影响࿱

Flink 1.17 中,Table API SQL 的配置主要包括以下几个方面: 1. Execution Environment 配置:通过 `StreamExecutionEnvironment` 或 `TableEnvironment` 对象设置 Flink 的执行环境,如本地模式、集群模式等。 ``` StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); TableEnvironment tEnv = TableEnvironment.create(env); ``` 2. Table Source Sink 配置:通过 `TableEnvironment` 对象设置数据源数据接收器,如 Kafka、Hive、JDBC 等。 ``` // Kafka source Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("group.id", "test"); KafkaTableSource kafkaTableSource = new KafkaTableSource( "my-topic", new Kafka010JsonTableSchema.Builder() .field("id", Types.INT()) .field("name", Types.STRING()) .build(), properties); // JDBC sink JDBCAppendTableSink jdbcSink = JDBCAppendTableSink.builder() .setDrivername("org.apache.derby.jdbc.EmbeddedDriver") .setDBUrl("jdbc:derby:memory:flink_example") .setUsername("flink") .setPassword("flink") .setQuery("insert into users (id, name, age) values (?, ?, ?)") .setParameterTypes(Types.INT(), Types.STRING(), Types.INT()) .build(); ``` 3. Table Configuration 配置:通过 `TableConfig` 对象设置 Table API SQL 的一些配置参数,如时间语义、并行度、状态后端等。 ``` TableConfig tableConfig = tEnv.getConfig(); tableConfig.setLocalTimeZone(ZoneId.of("UTC+8")); tableConfig.setSqlDialect(SqlDialect.DEFAULT); tableConfig.setParallelism(4); tableConfig.setExecutionConfig(new ExecutionConfig().setRestartStrategy(RestartStrategies.noRestart())); tableConfig.setTableStateBackend(new FsStateBackend("hdfs://localhost:9000/flink/checkpoints")); ``` 4. UDF 配置:通过 `TableEnvironment` 对象注册自定义函数,如自定义聚合函数、标量函数、表值函数等。 ``` // 自定义标量函数 public class StringLengthUdf extends ScalarFunction { public int eval(String s) { return s.length(); } } tEnv.createTemporarySystemFunction("strLen", new StringLengthUdf()); ``` 以上是 Flink 1.17 中 Table API SQL 的配置方式的简单示例,具体配置参数方法可以参考官网文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值