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.mzph.cn/bicheng/68611.shtml

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

相关文章

Python 爬虫学习指南与资料分享

Python爬虫学习资料 Python爬虫学习资料 Python爬虫学习资料 在数字化浪潮中&#xff0c;Python 爬虫作为强大的数据获取工具&#xff0c;为众多领域提供关键支持。想要系统掌握这门技术&#xff0c;以下的学习指南与资料分享将为你照亮前行道路。 一、学习指南 入门奠基 …

解决后端接口返回Long类型参数导致的精度丢失问题

问题描述 在开发过程中&#xff0c;我们遇到了一个有趣的问题&#xff1a;后端接口返回的Long类型参数&#xff0c;在不同浏览器中解析出的结果不一致。具体表现为&#xff0c;对于应该返回的ID 283232039247028226&#xff0c;前端在使用某些浏览器&#xff08;如火狐和谷歌&…

Json转换类型报错问题:java.lang.Integer cannot be cast to java.math.BigDecimal

Json转换类型报错问题&#xff1a;java.lang.Integer cannot be cast to java.math.BigDecimal 小坑规避指南 小坑规避指南 项目中遇到json格式转换成Map&#xff0c;已经定义了Map的key和value的类型&#xff0c;但是在遍历Map取值的时候出现了类型转换的报错问题&#xff08…

数据结构——队列和栈(介绍、类型、Java手搓实现循环队列)

我是一个计算机专业研0的学生卡蒙Camel&#x1f42b;&#x1f42b;&#x1f42b;&#xff08;刚保研&#xff09; 记录每天学习过程&#xff08;主要学习Java、python、人工智能&#xff09;&#xff0c;总结知识点&#xff08;内容来自&#xff1a;自我总结网上借鉴&#xff0…

python http server运行Angular 单页面路由时重定向,解决404问题

问题 当Angular在本地ng server运行时候&#xff0c;可以顺利访问各级路由。 但是运行ng build后&#xff0c;在dist 路径下的打包好的额index.html 必须要在服务器下运行才能加载。 在服务器下我们第一次访问路由页面时是没有问题的&#xff0c;但是尝试刷新页面或手动输入路…

SQL表间关联查询详解

简介 本文主要讲解SQL语句中常用的表间关联查询方式&#xff0c;包括&#xff1a;左连接&#xff08;left join&#xff09;、右连接&#xff08;right join&#xff09;、全连接&#xff08;full join&#xff09;、内连接&#xff08;inner join&#xff09;、交叉连接&…

Android Jni(一) 快速使用

文章目录 Android Jni&#xff08;一&#xff09; 快速使用1、 环境配置下载 NDK2、右键 add c to module3、创建一个 native 方法&#xff0c;并更具提示&#xff0c;自动创建对应的 JNI 实现4、实现对应 Jni 方法5、static loadLibrary6、调用执行 遇到的问题1、[CXX1300] CM…

【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发之常见布局

目录 1 -> 自适应布局 1.1 -> 线性布局 1.1.1 -> 线性布局的排列 1.1.2 -> 自适应拉伸 1.1.3 -> 自适应缩放 1.1.4 -> 定位能力 1.1.5 -> 自适应延伸 1.2 -> 层叠布局 1.2.1 -> 对齐方式 1.2.2 -> Z序控制 1.3 -> 弹性布局 1.3.1…

React 中hooks之useLayoutEffect 用法总结以及与useEffect的区别

React useLayoutEffect 1. useLayoutEffect 基本概念 useLayoutEffect 是 React 的一个 Hook&#xff0c;它的函数签名与 useEffect 完全相同&#xff0c;但它会在所有的 DOM 变更之后同步调用 effect。它可以用来读取 DOM 布局并同步触发重渲染。 2. useLayoutEffect vs us…

物联网网关Web服务器--Boa服务器移植与测试

1、Boa服务器介绍 BOA 服务器是一个小巧高效的web服务器&#xff0c;是一个运行于unix或linux下的&#xff0c;支持CGI的、适合于嵌入式系统的单任务的http服务器&#xff0c;源代码开放、性能高。 Boa 嵌入式 web 服务器的官方网站是http://www.boa.org/。 特点 轻量级&#x…

tomcat状态一直是Exited (1)

docker run -di -p 80:8080 --nametomcat001 你的仓库地址/tomcat:9执行此命令后tomcat一直是Exited(1)状态 解决办法&#xff1a; 用以下命令创建运行 docker run -it --name tomcat001 -p 80:8080 -d 你的仓库地址/tomcat:9 /bin/bash最终结果 tomcat成功启动

三天急速通关Java基础知识:Day1 基本语法

三天急速通关JAVA基础知识&#xff1a;Day1 基本语法 0 文章说明1 关键字 Keywords2 注释 Comments2.1 单行注释2.2 多行注释2.3 文档注释 3 数据类型 Data Types3.1 基本数据类型3.2 引用数据类型 4 变量与常量 Variables and Constant5 运算符 Operators6 字符串 String7 输入…

表单中在不设置required的情况下在label前加*必填标识

参考:https://blog.csdn.net/qq_55798464/article/details/136233718 需求&#xff1a;在发票类型前面添加*必填标识 我最开始直接给发票类型这个表单类型添加了验证规则required:true&#xff0c;问题来了&#xff0c;这个发票类型它是有默认值的&#xff0c;所以我点击保存…

基于PHP的校园兼职系统的设计与开发

摘要&#xff1a;从古代至今&#xff0c;教育都是国家培养人才的手段&#xff0c;在古代教育往往都是课堂式教育&#xff0c;在课堂内老师教导学生学习&#xff0c;而随着时间的推移&#xff0c;越来越多的在校大学生已经不满足于只在课堂上所学到的知识&#xff0c;往往他们选…

Java异常常见面试题

目录 1. Error 和 Exception 区别是什么&#xff1f; 2. 运行时异常和一般异常(受检异常)区别是什么&#xff1f; 3. JVM 是如何处理异常的&#xff1f; 4. throw 和 throws 的区别是什么&#xff1f; 5. final、finally、finalize 有什么区别&#xff1f; 6. NoClassDef…

2025寒假备战蓝桥杯01---朴素二分查找的学习

文章目录 1.暴力方法的引入2.暴力解法的思考 与改进3.朴素二分查找的引入4.朴素二分查找的流程5.朴素二分查找的细节6.朴素二分查找的题目 1.暴力方法的引入 对于下面的这个有序的数据元素的组合&#xff0c;我们的暴力解法就是挨个进行遍历操作&#xff0c;一直找到和我们的这…

ROS机器人学习和研究的势-道-术-转型和变革的长期主义习惯

知易行难。说说容易做到难。 例如&#xff0c;不受成败评价影响&#xff0c;坚持做一件事情10年以上&#xff0c;专注事情本身。 机器人专业不合格且失败讲师如何让内心保持充盈的正能量&#xff08;节选&#xff09;-CSDN博客 时间积累 注册20年。 创作历程10年。 创作10年…

渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法

目录 原理 XML语言解释 什么是xml语言&#xff1a; 以PHP举例xml外部实体注入 XML语言结构 面试题目 如何寻找xxe漏洞 XEE漏洞修复域防御 提高版本 代码修复 php java python 手动黑名单过滤(不推荐) 一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区 原理 XXE&…

大模型GUI系列论文阅读 DAY1:《基于大型语言模型的图形用户界面智能体:综述》

摘要 图形用户界面&#xff08;Graphical User Interfaces, GUIs&#xff09;长期以来一直是人机交互的核心&#xff0c;为用户提供了直观且以视觉为驱动的方式来访问和操作数字系统。传统上&#xff0c;GUI交互的自动化依赖于基于脚本或规则的方法&#xff0c;这些方法在固定…

BUUCTF_Web([GYCTF2020]Ezsqli)

1.输入1 &#xff0c;正常回显。 2.输入1 &#xff0c;报错false&#xff0c;为字符型注入&#xff0c;单引号闭合。 原因&#xff1a; https://mp.csdn.net/mp_blog/creation/editor/145170456 3.尝试查询字段&#xff0c;回显位置&#xff0c;数据库&#xff0c;都是这个。…