Project Icon

influxdb-client-java

InfluxDB 2.x Java客户端库支持多种编程语言和数据操作

influxdb-client-java是InfluxDB 2.x的官方Java客户端库,支持Java、Reactive、Kotlin和Scala等多种编程语言。该库提供数据查询、写入和管理功能,支持Flux语言查询和多种数据写入方式。除了完整支持InfluxDB 2.x API,它还兼容InfluxDB 1.7+的Flux查询,为用户提供灵活高效的数据操作体验。

influxdb-client-java

CircleCI codecov License Maven Central Maven Site GitHub issues GitHub pull requests Slack Status

本仓库包含用于InfluxDB 2.x和Flux的Java客户端库。目前已实现Java、Reactive、Kotlin和Scala客户端。InfluxDB 3.x用户应改用轻量级的v3客户端库。InfluxDB 1.x用户应使用v1客户端库

为了便于迁移并提供一致的查询和写入体验,v2用户应考虑使用InfluxQL和v1客户端库

文档

本节包含客户端库文档的链接。

功能

  • InfluxDB 2.x客户端
    • 使用Flux语言查询数据
    • 使用InfluxQL查询数据
    • 使用以下方式写入数据
    • InfluxDB 2.x管理API客户端,用于管理
      • 数据源、存储桶
      • 任务
      • 授权
      • 健康检查
      • ...
  • 支持通过InfluxDB 1.7+ REST API(/api/v2/query端点)使用Flux语言进行查询

客户端

已为InfluxDB 2.x实现了Java、Reactive、OSGi、Kotlin和Scala客户端:

客户端描述文档兼容性
[Java](https://github.com/influxdata/influxdb-client-java/blob/master/./client参考Java客户端,允许查询、写入和管理InfluxDB 2.x。Javadoc,[自述文件](https://github.com/influxdata/influxdb-client-java/blob/master/./client#influxdb-client-java/2.x
[响应式](https://github.com/influxdata/influxdb-client-java/blob/master/./client-reactiveInfluxDB 2.x的参考RxJava客户端,允许以响应式方式进行查询和写入。Javadoc,[自述文件](https://github.com/influxdata/influxdb-client-java/blob/master/./client-reactive#influxdb-client-reactive/2.x
[Kotlin](https://github.com/influxdata/influxdb-client-java/blob/master/./client-kotlin参考Kotlin客户端,通过Kotlin ChannelFlow协程允许对InfluxDB 2.x进行查询和写入。KDoc,[自述文件](https://github.com/influxdata/influxdb-client-java/blob/master/./client-kotlin#influxdb-client-kotlin/2.x
[Scala](https://github.com/influxdata/influxdb-client-java/blob/master/./client-scala参考Scala客户端,通过Pekko Streams允许对InfluxDB 2.x进行查询和写入。Scaladoc,[自述文件](https://github.com/influxdata/influxdb-client-java/blob/master/./client-scala#influxdb-client-scala/2.x
[OSGi](https://github.com/influxdata/influxdb-client-java/blob/master/./client-osgi参考OSGi (R6)客户端,嵌入Java和响应式客户端,并为InfluxDB 2.x提供标准功能(声明性服务、配置、事件处理)。Javadoc,[自述文件](https://github.com/influxdata/influxdb-client-java/blob/master/./client-osgi2.x
[Karaf](https://github.com/influxdata/influxdb-client-java/blob/master/./karafInfluxDB 2.x的Apache Karaf功能定义。[自述文件](https://github.com/influxdata/influxdb-client-java/blob/master/./karaf2.x

还可以使用以下方式通过Flux语言操作InfluxDB 1.7+:

最后一个有用的部分是 **[flux-dsl](https://github.com/influxdata/influxdb-client-java/blob/master/./flux-dsl**,它通过查询构建器模式帮助构造Flux查询:

Flux flux = Flux
    .from("telegraf")
    .window(15L, ChronoUnit.MINUTES, 20L, ChronoUnit.SECONDS)
    .sum();

如何使用

这些客户端托管在Maven中央仓库中。 如果你想在 Maven 中使用它,你只需添加对该构件的依赖即可。

InfluxDB 2.x 中的写入和查询

以下示例演示了如何使用 Flux 语言向 InfluxDB 2.x 写入数据并读取数据。

安装

下载最新版本:

Maven 依赖:
<dependency>
    <groupId>com.influxdb</groupId>
    <artifactId>influxdb-client-java</artifactId>
    <version>7.2.0</version>
</dependency>
或者使用 Gradle:
dependencies {
    implementation "com.influxdb:influxdb-client-java:7.2.0"
}
package example;

import java.time.Instant;
import java.util.List;

import com.influxdb.annotations.Column;
import com.influxdb.annotations.Measurement;
import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;
import com.influxdb.client.QueryApi;
import com.influxdb.client.WriteApiBlocking;
import com.influxdb.client.domain.WritePrecision;
import com.influxdb.client.write.Point;
import com.influxdb.query.FluxRecord;
import com.influxdb.query.FluxTable;

public class InfluxDB2Example {

    private static char[] token = "my-token".toCharArray();
    private static String org = "my-org";
    private static String bucket = "my-bucket";

    public static void main(final String[] args) {

        InfluxDBClient influxDBClient = InfluxDBClientFactory.create("http://localhost:8086", token, org, bucket);

        //
        // 写入数据
        //
        WriteApiBlocking writeApi = influxDBClient.getWriteApiBlocking();

        //
        // 通过数据点写入
        //
        Point point = Point.measurement("temperature")
                .addTag("location", "west")
                .addField("value", 55D)
                .time(Instant.now().toEpochMilli(), WritePrecision.MS);

        writeApi.writePoint(point);

        //
        // 通过行协议写入
        //
        writeApi.writeRecord(WritePrecision.NS, "temperature,location=north value=60.0");

        //
        // 通过 POJO 写入
        //
        Temperature temperature = new Temperature();
        temperature.location = "south";
        temperature.value = 62D;
        temperature.time = Instant.now();

        writeApi.writeMeasurement( WritePrecision.NS, temperature);

        //
        // 查询数据
        //
        String flux = "from(bucket:\"my-bucket\") |> range(start: 0)";

        QueryApi queryApi = influxDBClient.getQueryApi();

        List<FluxTable> tables = queryApi.query(flux);
        for (FluxTable fluxTable : tables) {
            List<FluxRecord> records = fluxTable.getRecords();
            for (FluxRecord fluxRecord : records) {
                System.out.println(fluxRecord.getTime() + ": " + fluxRecord.getValueByKey("_value"));
            }
        }

        influxDBClient.close();
    }

    @Measurement(name = "temperature")
    private static class Temperature {

        @Column(tag = true)
        String location;

        @Column
        Double value;

        @Column(timestamp = true)
        Instant time;
    }
}

使用管理 API 在 InfluxDB 2.x 中创建新的 Bucket

以下示例演示了如何使用 InfluxDB 2.x 管理 API。有关更多信息,请参阅客户端文档

安装

下载最新版本:

Maven 依赖:
<dependency>
    <groupId>com.influxdb</groupId>
    <artifactId>influxdb-client-java</artifactId>
    <version>7.2.0</version>
</dependency>
或者使用 Gradle:
dependencies {
    implementation "com.influxdb:influxdb-client-java:7.2.0"
}
package example;

import java.util.Arrays;

import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;
import com.influxdb.client.domain.Authorization;
import com.influxdb.client.domain.Bucket;
import com.influxdb.client.domain.Permission;
import com.influxdb.client.domain.PermissionResource;
import com.influxdb.client.domain.BucketRetentionRules;

public class InfluxDB2ManagementExample {

    private static char[] token = "my-token".toCharArray();

    public static void main(final String[] args) {

        InfluxDBClient influxDBClient = InfluxDBClientFactory.create("http://localhost:8086", token);

        //
        // 创建数据保留时间设置为 3,600 秒的 "iot_bucket" bucket
        //
        BucketRetentionRules retention = new BucketRetentionRules();
        retention.setEverySeconds(3600);

        Bucket bucket = influxDBClient.getBucketsApi().createBucket("iot-bucket", retention, "12bdc4164c2e8141");

        //
        // 创建 "iot_bucket" 的访问令牌
        //
        PermissionResource resource = new PermissionResource();
        resource.setId(bucket.getId());
        resource.setOrgID("12bdc4164c2e8141");
        resource.setType(PermissionResource.TYPE_BUCKETS);
// 读取权限
Permission read = new Permission();
read.setResource(resource);
read.setAction(Permission.ActionEnum.READ);

// 写入权限
Permission write = new Permission();
write.setResource(resource);
write.setAction(Permission.ActionEnum.WRITE);

Authorization authorization = influxDBClient.getAuthorizationsApi()
        .createAuthorization("12bdc4164c2e8141", Arrays.asList(read, write));

//
// 创建可用于向"iot_bucket"写入的令牌
//
String token = authorization.getToken();
System.out.println("令牌:" + token);

influxDBClient.close();
}
}

### InfluxDB 1.8 API 兼容性

[InfluxDB 1.8.0 引入了与 InfluxDB 2.x 的前向兼容 API](https://docs.influxdata.com/influxdb/v1.8/tools/api/#influxdb-2-0-api-compatibility-endpoints)。这使您可以轻松地从 InfluxDB 1.x 迁移到 InfluxDB 2.x 云服务或开源版本。

以下是可用的前向兼容 API:

| API | 端点 | 描述 |
|:----------|:----------|:----------|
| [QueryApi.java](https://github.com/influxdata/influxdb-client-java/blob/master/client/src/main/java/com/influxdb/client/QueryApi.java | [/api/v2/query](https://docs.influxdata.com/influxdb/latest/tools/api/#api-v2-query-http-endpoint) | 使用 InfluxDB 2.x API 和 [Flux](https://docs.influxdata.com/flux/latest/) 在 InfluxDB 1.8.0+ 中查询数据(端点应通过 [`flux-enabled` 选项](https://docs.influxdata.com/influxdb/latest/administration/config/#flux-enabled-false) 启用)|
| [WriteApi.java](https://github.com/influxdata/influxdb-client-java/blob/master/client/src/main/java/com/influxdb/client/WriteApi.java | [/api/v2/write](https://docs.influxdata.com/influxdb/latest/tools/api/#api-v2-write-http-endpoint) | 使用 InfluxDB 2.x API 向 InfluxDB 1.8.0+ 写入数据 |
| [health()](https://github.com/influxdata/influxdb-client-java/blob/master/client/src/main/java/com/influxdb/client/InfluxDBClient.java#L236 | [/health](https://docs.influxdata.com/influxdb/latest/tools/api/#health-http-endpoint) | 检查 InfluxDB 实例的健康状况 |

详细信息请参阅 [InfluxDB 1.8 示例](https://github.com/influxdata/influxdb-client-java/blob/master/examples/src/main/java/example/InfluxDB18Example.java)。

### InfluxDB 1.7+ 中的 Flux 查询

以下示例演示了使用 Flux 语言进行查询。

#### 安装

下载最新版本:

##### Maven 依赖:

```XML
<dependency>
    <groupId>com.influxdb</groupId>
    <artifactId>influxdb-client-flux</artifactId>
    <version>7.2.0</version>
</dependency>
或者使用 Gradle:
dependencies {
    implementation "com.influxdb:influxdb-client-flux:7.2.0"
}
package example;

import java.util.List;

import com.influxdb.client.flux.FluxClient;
import com.influxdb.client.flux.FluxClientFactory;
import com.influxdb.query.FluxRecord;
import com.influxdb.query.FluxTable;

public class FluxExample {

    public static void main(String[] args) {

        FluxClient fluxClient = FluxClientFactory.create("http://localhost:8086/");

        //
        // Flux
        //
        String flux = "from(bucket: \"telegraf\")\n" +
                " |> range(start: -1d)" +
                " |> filter(fn: (r) => (r[\"_measurement\"] == \"cpu\" and r[\"_field\"] == \"usage_system\"))" +
                " |> sample(n: 5, pos: 1)";

        //
        // 同步查询
        //
        List<FluxTable> tables = fluxClient.query(flux);

        for (FluxTable fluxTable : tables) {
            List<FluxRecord> records = fluxTable.getRecords();
            for (FluxRecord fluxRecord : records) {
                System.out.println(fluxRecord.getTime() + ": " + fluxRecord.getValueByKey("_value"));
            }
        }

        //
        // 异步查询
        //
        fluxClient.query(flux, (cancellable, record) -> {

            // 处理 flux 查询结果记录
            System.out.println(record.getTime() + ": " + record.getValue());

        }, error -> {

            // 处理结果时的错误处理
            System.out.println("发生错误:"+ error.getMessage());

        }, () -> {

            // 完成时
            System.out.println("查询完成");
        });

        fluxClient.close();
    }
}

构建要求

  • Java 17+(已在JDK 17上测试)
  • :警告: 如果您想使用较旧版本的JDK,必须使用6.x版本的客户端。
  • Maven 3.0+(已在maven 3.5.0上测试)
  • 正在运行的Docker守护进程
  • 最新的InfluxDB 2.x和InfluxDB 1.X docker实例,可以使用./scripts/influxdb-restart.sh脚本启动

准备好这些后,您可以使用以下命令构建influxdb-client-java并运行所有测试:

$ mvn clean install

如果您本地没有运行Docker,可以通过将-DskipTests标志设置为true来跳过测试:

$ mvn clean install -DskipTests=true

如果您正在运行Docker,但无法通过localhost访问(例如,您在Mac上使用docker-machine),可以设置可选的环境变量来指向正确的IP地址和端口:

  • INFLUXDB_IP
  • INFLUXDB_PORT_API
  • INFLUXDB_2_IP
  • INFLUXDB_2_PORT_API
$ export INFLUXDB_IP=192.168.99.100
$ mvn test

贡献

如果您想贡献代码,可以通过GitHub fork仓库并向master分支发送拉取请求。

许可证

InfluxDB 2.x JVM基础客户端是根据MIT许可证发布的。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号