Flink Stream 消息是否按顺序发送到下游
Are Flink Stream messages sent to downstream in order
我是Flink新手。我有一个问题,是否所有发送到下游节点的消息都是有序的?例如,
[Stream] -> [DownStream]
Stream: [1,2,3,4,5,6,7,8,9]
Downstream get [3,2,1,4,5,7,6,8,9]
如果是这样,如果我们想要按顺序处理这种情况,我们将如何处理?
如有任何帮助,我们将不胜感激!
一个操作员可以有多个输入通道。它将按照接收事件的顺序处理来自每个通道的事件。 (运算符也可以有多个输出通道。)
如果您的作业在流和下游之间有不止一条路径,那么事件可以竞争并且排序将是不确定的。否则顺序将被保留。
举个例子:假设您正在并行读取具有多个分区的 Kafka 主题。进一步想象来自给定用户的所有事件都在同一个 Kafka 分区中(并且按时间戳为每个用户排序)。然后在 Flink 中你可以使用 keyBy(user)
并确保每个用户的事件流将保持有序。另一方面,如果给定用户的事件分布在多个分区中,那么 keyBy(user)
最终会为每个用户创建一个(几乎可以肯定)乱序的事件流,因为它将拉动来自几个不同 FlinkKafkaConsumer
并行读取实例的事件在一起。
我是Flink新手。我有一个问题,是否所有发送到下游节点的消息都是有序的?例如,
[Stream] -> [DownStream]
Stream: [1,2,3,4,5,6,7,8,9]
Downstream get [3,2,1,4,5,7,6,8,9]
如果是这样,如果我们想要按顺序处理这种情况,我们将如何处理?
如有任何帮助,我们将不胜感激!
一个操作员可以有多个输入通道。它将按照接收事件的顺序处理来自每个通道的事件。 (运算符也可以有多个输出通道。)
如果您的作业在流和下游之间有不止一条路径,那么事件可以竞争并且排序将是不确定的。否则顺序将被保留。
举个例子:假设您正在并行读取具有多个分区的 Kafka 主题。进一步想象来自给定用户的所有事件都在同一个 Kafka 分区中(并且按时间戳为每个用户排序)。然后在 Flink 中你可以使用 keyBy(user)
并确保每个用户的事件流将保持有序。另一方面,如果给定用户的事件分布在多个分区中,那么 keyBy(user)
最终会为每个用户创建一个(几乎可以肯定)乱序的事件流,因为它将拉动来自几个不同 FlinkKafkaConsumer
并行读取实例的事件在一起。