醋醋百科网

Good Luck To You!

【工业物联网数据治理】最新版时序数据库Influxdb 3 Core (补充)

官方资料:

  • https://docs.influxdata.com/influxdb3/core/get-started/
  • https://docs.influxdata.com/influxdb3/core/visualize-data/
  • https://superset.apache.org/docs/intro
  • 关于开源版的72小时限制 https://www.influxdata.com/blog/influxdb3-open-source-public-alpha-jan-27/

1. 安装

1.1. 使用docker安装

1.1.1. 拉取镜像

目前dockerhub无该版本镜像,需要使用quay.io的仓库下载

docker pull quay.io/influxdb/influxdb3-core

0623更新:docker pull influxdb:3-core

https://quay.io/repository/influxdb/influxdb3-core?tab=tags



20250423更新


1.1.2. 启动

# FILESYSTEM USING DOCKER
# Create a mount
# Provide the mount path
docker run -d --name influxdb3 \
 -p 8181:8181 \
 -v /data/influxdb3:/data/influxdb3 \
 quay.io/influxdb/influxdb3-core:latest serve \
 --node-id local01 \
 --object-store file \
 --data-dir /data/influxdb3

报错提示PermissionDenied

解决:检查挂载目录是否有足够权限。/data/influxdb3(执行chmod 777 influxdb3)

启动成功,端口为8181

8181 端口,这是 influxdb3 服务器默认的 HTTP 连接端口。也可以映射到其他端口

创建权限token(可选)

influxdb3 create token --admin \
 --host http://localhost:8181

记录返回的token

apiv3_TV_Hk_Sf0pC0Hew8oN0774hWu971HVMRChp10hTYK-LWk4gHW-z-igH9lhZztlq0cOIiQz-3HkRbYoF2AtKQhQ

写入数据

influxdb3 write \
  --database mydb \
  --token apiv3_TV_Hk_Sf0pC0Hew8oN0774hWu971HVMRChp10hTYK-LWk4gHW-z-igH9lhZztlq0cOIiQz-3HkRbYoF2AtKQhQ \
  --precision ns \
  --accept-partial \
'cpu,host=Alpha,region=us-west,application=webserver val=1i,usage_percent=20.5,status="OK"
cpu,host=Bravo,region=us-east,application=database val=2i,usage_percent=55.2,status="OK"
cpu,host=Charlie,region=us-west,application=cache val=3i,usage_percent=65.4,status="OK"
cpu,host=Bravo,region=us-east,application=database val=4i,usage_percent=70.1,status="Warn"
cpu,host=Bravo,region=us-central,application=database val=5i,usage_percent=80.5,status="OK"
cpu,host=Alpha,region=us-west,application=webserver val=6i,usage_percent=25.3,status="Warn"'

查询数据

influxdb3 query \
--database mydb 
--token "apiv3_w-9sdjqe780PfnT5KT0nHaRqDtk8UEze6sMIzEkkvsd273Y1J5QYWQC-cV33ToZ1nb8cUs_INTcABJAgcGMuCQ" 
"SELECT * FROM cpu WHERE time >= now() - interval '5 minutes'"

1.2. UI界面-influxdb3-explorer

拉取镜像

docker pull quay.io/influxdb/influxdb3-explorer:latest

创建挂载目录

https://docs.influxdata.com/influxdb3/explorer/

mkdir -m 700 /opt/influxdb3-explorer/db
mkdir -m 755 /opt/influxdb3-explorer/config
mkdir -m 755 /opt/influxdb3-explorer/ssl
docker run --detach \
  --name influxdb3-explorer \
  --publish 8086:80 \
  --publish 8889:8888 \
  --volume /opt/influxdb3-explorer/config:/app-root/config:ro \
  --volume /opt/influxdb3-explorer/db:/db:rw \
  --volume /opt/influxdb3-explorer/ssl:/etc/nginx/ssl:ro \
  quay.io/influxdb/influxdb3-explorer:latest \
  --mode=admin

--mode参数:

  • Query mode (default): 只读
  • Admin mode: 允许全部操作

访问http://localhost:8086并配置连接信息

注意:由于是容器部署,localhost是influxdb3-explorer自身所在容器的位置,肯定是访问不到influxdb3 serve服务的。

进入查询页面

通过【view code】可以很方便看到当前查询语句多种不同用法下的样式(记一下:可以考虑开发一个idea插件

2. 使用

2.1. 查询

还有一种是“使用 InfluxQL 和 HTTP API 查询”具体看官方文档:
https://docs.influxdb.org.cn/influxdb3/core/query-data/execute-queries/influxdb-v3-api/

使用 SQL 和 HTTP API 查询

/api/v3/query_sql 端点与 GETPOST 请求方法一起使用。

  • GET:在 URL 查询字符串中传递参数(用于简单查询)
  • POST:在 JSON 对象中传递参数(用于复杂查询和代码可读性)

包括以下参数

  • q: (必需) 要执行的 SQL 查询。
  • db: (必需) 要对其执行查询的数据库。
  • params: 包含要在参数化查询中使用的参数的 JSON 对象。
  • format: 响应的格式 (json, jsonl, csv, pretty, 或 parquet)。 JSONL (jsonl) 是首选格式,因为它将结果流式传输回客户端。 pretty 用于人类可读的输出。 默认值为 json

2.1.1. 使用get

curl --get http://localhost:18181/api/v3/query_sql  \
--header "Authorization: Token apiv3_TV_Hk_Sf0pC0Hew8oN0774hWu971HVMRChp10hTYK-LWk4gHW-z-igH9lhZztlq0cOIiQz-3HkRbYoF2AtKQhQ"   \
--data-urlencode "db=mydb"   \
--data-urlencode "q=SELECT * FROM cpu" \
--data-urlencode "format=jsonl"

注意:format参数用于控制响应格式 (json, jsonl, csv, pretty, 或 parquet)。 JSONL (jsonl) 是首选格式,因为它将结果流式传输回客户端。 pretty 用于人类可读的输出。 默认值为 json。

如下各种不同情况的对比

2.1.2. 使用post

--data

curl http://localhost:18181/api/v3/query_sql  \
--header "Authorization: Token apiv3_TV_Hk_Sf0pC0Hew8oN0774hWu971HVMRChp10hTYK-LWk4gHW-z-igH9lhZztlq0cOIiQz-3HkRbYoF2AtKQhQ"   \
--data '{"db": "mydb", "q": "select * from cpu limit 5", "format": "jsonl"}'

同“--json

curl http://localhost:18181/api/v3/query_sql  \
--header "Authorization: Token apiv3_TV_Hk_Sf0pC0Hew8oN0774hWu971HVMRChp10hTYK-LWk4gHW-z-igH9lhZztlq0cOIiQz-3HkRbYoF2AtKQhQ"   \
--json '{"db": "mydb", "q": "select * from cpu limit 5", "format": "jsonl"}'

获得响应结果

2.2. 客户端集成

https://docs.influxdata.com/influxdb3/core/reference/client-libraries/

使用 InfluxDB 3 客户端库

我们建议使用 InfluxDB 3 客户端库 将 InfluxDB 3 与您的应用程序代码集成。客户端库封装了 Apache Arrow Flight 客户端,并为 写入查询 和处理存储在 InfluxDB 3 Core 中的数据提供了便捷的方法。

2.2.1. Arrow Flight RPC(Java Flight SQL)

https://docs.influxdata.com/influxdb3/core/reference/client-libraries/flight/java-flightsql/

2.2.2. V3 cient libraries(Java客户端库)

https://docs.influxdata.com/influxdb3/core/reference/client-libraries/v3/java/

目前最新为1.0.0
https://github.com/InfluxCommunity/influxdb3-java/

<dependency>
  <groupId>com.influxdb</groupId>
  <artifactId>influxdb3-java</artifactId>
  <version>1.0.0</version>
</dependency>

示例

package com.influxdata.demo;

import com.influxdb.v3.client.InfluxDBClient;
import com.influxdb.v3.client.Point;
import com.influxdb.v3.client.query.QueryOptions;
import com.influxdb.v3.client.query.QueryType;

import java.time.Instant;
import java.util.stream.Stream;

public class HelloInfluxDB {
  private static final String HOST_URL = "https://localhost:8181"; // your cluster URL
  private static final String DATABASE = "DATABASE_NAME"; // your InfluxDB database name 
  private static final char[] TOKEN = System.getenv("DATABASE_TOKEN"); // a local environment variable that stores your database token

  // Create a client instance that writes and queries data in your database.
  public static void main(String[] args) {
    // Instantiate the client with your InfluxDB credentials
    try (InfluxDBClient client = InfluxDBClient.getInstance(HOST_URL, TOKEN, DATABASE)) {
      writeData(client);
      queryData(client);
    }
    catch (Exception e) {
      System.err.println("An error occurred while connecting to InfluxDB!");
      e.printStackTrace();
    }
  }

  // Use the Point class to construct time series data.
  private static void writeData(InfluxDBClient client) {
    Point point = Point.measurement("temperature")
                       .setTag("location", "London")
                       .setField("value", 30.01)
                       .setTimestamp(Instant.now().minusSeconds(10));
    try {
      client.writePoint(point);
      System.out.println("Data is written to the database.");
    }
    catch (Exception e) {
      System.err.println("Failed to write data to the database.");
      e.printStackTrace();
    }
  }

  // Use SQL to query the most recent 10 measurements
  private static void queryData(InfluxDBClient client) {
    System.out.printf("--------------------------------------------------------%n");
    System.out.printf("| %-8s | %-8s | %-30s |%n", "location", "value", "time");
    System.out.printf("--------------------------------------------------------%n");

    String sql = "select time,location,value from temperature order by time desc limit 10";
    try (Stream<Object[]> stream = client.query(sql)) {
      stream.forEach(row -> System.out.printf("| %-8s | %-8s | %-30s |%n", row[1], row[2], row[0]));
    }
    catch (Exception e) {
      System.err.println("Failed to query data from the database.");
      e.printStackTrace();
    }
  }
}

注意:关于arrow和jdk兼容性

https://arrow.apache.ac.cn/docs/java/install.html#id3

java命令中需要添加参数 --add-opens=java.base/java.nio=ALL-UNNAMED

3. 示例数据

https://docs.influxdata.com/influxdb3/core/reference/sample-data/#home-sensor-data

4. Parquet存储文件

当infludb3设置为文件存储模式,会已parquet文件存储数据。到数据目录下,可以看到已经按每10分钟生成了持久化的parquet文件。

4.1. 关于生成parquet的条件和规则

InfluxDB 3 Core 会定期快照 WAL(Write-Ahead Log)并将其持久化为 Parquet 文件。默认情况下,服务器会缓冲最多 900 个 WAL 文件(相当于 15 分钟的数据),并尝试持久化最旧的 10 分钟数据,同时保留最近的 5 分钟数据。如果你写入的数据量非常小,可能不足以触发快照操作。你可以尝试以下方法:

  • 增加数据写入量:写入更多的数据,以确保有足够的数据量触发快照操作。
  • 调整快照间隔:通过配置 wal-snapshot-size 参数,减少触发快照的 WAL 文件数量。例如,将 wal-snapshot-size 设置为 300,可以更频繁地触发快照

参考:

https://docs.influxdb.org.cn/influxdb3/core/reference/config-options/

https://docs.influxdata.com/influxdb3/core/reference/config-options/

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言