我们计划在大规模的IOT设置中使用Apache Flink。客户将向我们发送某种结构化传感器数据(例如sensor_id、sensor_type、sensor_value、timestamp)。我们无法控制每个客户何时发送此数据,很可能是实时的,但我们没有保证。我们将所有事件存储在RabbitMQ/Kafka中。更新:可以假设来自传感器的事件按顺序到达。
在开始实现可能的流水线之前,我们对以下挑战的解决方案感兴趣:
1.多窗口聚合
我们将所有原始传感器数据存储在Cassandra中。此外,我们希望按sensor_id对传感器数据进行多个时间窗口的聚合(例如15秒、1分钟、15分钟、1小时、1天)。使用Flink流式处理高效地实现所需输出的推荐方法是什么?
2.延迟严重的数据
如前所述,我们无法控制数据何时被发送。例如,客户可能遇到网络故障,因此数据可能会延迟到达。如何处理推荐方式?如果我们只能通过sensor_id保证好的水印(因为每个客户都有其自己的时间/问题/故障),我们该如何使用水印?我们可以添加一些允许的延迟时间(如6 - 12小时左右),这是否可行?flinks在内存窗口存储中如何处理超过允许延迟时间的数据?在超过允许的延迟时间后会发生什么?我们应该将真正延迟的数据存储到另一个kafka主题中并持续进行批处理吗?最后,一些客户会上传包含其收集的传感器数据的CSV文件。这是否也适用于批处理方式?
3.未来的数据
如果某个客户发送了远期数据(由于错误配置的传感器,因为我们无法控制它),则流会发生什么变化?
我们很想听听您的建议。谢谢。
在开始实现可能的流水线之前,我们对以下挑战的解决方案感兴趣:
1.多窗口聚合
我们将所有原始传感器数据存储在Cassandra中。此外,我们希望按sensor_id对传感器数据进行多个时间窗口的聚合(例如15秒、1分钟、15分钟、1小时、1天)。使用Flink流式处理高效地实现所需输出的推荐方法是什么?
2.延迟严重的数据
如前所述,我们无法控制数据何时被发送。例如,客户可能遇到网络故障,因此数据可能会延迟到达。如何处理推荐方式?如果我们只能通过sensor_id保证好的水印(因为每个客户都有其自己的时间/问题/故障),我们该如何使用水印?我们可以添加一些允许的延迟时间(如6 - 12小时左右),这是否可行?flinks在内存窗口存储中如何处理超过允许延迟时间的数据?在超过允许的延迟时间后会发生什么?我们应该将真正延迟的数据存储到另一个kafka主题中并持续进行批处理吗?最后,一些客户会上传包含其收集的传感器数据的CSV文件。这是否也适用于批处理方式?
3.未来的数据
如果某个客户发送了远期数据(由于错误配置的传感器,因为我们无法控制它),则流会发生什么变化?
我们很想听听您的建议。谢谢。