Apache Flink 中的 DataStream 和 KeyedStream 有什么区别?
What is the difference between DataStream and KeyedStream in Apache Flink?
我正在研究使用 Flink 连接两个流的上下文,想了解这两个流有何不同以及如何影响 Flink 处理它们的方式。
作为一个相关问题,我还想了解 CoProcessFunction 与 KeyedCoProcessFunction 有何不同。
A KeyedStream
是一个经过散列分区的 DataStream
,其效果是对于任何给定的键,该键的每个流元素都在同一分区中。这保证了一个键的所有消息都由同一个工作实例处理。只有键控流可以使用键分区状态和计时器。
A KeyedCoProcessFunction
连接两个以兼容方式键入的流——这两个流映射到相同的键空间——使得 KeyedCoProcessFunction
具有相关的键控状态成为可能到两个流。例如,您可能希望将客户交易流与客户更新流结合起来——在 customer_id 上加入他们。您可以通过 customer_id 键控两个流并使用 KeyedCoProcessFunction
.
连接这些键控流,在 Flink 中实现这一点(如果在低级别这样做)
另一方面,CoProcessFunction
有两个输入,但这些输入之间没有特定关系。
Flink 培训的教程涵盖 keyed streams and connected streams, and a related exercise/example。
我正在研究使用 Flink 连接两个流的上下文,想了解这两个流有何不同以及如何影响 Flink 处理它们的方式。
作为一个相关问题,我还想了解 CoProcessFunction 与 KeyedCoProcessFunction 有何不同。
A KeyedStream
是一个经过散列分区的 DataStream
,其效果是对于任何给定的键,该键的每个流元素都在同一分区中。这保证了一个键的所有消息都由同一个工作实例处理。只有键控流可以使用键分区状态和计时器。
A KeyedCoProcessFunction
连接两个以兼容方式键入的流——这两个流映射到相同的键空间——使得 KeyedCoProcessFunction
具有相关的键控状态成为可能到两个流。例如,您可能希望将客户交易流与客户更新流结合起来——在 customer_id 上加入他们。您可以通过 customer_id 键控两个流并使用 KeyedCoProcessFunction
.
另一方面,CoProcessFunction
有两个输入,但这些输入之间没有特定关系。
Flink 培训的教程涵盖 keyed streams and connected streams, and a related exercise/example。