Flink自定义分区示例

时间:2016-06-22 18:08:55

标签: apache-kafka apache-flink flink-streaming

我要解决的用例如下:

  • 我们有一个从Kafka流入的数据流
  • 我们希望保证包含特定实体相同值的消息/记录由同一运营商处理。
  • 我们希望维护此运营商的状态,以便我们能够丰富未来的消息。

例如:

  • 让我们假设所有消息都是具有代表编码数据的字节数组。
  • 编码数据中具有特定值的所有消息都应由单个运算符处理。
  • 这样,当我们收到某些也对应相同值的特殊消息时,这些消息可以作为状态存储在运算符上(在分区器之后),并可用于丰富后续消息。

问题:

  1. 自定义分区程序会对此有所帮助吗?
  2. 如果不是什么会是一个很好的解决方案?
  3. 有人可以在Flink中为数据流共享自定义分区程序的示例。我无法找到任何完整的例子。

1 个答案:

答案 0 :(得分:1)

自定义分区程序会有所帮助,但对您来说没有必要。

您只需从邮件中提取分组值并将其用作分组键即可。因此,在源读取数据后,如果您使用数据类型map,则使用byte[] -> Tuple2<keyType,byte[]>提取值(例如,记录 - >(groupingValue,记录);想保留原始信息)。之后,您可以使用.keyBy(0)并在其上应用您想要的任何运算符。 keyBy确保Tuple2的第一个字段中具有相同值的所有记录都由同一个运算符处理。

相关问题