1. 什么是富函数
富函数是 DataStreamAPI提供的一个函数类的接口, 所有 Flink函数类都有其 Rich版本。它与常规函数的不同在于,可以获取运行环境的上下文,并拥有一些生命周期方法,所以可以实现更复杂的功能。
- RichMapFunction
- RichFlatMapFunction
- RichFilterFunction
-
2. 使用场景
在函数处理第一条记录之前就进行一些初始化工作或是获取函数运行时相关的上下文信息。
3. 富函数中的方法
open()
是富函数的初始方法。它在每个任务首次调用转换方法(如map,flter等算子)前调用一次。Open方法通常只用于那些只需要进行一次的设置工作
- close()
函数的终止方法,会在每个任务最后一次调用转换方法后调用一次。通常用于清理和释放资源。
- getRuntimeContext()
访问函数的RuntimeContext,从RuntimeContext中获取一些信息,例如函数的并行度,访问分区状态的方法等。
4. 如何使用富函数
package com.nkong.blink.function;
import org.apache.flink.api.common.functions.RichMapFunction;
import org.apache.flink.api.common.functions.RuntimeContext;
import org.apache.flink.configuration.Configuration;
/**
* @author nkong
* @time 2022/2/8 14:31
*/
public class MyRichFunction extends RichMapFunction<String, String> {
@Override
public void open(Configuration parameters) throws Exception {
// 算子处理之前首先调用open方法,可以进行初始化操作等,
// 例如:建立数据库连接
RuntimeContext context = getRuntimeContext();
}
@Override
public String map(String value) throws Exception {
// 算子处理逻辑
return null;
}
@Override
public void close() throws Exception {
// 算子处理结束后调用的方法,可以进行释放连接等操作
}
}