下沉到目的地后的过程元素

时间:2019-01-08 15:14:38

标签: apache-flink flink-streaming

我正在建立一个从Kafka读取并下沉到HDFS的flink管道。我想在addSink()步骤之后处理元素。这是因为我要设置触发器文件,该文件指示已完成某个分区/小时(到接收器)的数据写入。如何做到这一点?目前,我正在使用Bucketing接收器。

  1. DataStream messageStream = env             .addSource(flinkKafkaConsumer011);

  2. //一些聚合将消息流转换为keyedStream

  3. keyedStream.addSink(sink);

///如何处理3之后的元素?

1 个答案:

答案 0 :(得分:0)

Flink API不支持将作业图扩展到接收器之外。 (不过,您可以派生该流,并在写入接收器的同时进行其他处理。)

使用Streaming File Sink,您可以观察零件文件在完成时过渡到完成状态。有关更多信息,请参见JavaDoc

状态存在于单个运算符中-只有该运算符(例如ProcessFunction)可以对其进行修改。如果要在接收器完成后修改键值状态,则没有简单的方法可以做到这一点。一种想法是在ProcessFunction中添加一个处理时间计时器,该计时器的键控状态会定期唤醒并检查新完成的零件文件,并根据它们的存在来修改状态。或者,如果粒度不正确,则编写一个自定义源,该源可以执行类似的操作,并将信息流化或广播到ProcessFunction中(然后必须是CoProcessFunction或KeyedBroadcastProcessFunction),以用于进行必要的状态更新。