Java Ingester for GreptimeDB
GreptimeDB 提供了用于高吞吐量数据写入的 ingester 库。 它使用 gRPC 协议,支持无 schema 写入,无需在写入数据前创建表。 更多信息请参考 自动生成表结构。
GreptimeDB 提供的 Java ingester SDK 是一个轻量级、高性能的客户端,专为高效的时间序列数据写入而设计。它利用 gRPC 协议提供非阻塞、纯异步的 API,在保持与应用程序无缝集成的同时提供高吞吐数据写入。
该客户端提供针对各种性能要求和使用场景优化的多种写入方法。你可以选择最适合你特定需求的方法——无论你需要低延迟操作的简单一元写入,还是处理大量时间序列数据时最大效率的高吞吐量批量流式传输。
架构
+-----------------------------------+
| Client Applications |
| +------------------+ |
| | Application Code | |
| +------------------+ |
+-------------+---------------------+
|
v
+-------------+---------------------+
| API Layer |
| +---------------+ |
| | GreptimeDB | |
| +---------------+ |
| / \ |
| v v |
| +-------------+ +-------------+ | +------------------+
| | BulkWrite | | Write | | | Data Model |
| | Interface | | Interface | |------->| |
| +-------------+ +-------------+ | | +------------+ |
+-------|----------------|----------+ | | Table | |
| | | +------------+ |
v v | | |
+-------|----------------|----------+ | v |
| Transport Layer | | +------------+ |
| +-------------+ +-------------+ | | | TableSchema| |
| | BulkWrite | | Write | | | +------------+ |
| | Client | | Client | | +------------------+
| +-------------+ +-------------+ |
| | \ / | |
| | \ / | |
| | v v | |
| | +-------------+ | |
| | |RouterClient | | |
+-----|--+-------------|---+--------+
| | | |
| | | |
v v v |
+-----|----------------|---|--------+
| Network Layer |
| +-------------+ +-------------+ |
| | Arrow Flight| | gRPC Client | |
| | Client | | | |
| +-------------+ +-------------+ |
| | | |
+-----|----------------|------------+
| |
v v
+-------------------------+
| GreptimeDB Server |
+-------------------------+
- API Layer:为客户端应用程序提供与 GreptimeDB 交互的上层接口
- Data Model:定义时间序列数据的结构和组织,包括表和 schemas
- Transport Layer:处理通信逻辑、请求路由和客户端管理
- Network Layer:使用 Arrow Flight 和 gRPC 底层协议通信
使用方法
安装
- 安装 Java 开发工具包(JDK)
确保你的系统已安装 JDK 8 或更高版本。有关如何检查 Java 版本并安装 JDK 的更多信息,请参见 Oracle JDK 安装概述文档
- 将 GreptimeDB Java SDK 添加为依赖项
如果你使用的是 Maven,请将以下内容添加到 pom.xml 的依赖项列表中:
<dependency>
<groupId>io.greptime</groupId>
<artifactId>ingester-all</artifactId>
<version>0.15.0</version>
</dependency>
最新版本可以在 这里 查看。
配置依赖项后,请确保它们对项目可用。这可能需要在 IDE 中刷新项目或运行依赖项管理器。
客户端初始化
GreptimeDB Ingester Java 客户端的入口点是 GreptimeDB 类。你可以通过调用静态创建方法并传入适当的配置选项来创建客户端实例。
// GreptimeDB 在默认目录 "greptime" 中有一个名为 "public" 的默认数据库,
// 我们可以将其用作测试数据库
String database = "public";
// 默认情况下,GreptimeDB 使用 gRPC 协议在端口 4001 上监听。
// 我们可以提供多个指向同一 GreptimeDB 集群的端点。
// 客户端将基于负载均衡策略调用这些端点。
// 客户端执行定期健康检查并自动将请求路由到健康节点,
// 为你的应用程序提供容错能力和改进的可靠性。
String[] endpoints = {"127.0.0.1:4001"};
// 设置认证信息。
AuthInfo authInfo = new AuthInfo("username", "password");
GreptimeOptions opts = GreptimeOptions.newBuilder(endpoints, database)
// 如果数据库不需要认证,我们可以使用 `AuthInfo.noAuthorization()` 作为参数。
.authInfo(authInfo)
// 如果你的服务器由 TLS 保护,请启用安全连接
//.tlsOptions(new TlsOptions())
// 好的开始 ^_^
.build();
// 初始化客户端
// 注意:客户端实例是线程安全的,应作为全局单例重用
// 以获得更好的性能和资源利用率。
GreptimeDB client = GreptimeDB.create(opts);