【问题标题】:InfluxDB 2.0 Killed by OOMInfluxDB 2.0 被 OOM 杀死
【发布时间】:2021-06-30 21:45:53
【问题描述】:

我是 InfluxDB 的新手,一开始我安装的是 1.8 版本,后来升级到 v2.0。 我将此视为一种开箱即用的方法,目前,我能够使用用于 PHP 的 https://github.com/influxdata/influxdb-client-php 客户端库和 30 秒超时的 5000 批设置插入到 influx 中。

我创建了 2 个保留期为 24 小时的存储桶,一个用于 15 分钟间隔数据,一个用于 60 分钟间隔数据。这个插入率大约是。每小时2100万。 暂时没有其他查询在服务器上运行。

我还没有考虑到基数,我试图下降 - 先实施并优化后面的路径,并期望摄取运行缓慢但不会崩溃。 以下是虚拟机上 htop 的快照,显示了 InfluxDB 的资源利用率。它持续使用大量 RAM,并在运行 6 小时后被 OOM Killer 杀死。

Here is a Snapshot of Htop output

【问题讨论】:

    标签: php influxdb data-ingestion influxdb-2


    【解决方案1】:

    您定义的架构是什么? 您应该首先检查您的系列基数,以减少由于大量数据插入而导致的资源使用。 InfluxDB 使用 TSI 作为时间序列索引,它将经常访问的数据拉入内存。 系列基数可以通过以下方式计算:

    series_cardinality = num_of_bucket * num_of_measurement * num_of_values_of_each_tag * num_of_field_keys
    

    如果您有无限的标签或测量值,它将导致失控的系列基数。因此,只需选择一个近似的架构,或限制标签和测量值,您就可以改进所需的资源。

    【讨论】:

      【解决方案2】:

      我建议您在您还是 influxdb 的新手时考虑替代方案。高基数问题在时间序列数据库的世界中非常常见,influx 在这里显示了平庸的结果。看起来你提到的库使用流入线协议,所以你可以试试VictoriaMetrics。查看有关 ingestionhigh cardinality benchmarks 的文章,了解我为什么建议切换。

      【讨论】: