diff --git a/src/.vuepress/sidebar_timecho/V1.3.3/zh.ts b/src/.vuepress/sidebar_timecho/V1.3.3/zh.ts
index e4a00e0d0..9fe10e08b 100644
--- a/src/.vuepress/sidebar_timecho/V1.3.3/zh.ts
+++ b/src/.vuepress/sidebar_timecho/V1.3.3/zh.ts
@@ -137,7 +137,12 @@ export const zhSidebar = {
prefix: 'API/',
// children: 'structure',
children: [
- { text: 'Java原生接口', link: 'Programming-Java-Native-API' },
+ { text: 'Java原生接口', collapsible: true,
+ children: [
+ { text: 'Java原生API', link: 'Programming-Java-Native-API' },
+ { text: '数据订阅API', link: 'Programming-Data-Sync' },
+ ],
+ },
{ text: 'Python原生接口', link: 'Programming-Python-Native-API' },
{ text: 'C++原生接口', link: 'Programming-Cpp-Native-API' },
{ text: 'Go原生接口', link: 'Programming-Go-Native-API' },
diff --git a/src/zh/UserGuide/latest/API/Programming-Data-Sync.md b/src/zh/UserGuide/latest/API/Programming-Data-Sync.md
new file mode 100644
index 000000000..76eebf23c
--- /dev/null
+++ b/src/zh/UserGuide/latest/API/Programming-Data-Sync.md
@@ -0,0 +1,247 @@
+
+
+# 数据订阅API
+IoTDB 提供了强大的数据订阅功能,允许用户通过订阅SDK实时获取IoTDB新增的数据。详细的功能定义及介绍:[数据订阅](../../User-Manual/Data-Sync_timecho.md#数据同步)
+
+## 1 核心步骤
+
+1. 创建Topic:创建一个Topic,Topic中包含希望订阅的测点。
+2. 订阅Topic:在 consumer 订阅 topic 前,topic 必须已经被创建,否则订阅会失败。同一个 consumer group 下的 consumers 会均分数据。
+3. 消费数据:只有显式订阅了某个 topic,才会收到对应 topic 的数据。
+4. 取消订阅: consumer close 时会退出对应的 consumer group,同时取消现存的所有订阅。
+
+
+## 2 详细步骤
+本章节用于说明开发的核心流程,并未演示所有的参数和接口,如需了解全部功能及参数请参见: [全量接口说明](./Programming-Java-Native-API.md#全量接口说明)
+
+
+### 2.1 创建maven项目
+创建一个maven项目,并导入以下依赖(JDK >= 1.8, Maven >= 3.6)
+
+```xml
+
+
+ org.apache.iotdb
+ iotdb-session
+
+ ${project.version}
+
+
+```
+
+### 2.2 代码案例
+#### 2.2.1 Topic操作
+```java
+import java.util.Optional;
+import java.util.Properties;
+import java.util.Set;
+import org.apache.iotdb.rpc.IoTDBConnectionException;
+import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.rpc.subscription.config.TopicConstant;
+import org.apache.iotdb.session.subscription.SubscriptionSession;
+import org.apache.iotdb.session.subscription.model.Topic;
+
+public class DataConsumerExample {
+
+ public static void main(String[] args) throws IoTDBConnectionException, StatementExecutionException {
+ try (SubscriptionSession session = new SubscriptionSession("127.0.0.1", 6667)) {
+ // 1. open session
+ session.open();
+
+ // 2. create a topic of all data
+ Properties sessionConfig = new Properties();
+ sessionConfig.put(TopicConstant.PATH_KEY, "root.**");
+
+ session.createTopic("allData", sessionConfig);
+
+ // 3. show all topics
+ Set topics = session.getTopics();
+ System.out.println(topics);
+
+ // 4. show a specific topic
+ Optional allData = session.getTopic("allData");
+ System.out.println(allData.get());
+ }
+ }
+}
+```
+#### 2.2.2 数据消费
+
+##### 场景-1: 订阅IoTDB中新增的实时数据(大屏或组态展示的场景)
+
+```java
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+import org.apache.iotdb.rpc.subscription.config.ConsumerConstant;
+import org.apache.iotdb.rpc.subscription.config.TopicConstant;
+import org.apache.iotdb.session.subscription.consumer.SubscriptionPullConsumer;
+import org.apache.iotdb.session.subscription.payload.SubscriptionMessage;
+import org.apache.iotdb.session.subscription.payload.SubscriptionMessageType;
+import org.apache.iotdb.session.subscription.payload.SubscriptionSessionDataSet;
+import org.apache.tsfile.read.common.RowRecord;
+
+public class DataConsumerExample {
+
+ public static void main(String[] args) throws IOException {
+
+ // 5. create a pull consumer, the subscription is automatically cancelled when the logic in the try resources is completed
+ Properties consumerConfig = new Properties();
+ consumerConfig.put(ConsumerConstant.CONSUMER_ID_KEY, "c1");
+ consumerConfig.put(ConsumerConstant.CONSUMER_GROUP_ID_KEY, "cg1");
+ consumerConfig.put(ConsumerConstant.CONSUME_LISTENER_KEY, TopicConstant.FORMAT_SESSION_DATA_SETS_HANDLER_VALUE);
+ try (SubscriptionPullConsumer pullConsumer = new SubscriptionPullConsumer(consumerConfig)) {
+ pullConsumer.open();
+ pullConsumer.subscribe("topic_all");
+ while (true) {
+ List messages = pullConsumer.poll(10000);
+ for (final SubscriptionMessage message : messages) {
+ final short messageType = message.getMessageType();
+ if (SubscriptionMessageType.isValidatedMessageType(messageType)) {
+ for (final SubscriptionSessionDataSet dataSet : message.getSessionDataSetsHandler()) {
+ while (dataSet.hasNext()) {
+ final RowRecord record = dataSet.next();
+ System.out.println(record);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+
+```
+##### 场景-2:订阅新增的 TsFile(定期数据备份的场景)
+
+前提:需要被消费的topic的格式为TsfileHandler类型,举例:`create topic topic_all_tsfile with ('path'='root.**','format'='TsFileHandler')`
+
+```java
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+import org.apache.iotdb.rpc.subscription.config.ConsumerConstant;
+import org.apache.iotdb.rpc.subscription.config.TopicConstant;
+import org.apache.iotdb.session.subscription.consumer.SubscriptionPullConsumer;
+import org.apache.iotdb.session.subscription.payload.SubscriptionMessage;
+
+
+public class DataConsumerExample {
+
+ public static void main(String[] args) throws IOException {
+ // 1. create a pull consumer, the subscription is automatically cancelled when the logic in the try resources is completed
+ Properties consumerConfig = new Properties();
+ consumerConfig.put(ConsumerConstant.CONSUMER_ID_KEY, "c1");
+ consumerConfig.put(ConsumerConstant.CONSUMER_GROUP_ID_KEY, "cg1");
+ // 2. Specify the consumption type as the tsfile type
+ consumerConfig.put(TopicConstant.FORMAT_KEY, TopicConstant.FORMAT_TS_FILE_HANDLER_VALUE);
+ consumerConfig.put(ConsumerConstant.FILE_SAVE_DIR_KEY, "/Users/iotdb/Downloads");
+ try (SubscriptionPullConsumer pullConsumer = new SubscriptionPullConsumer(consumerConfig)) {
+ pullConsumer.open();
+ pullConsumer.subscribe("topic_all_tsfile");
+ while (true) {
+ List messages = pullConsumer.poll(10000);
+ for (final SubscriptionMessage message : messages) {
+ message.getTsFileHandler().copyFile("/Users/iotdb/Downloads/1.tsfile");
+ }
+ }
+ }
+ }
+}
+```
+
+
+
+
+## 2 全量接口说明
+
+### 2.1 参数列表
+可通过Properties参数对象设置消费者相关参数,具体参数如下。
+
+#### 2.1.1 SubscriptionConsumer
+
+
+| 参数 | 是否必填(默认值) | 参数含义 |
+| :-------------------------------------------- | :--------------------------------- | :----------------------------------------------------------- |
+| host | optional: 127.0.0.1 | `String`: IoTDB 中某 DataNode 的 RPC host |
+| port | optional: 6667 | `Integer`: IoTDB 中某 DataNode 的 RPC port |
+| node-urls | optional: 127.0.0.1:6667 | `List`: IoTDB 中所有 DataNode 的 RPC 地址,可以是多个;host:port 和 node-urls 选填一个即可。当 host:port 和 node-urls 都填写了,则取 host:port 和 node-urls 的**并集**构成新的 node-urls 应用 |
+| username | optional: root | `String`: IoTDB 中 DataNode 的用户名 |
+| password | optional: root | `String`: IoTDB 中 DataNode 的密码 |
+| groupId | optional | `String`: consumer group id,若未指定则随机分配(新的 consumer group),保证不同的 consumer group 对应的 consumer group id 均不相同 |
+| consumerId | optional | `String`: consumer client id,若未指定则随机分配,保证同一个 consumer group 中每一个 consumer client id 均不相同 |
+| heartbeatIntervalMs | optional: 30000 (min: 1000) | `Long`: consumer 向 IoTDB DataNode 定期发送心跳请求的间隔 |
+| endpointsSyncIntervalMs | optional: 120000 (min: 5000) | `Long`: consumer 探测 IoTDB 集群节点扩缩容情况调整订阅连接的间隔 |
+| fileSaveDir | optional: Paths.get(System.getProperty("user.dir"), "iotdb-subscription").toString() | `String`: consumer 订阅出的 TsFile 文件临时存放的目录路径 |
+| fileSaveFsync | optional: false | `Boolean`: consumer 订阅 TsFile 的过程中是否主动调用 fsync |
+
+`SubscriptionPushConsumer` 中的特殊配置:
+
+| 参数 | 是否必填(默认值) | 参数含义 |
+| :-------------------------------------------- | :--------------------------------- | :----------------------------------------------------------- |
+| ackStrategy | optional: `ACKStrategy.AFTER_CONSUME` | 消费进度的确认机制包含以下选项:`ACKStrategy.BEFORE_CONSUME`(当 consumer 收到数据时立刻提交消费进度,`onReceive` 前)`ACKStrategy.AFTER_CONSUME`(当 consumer 消费完数据再去提交消费进度,`onReceive` 后) |
+| consumeListener | optional | 消费数据的回调函数,需实现 `ConsumeListener` 接口,定义消费 `SessionDataSetsHandler` 和 `TsFileHandler` 形式数据的处理逻辑 |
+| autoPollIntervalMs | optional: 5000 (min: 500) | Long: consumer 自动拉取数据的时间间隔,单位为**毫秒** |
+| autoPollTimeoutMs | optional: 10000 (min: 1000) | Long: consumer 每次拉取数据的超时时间,单位为**毫秒** |
+
+`SubscriptionPullConsumer` 中的特殊配置:
+
+| 参数 | 是否必填(默认值) | 参数含义 |
+| :-------------------------------------------- | :--------------------------------- | :----------------------------------------------------------- |
+| autoCommit | optional: true | Boolean: 是否自动提交消费进度如果此参数设置为 false,则需要调用 `commit` 方法来手动提交消费进度 |
+| autoCommitInterval | optional: 5000 (min: 500) | Long: 自动提交消费进度的时间间隔,单位为**毫秒**仅当 autoCommit 参数为 true 的时候才会生效 |
+
+
+### 函数列表
+#### 数据订阅
+##### SubscriptionPullConsumer
+
+| **函数名** | **说明** | **参数** |
+|-------------------------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `open()` | 打开消费者连接,启动消息消费。如果 `autoCommit` 启用,会启动自动提交工作器。 | 无 |
+| `close()` | 关闭消费者连接。如果 `autoCommit` 启用,会在关闭前提交所有未提交的消息。 | 无 |
+| `poll(final Duration timeout)` | 拉取消息,指定超时时间。 | `timeout` : 拉取的超时时间。 |
+| `poll(final long timeoutMs)` | 拉取消息,指定超时时间(毫秒)。 | `timeoutMs` : 超时时间,单位为毫秒。 |
+| `poll(final Set topicNames, final Duration timeout)` | 拉取指定主题的消息,指定超时时间。 | `topicNames` : 要拉取的主题集合。`timeout`: 超时时间。 |
+| `poll(final Set topicNames, final long timeoutMs)` | 拉取指定主题的消息,指定超时时间(毫秒)。 | `topicNames` : 要拉取的主题集合。`timeoutMs`: 超时时间,单位为毫秒。 |
+| `commitSync(final SubscriptionMessage message)` | 同步提交单条消息。 | `message` : 需要提交的消息对象。 |
+| `commitSync(final Iterable messages)` | 同步提交多条消息。 | `messages` : 需要提交的消息集合。 |
+| `commitAsync(final SubscriptionMessage message)` | 异步提交单条消息。 | `message` : 需要提交的消息对象。 |
+| `commitAsync(final Iterable messages)` | 异步提交多条消息。 | `messages` : 需要提交的消息集合。 |
+| `commitAsync(final SubscriptionMessage message, final AsyncCommitCallback callback)` | 异步提交单条消息并指定回调函数。 | `message` : 需要提交的消息对象。`callback` : 异步提交完成后的回调函数。 |
+| `commitAsync(final Iterable messages, final AsyncCommitCallback callback)` | 异步提交多条消息并指定回调函数。 | `messages` : 需要提交的消息集合。`callback` : 异步提交完成后的回调函数。 |
+
+##### SubscriptionPushConsumer
+
+| **函数名** | **说明** | **参数** |
+|-------------------------------------|----------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `open()` | 打开消费者连接,启动消息消费,提交自动轮询工作器。 | 无 |
+| `close()` | 关闭消费者连接,停止消息消费。 | 无 |
+| `toString()` | 返回消费者对象的核心配置信息。 | 无 |
+| `coreReportMessage()` | 获取消费者核心配置的键值对表示形式。 | 无 |
+| `allReportMessage()` | 获取消费者所有配置的键值对表示形式。 | 无 |
+| `buildPushConsumer()` | 通过 `Builder` 构建 `SubscriptionPushConsumer` 实例。 | 无 |
+| `ackStrategy(final AckStrategy ackStrategy)` | 配置消费者的消息确认策略。 | `ackStrategy`: 指定的消息确认策略。 |
+| `consumeListener(final ConsumeListener consumeListener)` | 配置消费者的消息消费逻辑。 | `consumeListener`: 消费者接收消息时的处理逻辑。 |
+| `autoPollIntervalMs(final long autoPollIntervalMs)` | 配置自动轮询的时间间隔。 | `autoPollIntervalMs` : 自动轮询的间隔时间,单位为毫秒。 |
+| `autoPollTimeoutMs(final long autoPollTimeoutMs)` | 配置自动轮询的超时时间。 | `autoPollTimeoutMs`: 自动轮询的超时时间,单位为毫秒。 |
+
diff --git a/src/zh/UserGuide/latest/API/Programming-Java-Native-API.md b/src/zh/UserGuide/latest/API/Programming-Java-Native-API.md
index 8c68005d8..3e38fbda7 100644
--- a/src/zh/UserGuide/latest/API/Programming-Java-Native-API.md
+++ b/src/zh/UserGuide/latest/API/Programming-Java-Native-API.md
@@ -1,792 +1,495 @@
-# Java 原生接口
+# Session原生API
-## 安装
+IoTDB 原生 API 中的 Session 是实现与数据库交互的核心接口,它集成了丰富的方法,支持数据写入、查询以及元数据操作等功能。通过实例化 Session,能够建立与 IoTDB 服务器的连接,在该连接所构建的环境中执行各类数据库操作。Session为非线程安全,不能被多线程同时调用。
-### 依赖
+SessionPool 是 Session 的连接池,推荐使用SessionPool编程。在多线程并发的情形下,SessionPool 能够合理地管理和分配连接资源,以提升系统性能与资源利用效率。
-* JDK >= 1.8
-* Maven >= 3.6
+## 1 步骤概览
+1. 创建连接池实例:初始化一个SessionPool对象,用于管理多个Session实例。
+2. 执行操作:直接从SessionPool中获取Session实例,并执行数据库操作,无需每次都打开和关闭连接。
+3. 关闭连接池资源:在不再需要进行数据库操作时,关闭SessionPool,释放所有相关资源。
-### 在 MAVEN 中使用原生接口
+## 2 详细步骤
+本章节用于说明开发的核心流程,并未演示所有的参数和接口,如需了解全部功能及参数请参见: [全量接口说明](./Programming-Java-Native-API.md#) 或 查阅: [源码](https://github.com/apache/iotdb/tree/master/example/session/src/main/java/org/apache/iotdb)
+
+### 2.1 创建maven项目
+创建一个maven项目,并在pom.xml文件中添加以下依赖(JDK >= 1.8, Maven >= 3.6)
```xml
org.apache.iotdb
iotdb-session
+
${project.version}
```
-
-## 语法说明
-
- - 对于 IoTDB-SQL 接口:传入的 SQL 参数需要符合 [语法规范](../User-Manual/Syntax-Rule.md#字面值常量) ,并且针对 JAVA 字符串进行反转义,如双引号前需要加反斜杠。(即:经 JAVA 转义之后与命令行执行的 SQL 语句一致。)
- - 对于其他接口:
- - 经参数传入的路径或路径前缀中的节点: 在 SQL 语句中需要使用反引号(`)进行转义的,此处均需要进行转义。
- - 经参数传入的标识符(如模板名):在 SQL 语句中需要使用反引号(`)进行转义的,均可以不用进行转义。
- - 语法说明相关代码示例可以参考:`example/session/src/main/java/org/apache/iotdb/SyntaxConventionRelatedExample.java`
-
-## 基本接口说明
-
-下面将给出 Session 对应的接口的简要介绍和对应参数:
-
-### Session管理
-
-* 初始化 Session
-
-``` java
-// 全部使用默认配置
-session = new Session.Builder.build();
-
-// 指定一个可连接节点
-session =
- new Session.Builder()
- .host(String host)
- .port(int port)
- .build();
-
-// 指定多个可连接节点
-session =
- new Session.Builder()
- .nodeUrls(List nodeUrls)
- .build();
-
-// 其他配置项
-session =
- new Session.Builder()
- .fetchSize(int fetchSize)
- .username(String username)
- .password(String password)
- .thriftDefaultBufferSize(int thriftDefaultBufferSize)
- .thriftMaxFrameSize(int thriftMaxFrameSize)
- .enableRedirection(boolean enableRedirection)
- .version(Version version)
- .build();
-```
-
-其中,version 表示客户端使用的 SQL 语义版本,用于升级 0.13 时兼容 0.12 的 SQL 语义,可能取值有:`V_0_12`、`V_0_13`、`V_1_0`等。
-
-
-* 开启 Session
-
-``` java
-void open()
-```
-
-* 开启 Session,并决定是否开启 RPC 压缩
-
-``` java
-void open(boolean enableRPCCompression)
-```
-
-注意: 客户端的 RPC 压缩开启状态需和服务端一致
-
-* 关闭 Session
-
-``` java
-void close()
-```
-
-* SessionPool
-
-我们提供了一个针对原生接口的连接池 (`SessionPool`),使用该接口时,你只需要指定连接池的大小,就可以在使用时从池中获取连接。
-如果超过 60s 都没得到一个连接的话,那么会打印一条警告日志,但是程序仍将继续等待。
-
-当一个连接被用完后,他会自动返回池中等待下次被使用;
-当一个连接损坏后,他会从池中被删除,并重建一个连接重新执行用户的操作;
-你还可以像创建 Session 那样在创建 SessionPool 时指定多个可连接节点的 url,以保证分布式集群中客户端的高可用性。
-
-对于查询操作:
-
-1. 使用 SessionPool 进行查询时,得到的结果集是`SessionDataSet`的封装类`SessionDataSetWrapper`;
-2. 若对于一个查询的结果集,用户并没有遍历完且不再想继续遍历时,需要手动调用释放连接的操作`closeResultSet`;
-3. 若对一个查询的结果集遍历时出现异常,也需要手动调用释放连接的操作`closeResultSet`.
-4. 可以调用 `SessionDataSetWrapper` 的 `getColumnNames()` 方法得到结果集列名
-
-使用示例可以参见 `session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java`
-
-或 `example/session/src/main/java/org/apache/iotdb/SessionPoolExample.java`
-
-
-### 测点管理接口
-
-#### Database 管理
-
-* 设置 database
-
-``` java
-void setStorageGroup(String storageGroupId)
-```
-
-* 删除单个或多个 database
-
-``` java
-void deleteStorageGroup(String storageGroup)
-void deleteStorageGroups(List storageGroups)
-```
-#### 时间序列管理
-
-* 创建单个或多个时间序列
-
-``` java
-void createTimeseries(String path, TSDataType dataType,
- TSEncoding encoding, CompressionType compressor, Map props,
- Map tags, Map attributes, String measurementAlias)
-
-void createMultiTimeseries(List paths, List dataTypes,
- List encodings, List compressors,
- List