diff --git a/docs/zh/05-get-started/03-package.md b/docs/zh/05-get-started/03-package.md
index f1896e9c0a43087bc85f156dea89d71859105f07..4c6757b930e03c50c36aaf2308bf8d73419ce433 100644
--- a/docs/zh/05-get-started/03-package.md
+++ b/docs/zh/05-get-started/03-package.md
@@ -9,47 +9,49 @@ import PkgListV3 from "/components/PkgListV3";
TDengine 完整的软件包包括服务端(taosd)、用于与第三方系统对接并提供 RESTful 接口的 taosAdapter、应用驱动(taosc)、命令行程序 (CLI,taos) 和一些工具软件,目前服务端 taosd 和 taosAdapter 仅在 Linux 系统上安装和运行,后续将支持 Windows、macOS 等系统。应用驱动 taosc 与 TDengine CLI 可以在 Windows 或 Linux 上安装和运行。TDengine 除了提供多种语言的连接器之外,还通过 [taosAdapter](../../reference/taosadapter/) 提供 [RESTful 接口](../../reference/rest-api/)。
-在 Linux 系统上,TDengine 开源版本提供 deb 和 rpm 格式安装包,用户可以根据自己的运行环境选择合适的安装包。其中 deb 支持 Debian/Ubuntu 及衍生系统,rpm 支持 CentOS/RHEL/SUSE 及衍生系统。同时我们也为企业用户提供 tar.gz 格式安装包,也支持通过 `apt-get` 工具从线上进行安装。TDengine 也提供 Windows x64 平台的安装包。您也可以[用 Docker 立即体验](../../get-started/docker/)。如果您希望对 TDengine 贡献代码或对内部实现感兴趣,请参考我们的 [TDengine GitHub 主页](https://github.com/taosdata/TDengine) 下载源码构建和安装.
-
为方便使用,标准的服务端安装包包含了 taos、taosd、taosAdapter、taosdump、taosBenchmark、TDinsight 安装脚本和示例代码;如果您只需要用到服务端程序和客户端连接的 C/C++ 语言支持,也可以仅下载 lite 版本的安装包。
-在安装包格式上,我们提供 tar.gz, rpm 和 deb 格式,为企业客户提供 tar.gz 格式安装包,以方便在特定操作系统上使用。需要注意的是,rpm 和 deb 包不含 taosdump 和 TDinsight 安装脚本,这些工具需要通过安装 taosTool 包获得。
+在 Linux 系统上,TDengine 开源版本提供 deb 和 rpm 格式安装包,用户可以根据自己的运行环境选择合适的安装包。其中 deb 支持 Debian/Ubuntu 及衍生系统,rpm 支持 CentOS/RHEL/SUSE 及衍生系统。同时我们也为企业用户提供 tar.gz 格式安装包,也支持通过 `apt-get` 工具从线上进行安装。TDengine 也提供 Windows x64 平台的安装包。您也可以[用 Docker 立即体验](../../get-started/docker/)。需要注意的是,rpm 和 deb 包不含 taosdump 和 TDinsight 安装脚本,这些工具需要通过安装 taosTool 包获得。如果您希望对 TDengine 贡献代码或对内部实现感兴趣,请参考我们的 [TDengine GitHub 主页](https://github.com/taosdata/TDengine) 下载源码构建和安装.
+
## 安装
-1. 从列表中下载获得 deb 安装包,例如 TDengine-server-3.0.0.0-Linux-x64.deb;
+1. 从列表中下载获得 deb 安装包;
-2. 进入到 TDengine-server-3.0.0.0-Linux-x64.deb 安装包所在目录,执行如下的安装命令:
+2. 进入到安装包所在目录,执行如下的安装命令:
```bash
-sudo dpkg -i TDengine-server-3.0.0.0-Linux-x64.deb
+# 替换为下载的安装包版本
+sudo dpkg -i TDengine-server--Linux-x64.deb
```
-1. 从列表中下载获得 rpm 安装包,例如 TDengine-server-3.0.0.0-Linux-x64.rpm;
+1. 从列表中下载获得 rpm 安装包;
-2. 进入到 TDengine-server-3.0.0.0-Linux-x64.rpm 安装包所在目录,执行如下的安装命令:
+2. 进入到安装包所在目录,执行如下的安装命令:
```bash
-sudo rpm -ivh TDengine-server-3.0.0.0-Linux-x64.rpm
+# 替换为下载的安装包版本
+sudo rpm -ivh TDengine-server--Linux-x64.rpm
```
-1. 从列表中下载获得 tar.gz 安装包,例如 TDengine-server-3.0.0.0-Linux-x64.tar.gz;
+1. 从列表中下载获得 tar.gz 安装包;
-2. 进入到 TDengine-server-3.0.0.0-Linux-x64.tar.gz 安装包所在目录,先解压文件后,进入子目录,执行其中的 install.sh 安装脚本:
+2. 进入到安装包所在目录,先解压文件后,进入子目录,执行其中的 install.sh 安装脚本:
```bash
-tar -zxvf TDengine-server-3.0.0.0-Linux-x64.tar.gz
+# 替换为下载的安装包版本
+tar -zxvf TDengine-server--Linux-x64.tar.gz
```
解压后进入相应路径,执行
@@ -66,9 +68,9 @@ install.sh 安装脚本在执行过程中,会通过命令行交互界面询问
-1. 从列表中下载获得 exe 安装程序,例如 TDengine-server-3.0.0.0-Windows-x64.exe;
+1. 从列表中下载获得 exe 安装程序;
-2. 运行 TDengine-server-3.0.0.0-Windows-x64.exe 来安装 TDengine。
+2. 运行可执行程序来安装 TDengine。
diff --git a/docs/zh/07-develop/07-tmq.mdx b/docs/zh/07-develop/07-tmq.mdx
index c9ac17808175841cd048d06a9460a8e1bb44bd51..c487835e2d93668c1848584bb3974785787ceee0 100644
--- a/docs/zh/07-develop/07-tmq.mdx
+++ b/docs/zh/07-develop/07-tmq.mdx
@@ -132,6 +132,58 @@ func (c *Consumer) Unsubscribe() error
+
+
+```rust
+impl TBuilder for TmqBuilder
+ fn from_dsn(dsn: D) -> Result
+ fn build(&self) -> Result
+
+impl AsAsyncConsumer for Consumer
+ async fn subscribe, I: IntoIterator- + Send>(
+ &mut self,
+ topics: I,
+ ) -> Result<(), Self::Error>;
+ fn stream(
+ &self,
+ ) -> Pin<
+ Box<
+ dyn '_
+ + Send
+ + futures::Stream<
+ Item = Result<(Self::Offset, MessageSet), Self::Error>,
+ >,
+ >,
+ >;
+ async fn commit(&self, offset: Self::Offset) -> Result<(), Self::Error>;
+
+ async fn unsubscribe(self);
+```
+
+可在 上查看详细 API 说明。
+
+
+
+
+
+```js
+function TMQConsumer(config)
+
+function subscribe(topic)
+
+function consume(timeout)
+
+function subscription()
+
+function unsubscribe()
+
+function commit(msg)
+
+function close()
+```
+
+
+
```csharp
@@ -157,27 +209,6 @@ void Close()
```
-
-
-
-```node
-function TMQConsumer(config)
-
-function subscribe(topic)
-
-function consume(timeout)
-
-function subscription()
-
-function unsubscribe()
-
-function commit(msg)
-
-function close()
-```
-
-
-
## 写入数据
@@ -321,28 +352,6 @@ public class MetersDeserializer extends ReferenceDeserializer {
-
-
-Python 使用以下配置项创建一个 Consumer 实例。
-
-| 参数名称 | 类型 | 参数说明 | 备注 |
-| :----------------------------: | :-----: | -------------------------------------------------------- | ------------------------------------------- |
-| `td_connect_ip` | string | 用于创建连接,同 `taos_connect` | |
-| `td_connect_user` | string | 用于创建连接,同 `taos_connect` | |
-| `td_connect_pass` | string | 用于创建连接,同 `taos_connect` | |
-| `td_connect_port` | string | 用于创建连接,同 `taos_connect` | |
-| `group_id` | string | 消费组 ID,同一消费组共享消费进度 | **必填项**。最大长度:192。 |
-| `client_id` | string | 客户端 ID | 最大长度:192。 |
-| `auto_offset_reset` | string | 消费组订阅的初始位置 | 可选:`earliest`, `latest`, `none`(default) |
-| `enable_auto_commit` | string | 启用自动提交 | 合法值:`true`, `false`。 |
-| `auto_commit_interval_ms` | string | 以毫秒为单位的自动提交时间间隔 | |
-| `enable_heartbeat_background` | string | 启用后台心跳,启用后即使长时间不 poll 消息也不会造成离线 | 合法值:`true`, `false` |
-| `experimental_snapshot_enable` | string | 从 WAL 开始消费,还是从 TSBS 开始消费 | 合法值:`true`, `false` |
-| `msg_with_table_name` | string | 是否允许从消息中解析表名 | 合法值:`true`, `false` |
-| `timeout` | int | 消费者拉去的超时时间 | |
-
-
-
```go
@@ -394,35 +403,46 @@ if err != nil {
-
+
-```csharp
-using TDengineTMQ;
+```rust
+let mut dsn: Dsn = "taos://".parse()?;
+dsn.set("group.id", "group1");
+dsn.set("client.id", "test");
+dsn.set("auto.offset.reset", "earliest");
-// 根据需要,设置消费组 (GourpId)、自动提交 (EnableAutoCommit)、
-// 自动提交时间间隔 (AutoCommitIntervalMs)、用户名 (TDConnectUser)、密码 (TDConnectPasswd) 等参数
-var cfg = new ConsumerConfig
- {
- EnableAutoCommit = "true"
- AutoCommitIntervalMs = "1000"
- GourpId = "TDengine-TMQ-C#",
- TDConnectUser = "root",
- TDConnectPasswd = "taosdata",
- AutoOffsetReset = "earliest"
- MsgWithTableName = "true",
- TDConnectIp = "127.0.0.1",
- TDConnectPort = "6030"
- };
-
-var consumer = new ConsumerBuilder(cfg).Build();
+let tmq = TmqBuilder::from_dsn(dsn)?;
+let mut consumer = tmq.build()?;
```
+
+
+Python 使用以下配置项创建一个 Consumer 实例。
+
+| 参数名称 | 类型 | 参数说明 | 备注 |
+| :----------------------------: | :----: | -------------------------------------------------------- | ------------------------------------------- |
+| `td_connect_ip` | string | 用于创建连接,同 `taos_connect` | |
+| `td_connect_user` | string | 用于创建连接,同 `taos_connect` | |
+| `td_connect_pass` | string | 用于创建连接,同 `taos_connect` | |
+| `td_connect_port` | string | 用于创建连接,同 `taos_connect` | |
+| `group_id` | string | 消费组 ID,同一消费组共享消费进度 | **必填项**。最大长度:192。 |
+| `client_id` | string | 客户端 ID | 最大长度:192。 |
+| `auto_offset_reset` | string | 消费组订阅的初始位置 | 可选:`earliest`, `latest`, `none`(default) |
+| `enable_auto_commit` | string | 启用自动提交 | 合法值:`true`, `false`。 |
+| `auto_commit_interval_ms` | string | 以毫秒为单位的自动提交时间间隔 | |
+| `enable_heartbeat_background` | string | 启用后台心跳,启用后即使长时间不 poll 消息也不会造成离线 | 合法值:`true`, `false` |
+| `experimental_snapshot_enable` | string | 从 WAL 开始消费,还是从 TSBS 开始消费 | 合法值:`true`, `false` |
+| `msg_with_table_name` | string | 是否允许从消息中解析表名 | 合法值:`true`, `false` |
+| `timeout` | int | 消费者拉去的超时时间 | |
+
+
+
-``` node
+```js
// 根据需要,设置消费组 (group.id)、自动提交 (enable.auto.commit)、
// 自动提交时间间隔 (auto.commit.interval.ms)、用户名 (td.connect.user)、密码 (td.connect.pass) 等参数
@@ -437,6 +457,31 @@ let consumer = taos.consumer({
'td.connect.ip','127.0.0.1',
'td.connect.port','6030'
});
+```
+
+
+
+
+
+```csharp
+using TDengineTMQ;
+
+// 根据需要,设置消费组 (GourpId)、自动提交 (EnableAutoCommit)、
+// 自动提交时间间隔 (AutoCommitIntervalMs)、用户名 (TDConnectUser)、密码 (TDConnectPasswd) 等参数
+var cfg = new ConsumerConfig
+ {
+ EnableAutoCommit = "true"
+ AutoCommitIntervalMs = "1000"
+ GourpId = "TDengine-TMQ-C#",
+ TDConnectUser = "root",
+ TDConnectPasswd = "taosdata",
+ AutoOffsetReset = "earliest"
+ MsgWithTableName = "true",
+ TDConnectIp = "127.0.0.1",
+ TDConnectPort = "6030"
+ };
+
+var consumer = new ConsumerBuilder(cfg).Build();
```
@@ -487,28 +532,25 @@ if err != nil {
```
+
-
-
-```csharp
-// 创建订阅 topics 列表
-List topics = new List();
-topics.add("tmq_topic");
-// 启动订阅
-consumer.Subscribe(topics);
+```rust
+consumer.subscribe(["tmq_meters"]).await?;
```
+
```python
consumer = TaosConsumer('topic_ctb_column', group_id='vg2')
```
+
-```node
+```js
// 创建订阅 topics 列表
let topics = ['topic_test']
@@ -518,6 +560,18 @@ consumer.subscribe(topics);
+
+
+```csharp
+// 创建订阅 topics 列表
+List topics = new List();
+topics.add("tmq_topic");
+// 启动订阅
+consumer.Subscribe(topics);
+```
+
+
+
## 消费
@@ -551,14 +605,6 @@ while(running){
-
-```python
-for msg in consumer:
- for row in msg:
- print(row)
-```
-
-
```go
@@ -575,6 +621,64 @@ for {
+
+
+```rust
+{
+ let mut stream = consumer.stream();
+
+ while let Some((offset, message)) = stream.try_next().await? {
+ // get information from offset
+
+ // the topic
+ let topic = offset.topic();
+ // the vgroup id, like partition id in kafka.
+ let vgroup_id = offset.vgroup_id();
+ println!("* in vgroup id {vgroup_id} of topic {topic}\n");
+
+ if let Some(data) = message.into_data() {
+ while let Some(block) = data.fetch_raw_block().await? {
+ // one block for one table, get table name if needed
+ let name = block.table_name();
+ let records: Vec = block.deserialize().try_collect()?;
+ println!(
+ "** table: {}, got {} records: {:#?}\n",
+ name.unwrap(),
+ records.len(),
+ records
+ );
+ }
+ }
+ consumer.commit(offset).await?;
+ }
+}
+```
+
+
+
+
+```python
+for msg in consumer:
+ for row in msg:
+ print(row)
+```
+
+
+
+
+
+```js
+while(true){
+ msg = consumer.consume(200);
+ // process message(consumeResult)
+ console.log(msg.topicPartition);
+ console.log(msg.block);
+ console.log(msg.fields)
+}
+```
+
+
+
```csharp
@@ -590,20 +694,6 @@ while (true)
-
-
-```node
-while(true){
- msg = consumer.consume(200);
- // process message(consumeResult)
- console.log(msg.topicPartition);
- console.log(msg.block);
- console.log(msg.fields)
- }
-```
-
-
-
## 结束消费
@@ -634,16 +724,6 @@ consumer.close();
-
-
-```python
-/* 取消订阅 */
-consumer.unsubscribe();
-
-/* 关闭消费 */
-consumer.close();
-
-
@@ -652,26 +732,45 @@ consumer.Close()
```
-
-```csharp
-// 取消订阅
-consumer.Unsubscribe();
+
-// 关闭消费
-consumer.Close();
+```rust
+consumer.unsubscribe().await;
```
+
+
+
+```py
+# 取消订阅
+consumer.unsubscribe()
+# 关闭消费
+consumer.close()
+```
+
+
-```node
+```js
consumer.unsubscribe();
consumer.close();
```
+
+
+```csharp
+// 取消订阅
+consumer.Unsubscribe();
+
+// 关闭消费
+consumer.Close();
+```
+
+
## 删除 *topic*
diff --git a/docs/zh/14-reference/15-taosKeeper.md b/docs/zh/14-reference/15-taosKeeper.md
new file mode 100644
index 0000000000000000000000000000000000000000..d3f96bc5a9e857538698e9af5c634e1b594496f4
--- /dev/null
+++ b/docs/zh/14-reference/15-taosKeeper.md
@@ -0,0 +1,134 @@
+---
+sidebar_label: taosKeeper
+title: taosKeeper
+description: TDengine taosKeeper 使用说明
+---
+
+## 简介
+
+TaosKeeper 是 TDengine 3.0 版本监控指标的导出工具,通过简单的几项配置即可获取 TDengine 的运行状态。taosKeeper 使用 TDengine RESTful 接口,所以不需要安装 TDengine 客户端即可使用。
+
+## 安装
+
+
+taosKeeper 安装方式:
+
+
+
+
+- 单独编译 taosKeeper 并安装,详情请参考 [taosKeeper](https://github.com/taosdata/taoskeeper) 仓库。
+
+## 运行
+
+### 配置和运行方式
+
+
+taosKeeper 需要在操作系统终端执行,该工具支持 [配置文件启动](#配置文件启动)。
+
+**在运行 taosKeeper 之前要确保 TDengine 集群与 taosAdapter 已经在正确运行。**
+
+
+### 配置文件启动
+
+执行以下命令即可快速体验 taosKeeper。当不指定 taosKeeper 配置文件时,优先使用 `/etc/taos/keeper.toml` 配置,否则将使用默认配置。
+
+```shell
+taoskeeper -c
+```
+
+**下面是配置文件的示例:**
+```toml
+# gin 框架是否启用 debug
+debug = false
+
+# 服务监听端口, 默认为 6043
+port = 6043
+
+# 日志级别,包含 panic、error、info、debug、trace等
+loglevel = "info"
+
+# 程序中使用协程池的大小
+gopoolsize = 50000
+
+# 查询 TDengine 监控数据轮询间隔
+RotationInterval = "15s"
+
+[tdengine]
+host = "127.0.0.1"
+port = 6041
+username = "root"
+password = "taosdata"
+
+# 需要被监控的 taosAdapter
+[taosAdapter]
+address = ["127.0.0.1:6041","192.168.1.95:6041"]
+
+[metrics]
+# 监控指标前缀
+prefix = "taos"
+
+# 集群数据的标识符
+cluster = "production"
+
+# 存放监控数据的数据库
+database = "log"
+
+# 指定需要监控的普通表
+tables = ["normal_table"]
+```
+
+### 获取监控指标
+
+taosKeeper 作为 TDengine 监控指标的导出工具,可以将 TDengine 产生的监控数据记录在指定数据库中,并提供导出接口。
+
+#### 查看监控结果集
+
+```shell
+$ taos
+#
+> use log;
+> select * from cluster_info limit 1;
+```
+
+结果示例:
+
+```shell
+ ts | first_ep | first_ep_dnode_id | version | master_uptime | monitor_interval | dbs_total | tbs_total | stbs_total | dnodes_total | dnodes_alive | mnodes_total | mnodes_alive | vgroups_total | vgroups_alive | vnodes_total | vnodes_alive | connections_total | protocol | cluster_id |
+===============================================================================================================================================================================================================================================================================================================================================================================
+ 2022-08-16 17:37:01.629 | hlb:6030 | 1 | 3.0.0.0 | 0.27250 | 15 | 2 | 27 | 38 | 1 | 1 | 1 | 1 | 4 | 4 | 4 | 4 | 14 | 1 | 5981392874047724755 |
+Query OK, 1 rows in database (0.036162s)
+```
+
+#### 导出监控指标
+
+```shell
+curl http://127.0.0.1:6043/metrics
+```
+
+部分结果集:
+
+```shell
+# HELP taos_cluster_info_connections_total
+# TYPE taos_cluster_info_connections_total counter
+taos_cluster_info_connections_total{cluster_id="5981392874047724755"} 16
+# HELP taos_cluster_info_dbs_total
+# TYPE taos_cluster_info_dbs_total counter
+taos_cluster_info_dbs_total{cluster_id="5981392874047724755"} 2
+# HELP taos_cluster_info_dnodes_alive
+# TYPE taos_cluster_info_dnodes_alive counter
+taos_cluster_info_dnodes_alive{cluster_id="5981392874047724755"} 1
+# HELP taos_cluster_info_dnodes_total
+# TYPE taos_cluster_info_dnodes_total counter
+taos_cluster_info_dnodes_total{cluster_id="5981392874047724755"} 1
+# HELP taos_cluster_info_first_ep
+# TYPE taos_cluster_info_first_ep gauge
+taos_cluster_info_first_ep{cluster_id="5981392874047724755",value="hlb:6030"} 1
+```
\ No newline at end of file
diff --git a/tests/system-test/simpletest.bat b/tests/system-test/simpletest.bat
index 656828aa1ea4b1b2681dab2edac2c94178b5176a..cc4ae1795534e943ed603e2db5202ce272f54ab1 100644
--- a/tests/system-test/simpletest.bat
+++ b/tests/system-test/simpletest.bat
@@ -4,9 +4,9 @@ python3 .\test.py -f 0-others\taosShellError.py
python3 .\test.py -f 0-others\taosShellNetChk.py
python3 .\test.py -f 0-others\telemetry.py
python3 .\test.py -f 0-others\taosdMonitor.py
-python3 .\test.py -f 0-others\udfTest.py
-python3 .\test.py -f 0-others\udf_create.py
-python3 .\test.py -f 0-others\udf_restart_taosd.py
+@REM python3 .\test.py -f 0-others\udfTest.py
+@REM python3 .\test.py -f 0-others\udf_create.py
+@REM python3 .\test.py -f 0-others\udf_restart_taosd.py
@REM python3 .\test.py -f 0-others\cachelast.py
@REM python3 .\test.py -f 0-others\user_control.py