Azure 中的数据处理架构
Posted
技术标签:
【中文标题】Azure 中的数据处理架构【英文标题】:Data processing architecture in Azure 【发布时间】:2019-12-12 04:55:27 【问题描述】:将设计一个系统,其中多个传感器将数据传输到事件中心。每个传感器每秒将传输大量数据(最多 15-20(大约 5 KB))。
一个用例是所有这些原始数据都必须以最小/无延迟传输到 cosmosDB,这是我可以通过以下架构实现的。原始数据 -> 事件中心 -> Azure 流分析 -> CosmosDB
注意:上述用例是确定传感器的连接状态。所以它必须尽可能快。
另一个用例是传感器的指示属性,它取决于传感器的最后一个值(最多前 200 个值)。 现在问题就在这里。我尝试使用以下架构。原始数据 -> 事件中心 -> Azure 流分析 -> Azure 函数 -> CosmosDB
因此,在这里,流分析的输出转到 azure 函数,它从 cosmosDB 获取前 200 个值进行必要的计算,然后将结果再次存储回 cosmosDB。但是这个过程似乎很慢。
COSMOS DB CONTAINERS
//Sensor Property Container
id: "sensor_id",
connection:true, //This needs to be updated as soon as raw data is available
indication:"RED" //This depends on previous 200 values from sensor
//Sensor Raw Value Container
id: "sensor_id",
rawData: "RAW_VALUE",
您可以查看下面的图片,了解我正在寻找的内容。
Data Flow Image
我还尝试在 azure 流分析中添加用户定义函数以在其中运行算法,但它不支持 cosmosDB 作为参考数据。
【问题讨论】:
【参考方案1】:您应该尝试将逻辑合并到流分析中。添加更多移动部件总是会导致延迟。您可以按 deviceId 对每分钟收到的值进行计数吗?并在此计数少于预期时生成警报?
【讨论】:
我正在按设备 ID 对值进行分组,仅获取最新值。我试图将逻辑整合到流分析中。但是,当新数据到达的每一秒,我都需要保存在 cosmosdb 中的先前状态。因此,每次新数据到达时,我都需要从 cosmosdb 中读取数据。我不确定如何在流分析中做到这一点。以上是关于Azure 中的数据处理架构的主要内容,如果未能解决你的问题,请参考以下文章
Azure Databricks 将 JSON 数据写入 Parquet 文件引发错误:TypeError:无法推断类型的架构