使用流分析将数据插入 CosmosDB
Using Stream Analytics to insert data into CosmosDB
我的 CosmosDB 很忙,因此我丢失了数据,因为流分析器没有缓冲数据。
我当前的 Azure 设置如下:
WebAPI -> EventHub -> 流分析作业 -> CosmosDB
我的问题是,如果我及时启动我的流,然后它有很多记录,CosmosDB 很忙并且 returns HTTP 429(超出限制),这将导致我丢失数据.
有没有办法限制流分析作业,或者我应该做一个完全不同的设计来避免数据丢失?
根据您的描述,我建议您尝试更改设计以避免数据丢失,因为我们无法限制流分析作业。
我建议你可以尝试使用Stream Analytics Window functions's Tumbling Window。
Tumbling window functions are used to segment a data stream into distinct time segments and perform a function against them
我建议你可以使用这个函数来获取一段时间内的数据。然后你就可以把这些数据合并成一个文档存入数据库了。
例如,您可以将 windows 设置为 1 秒。这意味着您在一分钟内将 60 条记录插入数据库。
您为 collection 配置了多少 RU?您是否尝试过简单地扩展 collection 以满足需求? CosmosDB 最近还引入了 RU/minute 的概念,它可以在背压场景中提供帮助,因为一旦您超过了预配的每秒吞吐量,它就会提供额外的吞吐量。
This article 很好地介绍了如何使用 RU/minute。
The Azure Dev blog talks about this more in detail。文章中的相关引用(粗体是我强调的)
为了测试 RU/m,我们在开发环境中设计了追赶或故障恢复测试。之前我们为 collection 分配了 300K RU/s。我们启用了 RU/m 并将计算能力从 300K RU/s 秒减少到 100K RU/s 秒。这给了我们额外的 1M RU/m。为了将我们的写入推到极限并测试我们的追赶场景,我们模拟了上游故障。 我们停止直播大约 20 个小时。然后我们开始流式传输积压数据并观察应用程序是否可以赶上较低的 RU/s 加上额外的 RU/m。 开发环境的负载也与我们在生产环境中看到的相同。
根据以下 MSDN ASA 实际上确实在 429 上重试,我只是预料到另一种行为。
https://blogs.msdn.microsoft.com/streamanalytics/2016/04/18/troubleshooting-azure-stream-analytics-jobs-on-new-portal-2/
我的 CosmosDB 很忙,因此我丢失了数据,因为流分析器没有缓冲数据。
我当前的 Azure 设置如下:
WebAPI -> EventHub -> 流分析作业 -> CosmosDB
我的问题是,如果我及时启动我的流,然后它有很多记录,CosmosDB 很忙并且 returns HTTP 429(超出限制),这将导致我丢失数据.
有没有办法限制流分析作业,或者我应该做一个完全不同的设计来避免数据丢失?
根据您的描述,我建议您尝试更改设计以避免数据丢失,因为我们无法限制流分析作业。
我建议你可以尝试使用Stream Analytics Window functions's Tumbling Window。
Tumbling window functions are used to segment a data stream into distinct time segments and perform a function against them
我建议你可以使用这个函数来获取一段时间内的数据。然后你就可以把这些数据合并成一个文档存入数据库了。
例如,您可以将 windows 设置为 1 秒。这意味着您在一分钟内将 60 条记录插入数据库。
您为 collection 配置了多少 RU?您是否尝试过简单地扩展 collection 以满足需求? CosmosDB 最近还引入了 RU/minute 的概念,它可以在背压场景中提供帮助,因为一旦您超过了预配的每秒吞吐量,它就会提供额外的吞吐量。
This article 很好地介绍了如何使用 RU/minute。
The Azure Dev blog talks about this more in detail。文章中的相关引用(粗体是我强调的)
为了测试 RU/m,我们在开发环境中设计了追赶或故障恢复测试。之前我们为 collection 分配了 300K RU/s。我们启用了 RU/m 并将计算能力从 300K RU/s 秒减少到 100K RU/s 秒。这给了我们额外的 1M RU/m。为了将我们的写入推到极限并测试我们的追赶场景,我们模拟了上游故障。 我们停止直播大约 20 个小时。然后我们开始流式传输积压数据并观察应用程序是否可以赶上较低的 RU/s 加上额外的 RU/m。 开发环境的负载也与我们在生产环境中看到的相同。
根据以下 MSDN ASA 实际上确实在 429 上重试,我只是预料到另一种行为。 https://blogs.msdn.microsoft.com/streamanalytics/2016/04/18/troubleshooting-azure-stream-analytics-jobs-on-new-portal-2/