IoTDB 常见问题 QA 第四期

关于 IoTDB 的 Q & A

IoTDB Q&A 第四期来啦!我们将定期汇总我们将定期汇总社区讨论频繁的问题,并展开进行详细回答,通过积累常见问题“小百科”,方便大家使用 IoTDB。

Q1:Java 中如何使用 SSL 连接 IoTDB

outside_default.png

问题

Java 中如何使用 SSL 连接 IoTDB?

outside_default.png

方案

SSL(Secure Sockets Layer)是一种安全协议,用于在网络通信中提供加密、认证和数据完整性保护。它主要用于在互联网上保护数据传输,确保数据在传输过程中不被窃听或篡改。

IoTDB 支持 SSL 协议,但是在配置文件中相关参数是默认关闭的状态,如下:

# Does dn_rpc_port enable SSL
# effectiveMode: restart
# Datatype: boolean
enable_thrift_ssl=false# SSL key store path
# linux e.g. /home/iotdb/server.keystore (absolute path) or server.keystore (relative path)
# windows e.g. C:\\iotdb\\server.keystore (absolute path) or server.keystore (relative path)
# effectiveMode: restart
key_store_path=# SSL key store password
# effectiveMode: restart
# Datatype: String
key_store_pwd=

因此,我们需要开启 SSL,并配置 key_store 相关参数(可使用 Java 提供的 keytool 工具生成 SSL 证书),然后重启 IoTDB 服务。

enable_thrift_ssl=true
key_store_path=/iotdb/ssl/.keystore   #keystore的完整路径
key_store_pwd=password  #keystore的密码

重启成功后,可以先通过 CLI 窗口验证一下 SSL 是否配置成功。进入到 sbin 目录下,通过 ./start-cli.sh 命令启动,此时需要注意,开启 SSL 后,需要在执行命令的时候添加相应的参数:

./start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root -usessl true -ts /iotdb/ssl/.truststore -tpw 123456
# -usessl <use_ssl>            use_ssl statement 
# -ts <trust_store>            trust_store statement
# -tpw <trust_store_pwd>       trust_store_pwd statement

验证通过后,可以通过 IoTDB 提供的 Java 原生接口创建 SSL 连接。

Session 方式

  • useSSL:是否开启 SSL

  • trustStore:trustStore 的证书路径

  • trustStorePwd:trustStore 的证书密码(秘钥库口令)

session = new Session.Builder().fetchSize(int fetchSize).host(String host).port(String port).username(String username).password(String password).useSSL(true).trustStore("/iotdb/ssl/.truststore")  .trustStorePwd("password").build();

SessionPool 方式

  • useSSL:是否开启 SSL

  • trustStore:trustStore 的证书路径

  • trustStorePwd:trustStore 的证书密码(秘钥库口令)

sessionPool =new SessionPool.Builder().nodeUrls(List<String> nodeUrls).user(String username).password(String password).useSSL(true).trustStore("/iotdb/ssl/.truststore")  .trustStorePwd("password").build();

outside_default.png

备注

使用 keytool 工具生成 SSL 证书的简易步骤如下:

1. 生成密钥对:

keytool -genkeypair -alais mykey -keyalg RSA -validity 7 -keystore .keystore
# -alias:为你的密钥对指定一个别名,示例中为 mykey。
# -keyalg:指定密钥算法,示例中为 RSA。
# -validity:证书有效期,示例中为 7 天。
# -keystore:指定密钥库文件的名称,示例中为 .keystore。

2. 导出相应的证书:

keytool -export -alais mykey -keystore .keystore -rfc -file certificate.cer
# -alias:指定要从密钥库中导出的证书的别名,示例中为 mykey。
# -keystore:指定密钥库文件的位置和名称,示例中为当前目录下的 .keystore 文件。
# -rfc:指定导出证书的格式,示例中导出证书时使用 RFC 格式,这是一种更加通用的格式
# -file:指定导出的证书文件的名称,示例中导出的证书将被保存为当前目录下的 certificate.cer 文件。

3. 将该证书导入客户端信任库:

keytool -import -alais mykey -file certificate.cer -keystore .truststore
# -alias:指定导入证书的别名,示例中为 mykey。这个别名在信任库中必须是唯一的。
# -file:指定要导入的证书文件的路径和文件名,示例中为当前目录下的 certificate.cer 文件。
# -keystore:指定信任库文件的位置和名称,示例中为当前目录下的 .truststore 文件。

Q2:IoTDB 1.2 升级 1.3 后 Pipe 插件失效

outside_default.png

问题现象

客户使用 Pipe 功能将数据从 IoTDB 系统传输至 Kafka 集群,以便进行后续的数据处理与分析。在从企业版 1.2.5 升级至企业版 1.3.3.6 后,客户反馈 Kafka 的 consumer 无法接收到数据。经检查日志,发现存在以下报错:

e3b5776797a1fcd5a2d51e8fdb512ce0.jpeg

outside_default.png

问题原因

IoTDB 1.2 版本与 1.3 版本的 TsFile 包引用存在差异,导致插件中原本引用的 1.2 版本 TsFile 包下的 Tablet 类无法找到,进而使得 Kafka 插件无法正常发送数据,影响了数据从 IoTDB 系统到 Kafka 集群的传输流程。

outside_default.png

解决方案

1. 停止并删除原 Pipe

2. 删除原 Pipe 插件

3. 升级 Kafka Pipe 插件包:将 Kafka 插件包升级至匹配 1.3 版本 TsFile 的版本,确保其正确引用 1.3 版本的 TsFile 包,从而恢复数据传输功能;

4. 注册新的 Pipe 插件:完成插件包升级后,需注册新的 Pipe 插件;

5. 注册新的 Kafka Pipe:使用新注册的 Pipe 插件,创建并注册新的 Kafka Pipe,建立新的数据传输通道;

6. 检查新 Pipe 可用性:启动新的 Pipe 后,检查其是否能够正常运行并成功将数据发送至 Kafka。

Q3:Pipe 数据同步 InsertNode 内存结构过多导致 DataNode OOM 问题

outside_default.png

现象

在使用 IoTDB 1.3.3.5 及以下版本时,开启 Pipe 数据同步功能后,发送端 DataNode 频繁遭遇 Out of Memory(OOM)异常,而接收端节点(DataNode)却能正常运行。

2ebf7f1b201a6dca9ede6ee6ff384d2a.png

通过 Grafana 监控发现,发送端 DataNode  的 Heap Memory 中老年代存在部分内存无法随垃圾回收(GC)过程释放,随着运行时间的推移,最终导致 OOM 并使 DataNode 节点崩溃。

9c07bfb72516f6028c1afc1a0b382bcd.jpeg

进一步分析 dump 的内存文件,观察到 PipeInsertNodeTabletInsertionEvent 实例数量异常庞大,由此推测 OOM 问题与 Pipe 功能紧密相关。

outside_default.png

原因

经深入剖析,问题根源在于待同步的 InsertNode 请求实例在内存中大量堆积,却未能成功触发数据同步机制降级为 TsFile 同步,以释放占用的内存资源。由于内存无法得到有效释放,堆内内存持续被耗尽,最终引发 OOM 异常。

outside_default.png

解决方案

为彻底解决该问题,建议将 IoTDB 升级至 1.3.3.6 及以上版本。新版本针对 Pipe 数据同步内存管理进行了定向优化,有效避免了因 InsertNode 请求实例堆积导致的 OOM 问题,确保系统运行的稳定性和可靠性。

Q4:想从 IoTDB 中读取大量数据经过一定程度的分析再写入 MySQL 或 SQLServer,在这种需求下,哪一种 ETL 方案最适合

outside_default.png

问题

在需要从 IoTDB 读取大量数据,经过一定分析后写入 MySQL 或 SQL Server 的场景下,寻求最适合的 ETL(Extract,Transform,Load)方案。具体需求为定时查询一段时间内的数据,统计某些字段后写入 MySQL。同时,询问业界常用的 ETL 工具以及是否有无需编写代码的推荐方案。

outside_default.png

解答

自主开发方案

若采用 IoTDB 的查询语句,可考虑自行开发程序,结合流处理(Pipe)功能将数据推送至目标数据库。此方案具有高度灵活性,可根据具体业务需求进行定制化开发,但需要一定的编程基础和技术能力。

无需编写代码的 ETL 工具方案

对于不想编写代码的用户,推荐使用 DataX 或 Kettle 这两款 ETL 工具。

  • Kettle:可直接通过 JDBC 连接 IoTDB 进行操作,实现数据的读取、转换和加载。Kettle 提供了丰富的图形化界面,用户可通过拖拽组件的方式完成 ETL 流程的搭建,无需编写复杂代码,易于上手和使用。

  • DataX:需借助特定插件实现与 IoTDB 的连接。可参考以下 GitHub 仓库中的插件:https://github.com/alibaba/DataX/pull/2167。DataX 同样具备图形化界面,支持多种数据源之间的数据同步,能够满足从 IoTDB 到 MySQL 或 SQL Server 的数据迁移需求。

无论选择哪种工具,都建议先熟悉其使用方法和配置流程,以确保能够高效、准确地完成数据的 ETL 操作。

Q5:Pipe 数据同步提示内存不足,如何调整

outside_default.png

问题

在使用 IoTDB 1.3.3 版本进行 Pipe 数据同步时,数据发送方出现内存不足报错,具体信息为:“failed to allocate because there's too much memory for tablets, total memory size 4939212390 bytes, used memory for tablet size 1975791992 bytes”。即便在不同步历史数据的情况下,依然存在内存不足的问题。

询问是否存在专门控制 Pipe 占用内存的配置,或者是否可以通过调整其他参数来解决此问题。

d875c83bb9821c98606de27a793819bb.png

outside_default.png

解答

有两个方向进行调整:

1. Sink 插件参数调整

修改 Sink 插件的 batch.size-bytes 参数值。该参数控制每次批量发送数据的字节数大小。减小此参数值可降低每次发送数据时占用的内存,从而缓解内存压力。

2. 系统属性参数调整

在 iotdb-system.properties 配置文件中,进行以下两项参数设置:

  • pipe_all_sinks_rate_limit_bytes_per_second:该参数用于限制所有 Sink 的数据传输速率,单位为字节/秒。通过合理设置该参数值,可控制数据同步的速度,避免因数据传输过快导致内存消耗过大。可根据实际业务需求和系统资源情况,适当降低传输速率,以平衡内存使用和数据同步效率。

  • datanode_memory_proportion:此参数为内存控制的分配比例,用于调整 DataNode 分配给不同功能模块的内存比例。适当调整该参数值,可为 Pipe 数据同步功能分配更多的内存空间,但需注意不要过度分配,以免影响其他功能模块的正常运行。

在进行参数调整时,建议先在测试环境中进行验证,观察调整后的内存使用情况和数据同步效果。根据测试结果,逐步微调参数值,直至找到既能满足数据同步需求,又能有效控制内存使用的最佳配置。同时,建议密切关注系统运行状态和日志信息,以便及时发现并解决可能出现的其他问题。

规上企业应用实例

能源电力:中核武汉|国网信通产业集团|华润电力|大唐先一|上海电气国轩|清安储能|某储能厂商|太极股份

航天航空:中航机载共性|北邮一号卫星

钢铁、金属冶炼:宝武钢铁|中冶赛迪|中国恩菲

交通运输:中车四方|长安汽车|城建智控|德国铁路

智慧工厂与物联:PCB 龙头企业|博世力士乐|德国宝马|北斗智慧物联|京东|昆仑数据|怡养科技|绍兴安瑞思

bac20c1092e29bb70a2d0acd6d60fd9b.gif

d08208f12429a45d3650012ef35b429c.jpeg

4f65def3d62f28d086b2c007a385d096.jpeg

31e87213e54cbc867be6a1b1aef0d0fd.jpeg

3e7bb01e18c563a06bca20f5c0194d24.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/4465.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STM32-学习笔记-14-】FLASH闪存

文章目录 FALSH闪存一、FLASH简介二、FLASH基本结构三、FLASH解锁四、使用指针访问存储器五、FLASH擦除以及编程流程Ⅰ、程序存储器全擦除1. 读取FLASH_CR的LOCK位2. 检查LOCK位是否为13. 设置FLASH_CR的MER 1和STRT 1&#xff08;如果LOCK位0&#xff09;4. 检查FLASH_SR的B…

CamemBERT:一款出色的法语语言模型

摘要 预训练语言模型在自然语言处理中已无处不在。尽管这些模型取得了成功&#xff0c;但大多数可用模型要么是在英语数据上训练的&#xff0c;要么是在多种语言数据拼接的基础上训练的。这使得这些模型在除英语以外的所有语言中的实际应用非常有限。本文探讨了为其他语言训练…

线性代数概述

矩阵与线性代数的关系 矩阵是线性代数的研究对象之一&#xff1a; 矩阵&#xff08;Matrix&#xff09;是一个按照长方阵列排列的复数或实数集合&#xff0c;是线性代数中的核心概念之一。矩阵的定义和性质构成了线性代数中矩阵理论的基础&#xff0c;而矩阵运算则简洁地表示和…

金仓Kingbase客户端KStudio报OOM:Java heap space socketTimeout

找到Kingbase\ES\V8\KESRealPro\V008R006C006B0021\ClientTools\guitools\KStudio\KStudio.ini 修改JVM参数&#xff1a; 默认值&#xff1a; -Xms512m -Xmx1024m 改为&#xff1a; -Xms1024m -Xmx2048m -XX:MaxPermSize512m SQL查询报错&#xff1a;An I/O error occurred …

Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端

文章目录 一、概述二、使用1、创建接口HttpExchange方法2、创建一个在调用方法时执行请求的代理3、方法参数4、返回值5、错误处理&#xff08;1&#xff09;为RestClient&#xff08;2&#xff09;为WebClient&#xff08;3&#xff09;为RestTemplate 注意 一、概述 官方文档…

kubernetes学习-Service(七)

一、Service-pod-endpoint关系 # 查看endpoints [rootk8s-master deployments]# kubectl get endpoints NAME ENDPOINTS AGE kubernetes 192.168.129.136:6443 90m nginx-svc 10.109.131.1:80,10.111.156.65:80 22m # …

Python数据分析案例70——基于神经网络的时间序列预测(滞后性的效果,预测中存在的问题)

背景 这篇文章可以说是基于 现代的一些神经网络的方法去做时间序列预测的一个介绍科普&#xff0c;也可以说是一个各种模型对比的案例&#xff0c;但也会谈一谈自己做了这么久关于神经网络的时间序列预测的论文&#xff0c;其中一些常见的模式及它们存在的问题以及效果&#x…

opencv笔记2

图像灰度 彩色图像转化为灰度图像的过程是图像的灰度化处理。彩色图像中的每个像素的颜色由R&#xff0c;G&#xff0c;B三个分量决定&#xff0c;而每个分量中可取值0-255&#xff0c;这样一个像素点可以有256*256*256变化。而灰度图像是R&#xff0c;G&#xff0c;B三个分量…

LeetCode:2266. 统计打字方案数(DP Java)

目录 2266. 统计打字方案数 题目描述&#xff1a; 实现代码与解析&#xff1a; 动态规划 原理思路&#xff1a; 2266. 统计打字方案数 题目描述&#xff1a; Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。 为了 打出 一个字母&#xff0c;Alice 需要 按 对…

http://noi.openjudge.cn/——4.7算法之搜索——【169:The Buses】

题目 169:The Buses 总时间限制: 5000ms 内存限制: 65536kB 描述 A man arrives at a bus stop at 12:00. He remains there during 12:00-12:59. The bus stop is used by a number of bus routes. The man notes the times of arriving buses. The times when buses arrive …

java基础概念59-File

一、路径 二、File类 2-1、常见的构造方法 示例&#xff1a; 【注意】&#xff1a; 一般不自己用分割符把父路径和子路径拼接起来&#xff0c;因为&#xff0c;不用的操作系统&#xff0c;分隔符不同。 2-2、小结 2-3、File中常见的成员方法 示例&#xff1a; 【注意】&#…

PortSwigger靶场练习---第二关-查找和利用未使用的 API 端点

第二关&#xff1a;Finding and exploiting an unused API endpoint 实验&#xff1a;查找和利用未使用的 API 端点 PortSwigger靶场地址&#xff1a; Dashboard | Web Security Academy - PortSwigger 题目&#xff1a; 官方提示&#xff1a; 在 Burp 的浏览器中&#xff0c…

软路由系统iStoreOS 一键安装 docker compose

一键安装命令 大家好&#xff01;今天我来分享一个快速安装 docker-compose 的方法。以下是我常用的命令&#xff0c;当前版本是 V2.32.4。如果你需要最新版本&#xff0c;可以查看获取docker compose最新版本号 部分&#xff0c;获取最新版本号后替换命令中的版本号即可。 w…

SpringCloud nacos 2.0.0 + seata 2.0.0

NACOS 下载nacos https://github.com/alibaba/nacos/releases/tag/2.2.0 启动nacos startup.cmd -m standalone SEATA 下载seata https://seata.apache.org/release-history/seata-server 新建数据库-seata CREATE TABLE branch_table (branch_id bigint NOT NULL,xid …

springboot音乐播放器系统

Spring Boot音乐播放器系统是一个基于Spring Boot框架开发的音乐播放平台&#xff0c;旨在为用户提供高效、便捷的音乐播放体验。 一、系统背景与意义 随着互联网的飞速发展和人们对音乐娱乐需求的不断增长&#xff0c;音乐播放器已经成为人们日常生活中不可或缺的一部分。传…

奉加微PHY6230兼容性:部分手机不兼容

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…

Go-知识 版本演进

Go-知识 版本演进 Go release notesr56(2011/03/16)r57(2011/05/03)Gofix 工具语言包工具小修订 r58(2011/06/29)语言包工具小修订 r59(2011/08/01)语言包工具 r60(2011/09/07)语言包工具 [go1 2012-03-28](https://golang.google.cn/doc/devel/release#go1)[go1.1 2013-05-13]…

C#,入门教程(02)—— Visual Studio 2022开发环境搭建图文教程

如果这是您阅读的本专栏的第一篇博文&#xff0c;建议先阅读如何安装Visual Studio 2022。 C#&#xff0c;入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程https://blog.csdn.net/beijinghorn/article/details/123350910 一、简单准备 开始学习、编写程序…

数字艺术类专业人才供需数据获取和分析研究

本文章所用数据集&#xff1a;数据集 本文章所用源代码&#xff1a;源代码和训练好的模型 第1章 绪论 1.1研究背景及意义 随着社会经济的迅速发展和科技的飞速进步&#xff0c;数字艺术类专业正逐渐崛起&#xff0c;并呈现出蓬勃发展的势头。数字艺术作为创作、设计和表现形式的…

imbinarize函数用法详解与示例

一、函数概述 众所周知&#xff0c;im2bw函数可以将灰度图像转换为二值图像。但MATLAB中还有一个imbinarize函数可以将灰度图像转换为二值图像。imbinarize函数是MATLAB图像处理工具箱中用于将灰度图像或体数据二值化的工具。它可以通过全局或自适应阈值方法将灰度图像转换为二…