使用双键无法移除状态

时间:2018-12-17 14:59:08

标签: apache-flink flink-streaming

要问我的问题,我首先必须向您显示我的数据和我提出的双键问题解决方案:

数据具有2个键x和y中的1个。有时x有时是y。一种类型的事件具有两者。

  • 类型1:键x和y
  • 类型2:键x
  • 类型3:键y

要在管道结束时进行完整的会话,我们需要将所有数据放在一个键下:x + y。

为实现这一点,我复制了两个键的消息,其中一个键通过x复制,另一个键通过y复制。然后在下面的处理器中,填充x和y类型。

每条消息如下:[Flink键,potentialX,potentialY,其余msg ...]

Pipeline

这是我的情况:我有一个封闭的会话消息 类型2。它将传播到密钥X处理器。这里 它将得到丰富,我们可以适当关闭 其余管道中的处理器。但是键y是 从来没有被赶出过,因为它从来没有结束过会议 消息。

Close msg flow

现在要提出的问题是:如何关闭Y处理器中的状态?

最初,我想在浓缩器中复制类型2的味精,并为其进行sideoutput,在keyby之前获取该sideoutput,然后将其发送到正确的处理器。这是不可能的,因为sideoutput只能在创建它的处理器之后使用。然后,我发现了一些有关侧面输入的吉拉车票,但这似乎还不是一个真正的功能。

最后我想我可能会为上面提到的sideoutput做一个接收器,并在keyby上做一个源。这似乎有点古怪。

我真的希望有人能提供帮助!

编辑:

添加新图,以尝试阐明原始流程。在原始图中,我尝试通过为浓缩处理器制作2个盒子来使数据流更易于理解。我已尝试使用此新图纸使流程更正确:

Improved drawing

1 个答案:

答案 0 :(得分:0)

这有点复杂,但是在尝试将注销的会话与Web日志的登录会话统一起来之前,我已经看过这种模式。如果我对细节足够了解,我认为您可以从X处理器获取侧面输出,然后将其输入到Y处理器中,如下所示:

                             +------------+                          +-------+
                             |            +-------------------------->       |
+--------+     +-------+  X  |   X proc   |                          |       |
|        |     |       +----->            | sideout +-----------+    | X + Y |
|        |     |       |     |            +--------->           |    |       |
| source +-----> split |     +------------+         |           +---->       |
|        |     |       |                            |  Y proc   |    +-------+
|        |     |       +---------------------------->           |
+--------+     +-------+             Y              +-----------+