diff --git a/docs/zh/05-get-started/03-package.md b/docs/zh/05-get-started/03-package.md
index b7b9d41d2d..5d346c4420 100644
--- a/docs/zh/05-get-started/03-package.md
+++ b/docs/zh/05-get-started/03-package.md
@@ -7,8 +7,14 @@ import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
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 包获得。
+
## 安装
diff --git a/docs/zh/07-develop/07-tmq.mdx b/docs/zh/07-develop/07-tmq.mdx
index 6ab08b97d2..c9ac178081 100644
--- a/docs/zh/07-develop/07-tmq.mdx
+++ b/docs/zh/07-develop/07-tmq.mdx
@@ -134,7 +134,7 @@ func (c *Consumer) Unsubscribe() error
-```C#
+```csharp
ConsumerBuilder(IEnumerable> config)
virtual IConsumer Build()
@@ -158,6 +158,26 @@ void Close()
+
+
+```node
+function TMQConsumer(config)
+
+function subscribe(topic)
+
+function consume(timeout)
+
+function subscription()
+
+function unsubscribe()
+
+function commit(msg)
+
+function close()
+```
+
+
+
## 写入数据
@@ -376,7 +396,7 @@ if err != nil {
-```C#
+```csharp
using TDengineTMQ;
// 根据需要,设置消费组 (GourpId)、自动提交 (EnableAutoCommit)、
@@ -400,6 +420,28 @@ var consumer = new ConsumerBuilder(cfg).Build();
+
+
+``` node
+// 根据需要,设置消费组 (group.id)、自动提交 (enable.auto.commit)、
+// 自动提交时间间隔 (auto.commit.interval.ms)、用户名 (td.connect.user)、密码 (td.connect.pass) 等参数
+
+let consumer = taos.consumer({
+ 'enable.auto.commit': 'true',
+ 'auto.commit.interval.ms','1000',
+ 'group.id': 'tg2',
+ 'td.connect.user': 'root',
+ 'td.connect.pass': 'taosdata',
+ 'auto.offset.reset','earliest',
+ 'msg.with.table.name': 'true',
+ 'td.connect.ip','127.0.0.1',
+ 'td.connect.port','6030'
+ });
+
+```
+
+
+
上述配置中包括 consumer group ID,如果多个 consumer 指定的 consumer group ID 一样,则自动形成一个 consumer group,共享消费进度。
@@ -448,7 +490,7 @@ if err != nil {
-```C#
+```csharp
// 创建订阅 topics 列表
List topics = new List();
topics.add("tmq_topic");
@@ -464,6 +506,18 @@ consumer = TaosConsumer('topic_ctb_column', group_id='vg2')
```
+
+
+```node
+// 创建订阅 topics 列表
+let topics = ['topic_test']
+
+// 启动订阅
+consumer.subscribe(topics);
+```
+
+
+
## 消费
@@ -523,7 +577,7 @@ for {
-```C#
+```csharp
// 消费数据
while (true)
{
@@ -535,6 +589,21 @@ while (true)
```
+
+
+
+```node
+while(true){
+ msg = consumer.consume(200);
+ // process message(consumeResult)
+ console.log(msg.topicPartition);
+ console.log(msg.block);
+ console.log(msg.fields)
+ }
+```
+
+
+
## 结束消费
@@ -585,7 +654,7 @@ consumer.Close()
-```C#
+```csharp
// 取消订阅
consumer.Unsubscribe();
@@ -594,6 +663,15 @@ consumer.Close();
```
+
+
+```node
+consumer.unsubscribe();
+consumer.close();
+```
+
+
+
## 删除 *topic*
diff --git a/source/common/CMakeLists.txt b/source/common/CMakeLists.txt
index 1c11ee7085..9c6d941172 100644
--- a/source/common/CMakeLists.txt
+++ b/source/common/CMakeLists.txt
@@ -9,6 +9,11 @@ IF (TD_GRANT)
ADD_DEFINITIONS(-D_GRANT)
ENDIF ()
+IF (TD_STORAGE)
+ ADD_DEFINITIONS(-D_STORAGE)
+ TARGET_LINK_LIBRARIES(common PRIVATE storage)
+ENDIF ()
+
target_include_directories(
common
PUBLIC "${TD_SOURCE_DIR}/include/common"
diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c
index 8823e63db4..59f7ec02f7 100644
--- a/source/common/src/tglobal.c
+++ b/source/common/src/tglobal.c
@@ -165,58 +165,9 @@ int32_t tsTtlUnit = 86400;
int32_t tsTtlPushInterval = 86400;
int32_t tsGrantHBInterval = 60;
-void taosAddDataDir(int32_t index, char *v1, int32_t level, int32_t primary) {
- tstrncpy(tsDiskCfg[index].dir, v1, TSDB_FILENAME_LEN);
- tsDiskCfg[index].level = level;
- tsDiskCfg[index].primary = primary;
- uTrace("dataDir:%s, level:%d primary:%d is configured", v1, level, primary);
-}
-
-static int32_t taosSetTfsCfg(SConfig *pCfg) {
- SConfigItem *pItem = cfgGetItem(pCfg, "dataDir");
- memset(tsDataDir, 0, PATH_MAX);
-
- int32_t size = taosArrayGetSize(pItem->array);
- if (size <= 0) {
- tsDiskCfgNum = 1;
- taosAddDataDir(0, pItem->str, 0, 1);
- tstrncpy(tsDataDir, pItem->str, PATH_MAX);
- if (taosMulMkDir(tsDataDir) != 0) {
- uError("failed to create dataDir:%s since %s", tsDataDir, terrstr());
- return -1;
- }
- } else {
- tsDiskCfgNum = size < TFS_MAX_DISKS ? size : TFS_MAX_DISKS;
- for (int32_t index = 0; index < tsDiskCfgNum; ++index) {
- SDiskCfg *pCfg = taosArrayGet(pItem->array, index);
- memcpy(&tsDiskCfg[index], pCfg, sizeof(SDiskCfg));
- if (pCfg->level == 0 && pCfg->primary == 1) {
- tstrncpy(tsDataDir, pCfg->dir, PATH_MAX);
- }
- if (taosMulMkDir(pCfg->dir) != 0) {
- uError("failed to create tfsDir:%s since %s", tsDataDir, terrstr());
- return -1;
- }
- }
- }
-
- if (tsDataDir[0] == 0) {
- if (pItem->str != NULL) {
- taosAddDataDir(tsDiskCfgNum, pItem->str, 0, 1);
- tstrncpy(tsDataDir, pItem->str, PATH_MAX);
- if (taosMulMkDir(tsDataDir) != 0) {
- uError("failed to create tfsDir:%s since %s", tsDataDir, terrstr());
- return -1;
- }
- tsDiskCfgNum++;
- } else {
- uError("datadir not set");
- return -1;
- }
- }
-
- return 0;
-}
+#ifndef _STORAGE
+int32_t taosSetTfsCfg(SConfig *pCfg) { return 0; }
+#endif
struct SConfig *taosGetCfg() {
return tsCfg;