Flink流根据条件进入两个接收器

moh*_*pal 5 sink apache-flink flink-streaming

尝试根据条件查看流进入两个接收器的可能性。

要求是流有事件,转换后的所有事件都需要转到一个接收器(假设一个kafka主题)

并且只有错误事件需要转到另一个接收器(假设另一个kafka主题)。

没有看到一旦转换完成,附加逻辑放入接收器的用例。看看是否做过类似的事情

Dav*_*son 3

做到这一点的最佳方法是使用侧面输出

private static final OutputTag<String> errors = new OutputTag<>("errors") {};

...

// in your main() method
SingleOutputStreamOperator<T> result = events.process(new ProcessFunction());

result.addSink(sink).name("normal output");
result.getSideOutput(errors).addSink(errorSink).name("error output");

...

// in the process function

if (somethingGoesWrong) {
    ctx.output(errors, "error message");
}

Run Code Online (Sandbox Code Playgroud)

虽然还有其他方法可以使用 Flink 拆分流,但侧输出非常灵活(例如,侧输出可以具有不同的类型)并且性能良好。