Flink 部分Function的依赖关系

1. Function 接口的实现

Function (org.apache.flink.api.common.functions)

RichFunction (org.apache.flink.api.common.functions)
MapFunction (org.apache.flink.api.common.functions)
KeySelector (org.apache.flink.api.java.functions)
ReduceFunction (org.apache.flink.api.common.functions)
SinkFunction (org.apache.flink.streaming.api.functions.sink)
FlatMapFunction (org.apache.flink.api.common.functions)
FilterFunction (org.apache.flink.api.common.functions)
AggregateFunction (org.apache.flink.api.common.functions)
SourceFunction (org.apache.flink.streaming.api.functions.source)
JoinFunction (org.apache.flink.api.common.functions)
AllWindowFunction (org.apache.flink.streaming.api.scala.function)
CrossFunction (org.apache.flink.api.common.functions)
CoFlatMapFunction (org.apache.flink.streaming.api.functions.co)
FlatJoinFunction (org.apache.flink.api.common.functions)
FoldFunction (org.apache.flink.api.common.functions)
CombineFunction (org.apache.flink.api.common.functions)
AsyncFunction (org.apache.flink.streaming.api.functions.async)
Partitioner (org.apache.flink.api.common.functions)
TimestampAssigner (org.apache.flink.streaming.api.functions)
AggsHandleFunctionBase (org.apache.flink.table.runtime.generated)
GroupCombineFunction (org.apache.flink.api.common.functions)
MapBundleFunction (org.apache.flink.table.runtime.operators.bundle)
CoMapFunction (org.apache.flink.streaming.api.functions.co)
TimestampExtractor (org.apache.flink.streaming.api.functions)
NamespaceAggsHandleFunctionBase (org.apache.flink.table.runtime.generated)
GroupReduceFunction (org.apache.flink.api.common.functions)
WindowFunction (org.apache.flink.streaming.api.functions.windowing)
CoGroupFunction (org.apache.flink.api.common.functions)
InternalWindowFunction (org.apache.flink.streaming.runtime.operators.windowing.functions)
MapPartitionFunction (org.apache.flink.api.common.functions)
AllWindowFunction (org.apache.flink.streaming.api.functions.windowing)
AggregationsFunction (org.apache.flink.table.runtime.aggregate)
WindowFunction (org.apache.flink.streaming.api.scala.function)
AsyncFunction (org.apache.flink.streaming.api.scala.async)

1.1 RichFunction 的实现

AbstractRichFunction (org.apache.flink.api.common.functions)
JoinCondition (org.apache.flink.table.runtime.generated)
ScalaWindowFunctionWrapper (org.apache.flink.streaming.api.scala.function.util)
ScalaAllWindowFunctionWrapper (org.apache.flink.streaming.api.scala.function.util)
StatefulFunction (org.apache.flink.streaming.api.scala.function)

1.1.1 AbstractRichFunction 的实现

RichSinkFunction (org.apache.flink.streaming.api.functions.sink)
RichReduceFunction (org.apache.flink.api.common.functions)
RichSourceFunction (org.apache.flink.streaming.api.functions.source)
ProcessFunction (org.apache.flink.streaming.api.functions)
KeyedProcessFunction (org.apache.flink.streaming.api.functions)
RichFlatMapFunction (org.apache.flink.api.common.functions)
ProcessJoinFunction (org.apache.flink.streaming.api.functions.co)
NoOpFunction (org.apache.flink.api.common.functions.util)
TableFunctionResultFuture (org.apache.flink.table.runtime.collector)
CoProcessFunction (org.apache.flink.streaming.api.functions.co)
RichGroupReduceFunction (org.apache.flink.api.common.functions)
KeyedCoProcessFunction (org.apache.flink.streaming.api.functions.co)
TerminationCriterionMapper in BulkIterationBase (org.apache.flink.api.common.operators.base)
RichCoFlatMapFunction (org.apache.flink.streaming.api.functions.co)
RichCrossFunction (org.apache.flink.api.common.functions)
RichAsyncFunction (org.apache.flink.streaming.api.functions.async)
RichJoinFunction (org.apache.flink.api.common.functions)
RichFoldFunction (org.apache.flink.api.common.functions)
WatermarkGenerator (org.apache.flink.table.runtime.generated)
MapProjector in PlanProjectOperator (org.apache.flink.api.java.operators.translation)
ProcessAllWindowFunction (org.apache.flink.streaming.api.functions.windowing)
RichParallelSourceFunction (org.apache.flink.streaming.api.functions.source)
RichAllWindowFunction (org.apache.flink.streaming.api.functions.windowing)
JoinConditionWithNullFilters in AbstractStreamingJoinOperator (org.apache.flink.table.runtime.operators.join.stream)
RichWindowFunction (org.apache.flink.streaming.api.functions.windowing)
RichCoGroupFunction (org.apache.flink.api.common.functions)
RichCoMapFunction (org.apache.flink.streaming.api.functions.co)
TableFunctionCollector (org.apache.flink.table.runtime.collector)
RichGroupCombineFunction (org.apache.flink.api.common.functions)
RichMapPartitionFunction (org.apache.flink.api.common.functions)
WrappingFunction (org.apache.flink.api.java.operators.translation)
ProcessWindowFunction (org.apache.flink.streaming.api.functions.windowing)
RichAggregateFunction (org.apache.flink.api.common.functions)
RichFlatJoinFunction (org.apache.flink.api.common.functions)
BaseBroadcastProcessFunction (org.apache.flink.streaming.api.functions.co)
DataSetPreAggFunction (org.apache.flink.table.runtime.aggregate)
ProcessAllWindowFunction (org.apache.flink.streaming.api.scala.function)
RichAllWindowFunction (org.apache.flink.streaming.api.scala.function)
DataSetSessionWindowAggregatePreProcessor (org.apache.flink.table.runtime.aggregate)
TableFunctionCollector (org.apache.flink.table.runtime)
RichWindowFunction (org.apache.flink.streaming.api.scala.function)
ProcessWindowFunction (org.apache.flink.streaming.api.scala.function)
RichAsyncFunction (org.apache.flink.streaming.api.scala.async)

1.2 各类Function的区别

转换算子是无法访问事件的时间戳信息和水位线信息的。例如MapFunction这样的map转换算子就无法访问时间戳或者当前事件的事件时间。
基于此,DataStream API提供了一系列的Low-Level转换算子。
这类Function实现RichFunction接口,而其定制化了以下四种方法

void open(Configuration parameters) throws Exception;
void close() throws Exception;
RuntimeContext getRuntimeContext();
IterationRuntimeContext getIterationRuntimeContext();
void setRuntimeContext(RuntimeContext t);

它们能够做到下面的功能:

能进行状态编程
可以访问时间戳、watermark
注册定时事件
输出特定的一些事件,例如超时事件等
Process Function用来构建事件驱动的应用以及实现自定义的业务逻辑(使用之前的window函数和转换算子无法实现)。例如,Flink SQL就是使用Process Function实现的
实现状态编程

Process Function定时器、测输出流参考
状态编程参考

1.3 直接对KeyedStream流运用状态编程方法

其实KeyedStream的reduce、max、min内部逻辑本来就是运用到了状态编程,如果在实际中要运用状态编程,能直接使用这些方法会更便捷

filterWithState
mapWithState
flatMapWithState

状态编程参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要导入以下依赖: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-core</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> ``` 然后,我们可以定义一个自定义的Source Function,使用DelayQueue产生测试数据。下面是一个简单的示例代码: ```java import org.apache.flink.streaming.api.functions.source.SourceFunction; import java.util.concurrent.DelayQueue; import java.util.concurrent.Delayed; import java.util.concurrent.TimeUnit; public class DelayedEventSource implements SourceFunction<DelayedEvent> { private volatile boolean running = true; private final DelayQueue<DelayedEvent> queue = new DelayQueue<>(); public void run(SourceContext<DelayedEvent> ctx) throws Exception { while (running) { DelayedEvent event = queue.take(); ctx.collect(event); } } public void cancel() { running = false; } public void addEvent(long timestamp, String message) { queue.put(new DelayedEvent(timestamp, message)); } public static class DelayedEvent implements Delayed { private final long timestamp; private final String message; public DelayedEvent(long timestamp, String message) { this.timestamp = timestamp; this.message = message; } public long getDelay(TimeUnit unit) { long diff = timestamp - System.currentTimeMillis(); return unit.convert(diff, TimeUnit.MILLISECONDS); } public int compareTo(Delayed other) { if (this.timestamp < ((DelayedEvent) other).timestamp) { return -1; } if (this.timestamp > ((DelayedEvent) other).timestamp) { return 1; } return 0; } public String getMessage() { return message; } } } ``` 在这个示例中,我们定义了一个DelayQueue,用来存储延迟事件。run()方法在一个while循环中循环获取DelayQueue中的事件,并使用ctx.collect()方法将事件发送给下游算子。addEvent()方法用于向DelayQueue中添加新的延迟事件。 最后,我们可以通过以下代码来使用自定义的Source Function: ```java DelayedEventSource source = new DelayedEventSource(); // 添加测试数据 source.addEvent(System.currentTimeMillis() + 1000, "Hello"); source.addEvent(System.currentTimeMillis() + 2000, "World"); DataStream<DelayedEventSource.DelayedEvent> stream = env.addSource(source); ``` 在这个示例中,我们创建了一个DelayedEventSource,并向其中添加了两个延迟事件。然后,我们将其作为Source Function添加到Flink的DataStream中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值