Flink中的KeyBy多个流



我有来自不同kafka主题的多个(准确地说,到目前为止有3个(流(不同类型(。它们有一个共同的性质userId。我现在只想按userId进行分区,然后添加一些业务逻辑。我如何按userId对所有流进行分区,并确保所有事件都进入同一个任务处理器,以便可以访问userId状态?我本可以使用ConnectedStream,但这里的用例适用于2种以上不同类型的流。

我还想知道这样的东西是否能保证相同的任务处理器

MyBusinessProcess businessProcess() = new MyBusinessProcess();
streamA.keyBy(event -> event.userId).process(businessProcess);
streamB.keyBy(event -> event.userId).process(businessProcess);
streamC.keyBy(event -> event.userId).process(businessProcess);

编辑:我刚刚意识到,对于businessProcess,如果有多种类型的流,它将如何区分即将到来的事件。让我思考更多,因为这似乎是一个天真的流问题。

谢谢。

我会创建一个类(让我们称之为Either3(,它有一个userID字段,然后还有三个额外的字段(只设置了其中一个(,其中包含三个不同流的数据类型(请查看Flink的Either类,了解如何对两个值执行此操作(。

然后在三个流中的每一个流上使用map函数,将类a/B/C转换为具有适当值集的Either3

现在,您可以将三个流.union()放在一起,并将其中一个流运行到业务流程函数中,该函数可以根据需要维护状态。

相关内容

  • 没有找到相关文章

最新更新