Flink 自定义分区器示例
Flink custom partitioner example
我试图解决的用例如下:
- 我们有一个从 Kafka 流入的数据流
- 我们希望保证包含特定实体相同值的 message/records 由同一运算符处理。
- 我们希望维护此 Operator 的状态,以便我们能够丰富未来的消息。
例如:
- 假设所有消息都是字节数组,表示编码数据。
- 在编码数据中具有特定值的所有消息都应由单个操作员处理。
- 这样当我们收到某些也对应于相同值的特殊消息时,这些消息可以作为状态存储在运算符上(在分区程序之后),并可用于丰富后续消息。
问题:
- 自定义分区程序对此有帮助吗?
- 如果不是,什么是好的解决方案?
- 有人可以分享 Flink 中用于数据流的自定义分区程序的示例吗?我找不到任何完整的示例。
自定义分区程序会有所帮助,但您的情况没有必要。
您可以只从消息中提取分组值并将其用作分组键。因此,在源读取数据后,您使用 map
来提取值(例如,Record -> (groupingValue, Record) 数据类型为 byte[] -> Tuple2<keyType,byte[]>
如果您想保留原始消息)。之后,您可以使用 .keyBy(0)
并在其上应用您想要的任何运算符。 keyBy
确保 Tuple2
的第一个字段中具有相同值的所有记录都由同一运算符处理。
我试图解决的用例如下:
- 我们有一个从 Kafka 流入的数据流
- 我们希望保证包含特定实体相同值的 message/records 由同一运算符处理。
- 我们希望维护此 Operator 的状态,以便我们能够丰富未来的消息。
例如:
- 假设所有消息都是字节数组,表示编码数据。
- 在编码数据中具有特定值的所有消息都应由单个操作员处理。
- 这样当我们收到某些也对应于相同值的特殊消息时,这些消息可以作为状态存储在运算符上(在分区程序之后),并可用于丰富后续消息。
问题:
- 自定义分区程序对此有帮助吗?
- 如果不是,什么是好的解决方案?
- 有人可以分享 Flink 中用于数据流的自定义分区程序的示例吗?我找不到任何完整的示例。
自定义分区程序会有所帮助,但您的情况没有必要。
您可以只从消息中提取分组值并将其用作分组键。因此,在源读取数据后,您使用 map
来提取值(例如,Record -> (groupingValue, Record) 数据类型为 byte[] -> Tuple2<keyType,byte[]>
如果您想保留原始消息)。之后,您可以使用 .keyBy(0)
并在其上应用您想要的任何运算符。 keyBy
确保 Tuple2
的第一个字段中具有相同值的所有记录都由同一运算符处理。