InfluxDB 3.0 中处理部分写入

导航到

我们最近调整了使用 v2 写入 API 处理 InfluxDB Cloud Serverless 产品中的“部分写入”的方式。这仅适用于 InfluxDB Cloud Serverless 客户(那些在 2023 年 1 月 31 日之后创建云账户的客户)。在未来不久,我们将为 InfluxDB Cloud 专用和 InfluxDB 集群客户也实施这一变更。

部分写入现在始终返回 400 状态码。在大多数情况下,您不需要做任何事情,只需注意这种行为。如果您直接使用 v2 写入 REST API,请确保您的代码处理 204 和 400 返回码,并知道当返回 400 时,并不意味着所有行都没有写入(好行将被写入)。如果您想了解更多关于此变更的信息和背景,请继续阅读。

什么是部分写入?

最常见的情况是,数据以“批量”的形式写入 InfluxDB,即一次写入多条。如果由于某种原因,批量中的某些行无法写入,我们将其称为“部分写入”。

什么条件可以导致部分写入?

导致部分写入的最常见条件是行协议中的错误。批量行使用行协议格式,这需要特定的语法。如果特定行的语法有错误,则该行无法写入。

部分写入返回什么状态码?

部分写入的状态码现在是始终为 400。

之前是什么?

在 Cloud Serverless 中,在某些情况下可能会返回 204。这符合 Cloud2 的行为。在 Cloud2 中,数据首先写入摄入队列(我们使用了 Apache Kafka),然后作为次要操作,数据写入数据库。当数据写入摄入队列时,无法检测到所有行协议错误(例如,模式不一致)。因此,我们承认已收到数据,在完全验证之前返回 204 响应。当数据验证时,如果有任何写入行存在问题,这些行将写入单独的 Cloud 2 存储桶(_monitoring),以便客户可以查看并纠正任何有问题的行。这个“_monitoring”存储桶在 Cloud Serverless/InfluxDB 3.0 中不存在,因此继续在部分写入时返回此状态码没有意义。

默认情况下,InfluxDB Cloud Dedicated 或 InfluxDB Clustered 不支持部分写入,但对我们已启用此功能的客户,状态码有时可能是 201。

部分写入还会返回什么内容?

当返回 400 时,还会返回批处理中前 100 条失败的行——因此,如果只有几行出现异常,您的代码可以知道哪些行失败了。

未来

我们的计划是不对此进行任何额外的更改。然而,我们确实有一个 v3 写入 API 计划,将完全重新审视这个问题,希望增加一些更多选项,并更好地处理部分写入。我们不打算弃用 v2 写入 API;您仍然可以使用两者(实际上您仍然可以使用 v1)。这将是一个具有更多功能的新 v3 选项——包括一些新的数据类型(预告)。

联系我们的销售团队,开始使用 InfluxDB Cloud Dedicated 或 Clustered。