This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git
The following commit(s) were added to refs/heads/master by this push:
new a4f4de59dbe [docs](tutorials) Update arch pictures of Lakehouse and
sidebar of tutorials (#997)
a4f4de59dbe is described below
commit a4f4de59dbeaae882a23fe004e44675d0460f447
Author: KassieZ <[email protected]>
AuthorDate: Wed Aug 14 11:45:07 2024 +0800
[docs](tutorials) Update arch pictures of Lakehouse and sidebar of
tutorials (#997)
---
.../gettingStarted/demo-block/page-hero-1.tsx | 8 +-
.../{ => building-lakehouse}/doris-hudi.md | 6 +-
.../{ => building-lakehouse}/doris-iceberg.md | 4 +-
.../{ => building-lakehouse}/doris-paimon.md | 4 +-
.../tutorials}/log-storage-analysis.md | 2 +-
gettingStarted/demo-block/page-hero-1.tsx | 8 +-
.../{ => building-lakehouse}/doris-hudi.md | 4 +-
.../{ => building-lakehouse}/doris-iceberg.md | 4 +-
.../{ => building-lakehouse}/doris-paimon.md | 4 +-
.../tutorials}/log-storage-analysis.md | 2 +-
.../docusaurus-plugin-content-docs/current.json | 8 +-
.../practical-guide/log-storage-analysis.md | 564 ---------------------
.../version-1.2.json | 4 +
.../version-2.0.json | 4 +
.../practical-guide/log-storage-analysis.md | 564 ---------------------
.../version-2.1.json | 4 +
.../practical-guide/log-storage-analysis.md | 564 ---------------------
.../version-3.0.json | 4 +
sidebars.json | 20 +-
.../doris-based-data-lakehouse-architecture.png | Bin 241224 -> 166401 bytes
.../lakehouse-architecture-for-doris-and-hudi.png | Bin 0 -> 167813 bytes
...akehouse-architecture-for-doris-and-iceberg.png | Bin 0 -> 168512 bytes
...lakehouse-architecture-for-doris-and-paimon.png | Bin 0 -> 168536 bytes
versioned_sidebars/version-1.2-sidebars.json | 12 +-
versioned_sidebars/version-2.0-sidebars.json | 19 +-
versioned_sidebars/version-2.1-sidebars.json | 20 +-
versioned_sidebars/version-3.0-sidebars.json | 20 +-
yarn.lock | 139 +----
28 files changed, 98 insertions(+), 1894 deletions(-)
diff --git a/common_docs_zh/gettingStarted/demo-block/page-hero-1.tsx
b/common_docs_zh/gettingStarted/demo-block/page-hero-1.tsx
index 1b3c8405b96..5be1fc97d7d 100644
--- a/common_docs_zh/gettingStarted/demo-block/page-hero-1.tsx
+++ b/common_docs_zh/gettingStarted/demo-block/page-hero-1.tsx
@@ -1,4 +1,4 @@
-import React,{useState,useEffect} from 'react';
+import React, { useState, useEffect } from 'react';
import './demo-block.css';
export default function PageHero() {
const [currentVersion, setCurrentVersion] = useState('')
@@ -22,8 +22,8 @@ export default function PageHero() {
</div>
</div> */}
<div className="home-page-hero-right">
- <a className="latest-button-CN"
href={`/zh-CN/docs${currentVersion === '' ? '' :
`/${currentVersion}`}/practical-guide/log-storage-analysis`}>
- <div
className="home-page-hero-button-label"><div>实践教程</div></div>
+ <a className="latest-button-CN"
href={`/zh-CN/docs${currentVersion === '' ? '' :
`/${currentVersion}`}/gettingStarted/tutorials/log-storage-analysis`}>
+ <div
className="home-page-hero-button-label"><div>使用教程</div></div>
<div className="latest-button-title">
{/* <div className="home-page-hero-button-icon">
<svg width="24px" viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg">
@@ -31,7 +31,7 @@ export default function PageHero() {
<path fill="none" d="M0 0h24v24H0Z"></path>
</svg>
</div> */}
- <div style={{ marginBottom: 10 }}>日志存储与分析</div>
+ <div style={{ marginBottom: 10 }}>构建日志存储与分析平台</div>
</div>
<div style={{ fontSize: 12, marginBottom: 20 }}>如何基于
Apache Doris 构建开放、高性能低成本、统一的日志存储分析平台。</div>
</a>
diff --git a/common_docs_zh/gettingStarted/tutorials/doris-hudi.md
b/common_docs_zh/gettingStarted/tutorials/building-lakehouse/doris-hudi.md
similarity index 99%
rename from common_docs_zh/gettingStarted/tutorials/doris-hudi.md
rename to
common_docs_zh/gettingStarted/tutorials/building-lakehouse/doris-hudi.md
index 559442e74d4..0468889bde5 100644
--- a/common_docs_zh/gettingStarted/tutorials/doris-hudi.md
+++ b/common_docs_zh/gettingStarted/tutorials/building-lakehouse/doris-hudi.md
@@ -1,6 +1,6 @@
---
{
- "title": "使用 Doris 和 Hudi 构建 Lakehouse",
+ "title": "使用 Doris 和 Hudi",
"language": "zh-CN"
}
@@ -33,7 +33,7 @@ under the License.
- 自 1.2 版本起,Apache Doris 正式引入 Multi-Catalog
功能,实现了多种数据源的自动元数据映射和数据访问、并对外部数据读取和查询执行等方面做了诸多性能优化,完全具备了构建极速易用 Lakehouse 架构的能力。
- 在 2.1 版本中,Apache Doris 湖仓一体架构得到全面加强,不仅增强了主流数据湖格式(Hudi、Iceberg、Paimon
等)的读取和写入能力,还引入了多 SQL 方言兼容、可从原有系统无缝切换至 Apache Doris。在数据科学及大规模数据读取场景上,Doris 集成了
Arrow Flight 高速读取接口,使得数据传输效率实现 100 倍的提升。
-
+
## Apache Doris & Hudi
@@ -55,7 +55,7 @@ Apache Doris 同样对 Apache Hudi 数据表的读取能力进行了增强:
本文将在 Docker 环境下,为读者介绍如何快速搭建 Apache Doris + Apache Hudi
的测试及演示环境,并对各功能操作进行演示,帮助读者快速入门。
-关于更多说明,请参阅 [Hudi Catalog](../../lakehouse/datalake-analytics/hudi.md)
+关于更多说明,请参阅 [Hudi Catalog](../../lakehouse/datalake-analytics/hudi)
## 使用指南
diff --git a/common_docs_zh/gettingStarted/tutorials/doris-iceberg.md
b/common_docs_zh/gettingStarted/tutorials/building-lakehouse/doris-iceberg.md
similarity index 99%
rename from common_docs_zh/gettingStarted/tutorials/doris-iceberg.md
rename to
common_docs_zh/gettingStarted/tutorials/building-lakehouse/doris-iceberg.md
index 7fb6a1328c8..db37ca6b31d 100644
--- a/common_docs_zh/gettingStarted/tutorials/doris-iceberg.md
+++
b/common_docs_zh/gettingStarted/tutorials/building-lakehouse/doris-iceberg.md
@@ -1,6 +1,6 @@
---
{
- "title": "使用 Doris 和 Iceberg 构建 Lakehouse",
+ "title": "使用 Doris 和 Iceberg",
"language": "zh-CN"
}
@@ -33,7 +33,7 @@ under the License.
- 自 1.2 版本起,Apache Doris 正式引入 Multi-Catalog
功能,实现了多种数据源的自动元数据映射和数据访问、并对外部数据读取和查询执行等方面做了诸多性能优化,完全具备了构建极速易用 Lakehouse 架构的能力。
- 在 2.1 版本中,Apache Doris 湖仓一体架构得到全面加强,不仅增强了主流数据湖格式(Hudi、Iceberg、Paimon
等)的读取和写入能力,还引入了多 SQL 方言兼容、可从原有系统无缝切换至 Apache Doris。在数据科学及大规模数据读取场景上,Doris 集成了
Arrow Flight 高速读取接口,使得数据传输效率实现 100 倍的提升。
-
+
## Apache Doris & Iceberg
diff --git a/common_docs_zh/gettingStarted/tutorials/doris-paimon.md
b/common_docs_zh/gettingStarted/tutorials/building-lakehouse/doris-paimon.md
similarity index 99%
rename from common_docs_zh/gettingStarted/tutorials/doris-paimon.md
rename to
common_docs_zh/gettingStarted/tutorials/building-lakehouse/doris-paimon.md
index 142b1e179ed..b9c2694a9ed 100644
--- a/common_docs_zh/gettingStarted/tutorials/doris-paimon.md
+++ b/common_docs_zh/gettingStarted/tutorials/building-lakehouse/doris-paimon.md
@@ -1,6 +1,6 @@
---
{
- "title": "使用 Doris 和 Paimon 构建 Lakehouse",
+ "title": "使用 Doris 和 Paimon",
"language": "zh-CN"
}
@@ -33,7 +33,7 @@ under the License.
- 自 1.2 版本起,Apache Doris 正式引入 Multi-Catalog
功能,实现了多种数据源的自动元数据映射和数据访问、并对外部数据读取和查询执行等方面做了诸多性能优化,完全具备了构建极速易用 Lakehouse 架构的能力。
- 在 2.1 版本中,Apache Doris 湖仓一体架构得到全面加强,不仅增强了主流数据湖格式(Hudi、Iceberg、Paimon
等)的读取和写入能力,还引入了多 SQL 方言兼容、可从原有系统无缝切换至 Apache Doris。在数据科学及大规模数据读取场景上,Doris 集成了
Arrow Flight 高速读取接口,使得数据传输效率实现 100 倍的提升。
-
+
## Apache Doris & Paimon
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.0/practical-guide/log-storage-analysis.md
b/common_docs_zh/gettingStarted/tutorials/log-storage-analysis.md
similarity index 99%
rename from
i18n/zh-CN/docusaurus-plugin-content-docs/version-3.0/practical-guide/log-storage-analysis.md
rename to common_docs_zh/gettingStarted/tutorials/log-storage-analysis.md
index a6c5dd1a1c6..7ee35679f3b 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.0/practical-guide/log-storage-analysis.md
+++ b/common_docs_zh/gettingStarted/tutorials/log-storage-analysis.md
@@ -1,6 +1,6 @@
---
{
- "title": "日志存储与分析",
+ "title": "构建日志存储与分析平台",
"language": "zh-CN"
}
---
diff --git a/gettingStarted/demo-block/page-hero-1.tsx
b/gettingStarted/demo-block/page-hero-1.tsx
index 419fd9637fa..a12f4ef1c7e 100644
--- a/gettingStarted/demo-block/page-hero-1.tsx
+++ b/gettingStarted/demo-block/page-hero-1.tsx
@@ -1,4 +1,4 @@
-import React,{useState,useEffect} from 'react';
+import React, { useState, useEffect } from 'react';
import './demo-block.css';
export default function PageHero1() {
const [currentVersion, setCurrentVersion] = useState('')
@@ -22,8 +22,8 @@ export default function PageHero1() {
</div>
</div> */}
<div className="home-page-hero-right">
- <a className="latest-button" href={`/docs${currentVersion
=== '' ? '' : `/${currentVersion}`}/practical-guide/log-storage-analysis`}>
- <div className="home-page-hero-button-label"><div>Use
Case</div></div>
+ <a className="latest-button" href={`/docs${currentVersion
=== '' ? '' :
`/${currentVersion}`}/gettingStarted/tutorials/log-storage-analysis`}>
+ <div
className="home-page-hero-button-label"><div>Tutorials</div></div>
<div className="latest-button-title">
{/* <div className="home-page-hero-button-icon">
<svg width="24px" viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg">
@@ -31,7 +31,7 @@ export default function PageHero1() {
<path fill="none" d="M0 0h24v24H0Z"></path>
</svg>
</div> */}
- <div style={{ marginBottom: 10 }}>Log Storage and
analysis</div>
+ <div style={{ marginBottom: 10 }}>Building log
analysis platform</div>
</div>
<div style={{ fontSize: 12, marginBottom: 20 }}>To
build an open, high-performance, cost-effective and unified log storage and
analysis platform.</div>
</a>
diff --git a/gettingStarted/tutorials/doris-hudi.md
b/gettingStarted/tutorials/building-lakehouse/doris-hudi.md
similarity index 99%
rename from gettingStarted/tutorials/doris-hudi.md
rename to gettingStarted/tutorials/building-lakehouse/doris-hudi.md
index 38b4aa3178a..f92a3ec698d 100644
--- a/gettingStarted/tutorials/doris-hudi.md
+++ b/gettingStarted/tutorials/building-lakehouse/doris-hudi.md
@@ -1,6 +1,6 @@
---
{
- "title": "Building lakehouse using Doris and Hudi",
+ "title": "Using Doris and Hudi",
"language": "en"
}
@@ -33,7 +33,7 @@ In recent versions, Apache Doris has deepened its integration
with data lakes an
- Starting from version 1.2, Apache Doris officially introduced the
Multi-Catalog feature, enabling automatic metadata mapping and data access for
various data sources, along with numerous performance optimizations for
external data reading and query execution. It now fully possesses the ability
to build a high-speed and user-friendly Lakehouse architecture.
- In version 2.1, Apache Doris' Data Lakehouse architecture was significantly
enhanced, improving the reading and writing capabilities of mainstream data
lake formats (Hudi, Iceberg, Paimon, etc.), introducing compatibility with
multiple SQL dialects, and seamless migration from existing systems to Apache
Doris. For data science and large-scale data reading scenarios, Doris
integrated the Arrow Flight high-speed reading interface, achieving a 100-fold
increase in data transfer efficiency.
-
+
## Apache Doris & Hudi
diff --git a/gettingStarted/tutorials/doris-iceberg.md
b/gettingStarted/tutorials/building-lakehouse/doris-iceberg.md
similarity index 99%
rename from gettingStarted/tutorials/doris-iceberg.md
rename to gettingStarted/tutorials/building-lakehouse/doris-iceberg.md
index 803cb4504af..f58dead95f5 100644
--- a/gettingStarted/tutorials/doris-iceberg.md
+++ b/gettingStarted/tutorials/building-lakehouse/doris-iceberg.md
@@ -1,6 +1,6 @@
---
{
- "title": "Building lakehouse using Doris and Iceberg",
+ "title": "Using Doris and Iceberg",
"language": "en"
}
@@ -31,7 +31,7 @@ In recent versions, Apache Doris has deepened its integration
with data lakes an
- Starting from version 1.2, Apache Doris officially introduced the
Multi-Catalog feature, enabling automatic metadata mapping and data access for
various data sources, along with numerous performance optimizations for
external data reading and query execution. It now fully supports building a
high-speed and user-friendly Lakehouse architecture.
- In version 2.1, Apache Doris further strengthened its Data Lakehouse
architecture, enhancing the reading and writing capabilities of mainstream data
lake formats (Hudi, Iceberg, Paimon, etc.), introducing compatibility with
multiple SQL dialects, and seamless migration from existing systems to Apache
Doris. For data science and large-scale data reading scenarios, Doris
integrated the Arrow Flight high-speed reading interface, achieving a 100x
improvement in data transfer efficiency.
-
+
## Apache Doris & Iceberg
diff --git a/gettingStarted/tutorials/doris-paimon.md
b/gettingStarted/tutorials/building-lakehouse/doris-paimon.md
similarity index 99%
rename from gettingStarted/tutorials/doris-paimon.md
rename to gettingStarted/tutorials/building-lakehouse/doris-paimon.md
index 021ee005ba4..26074f1ca35 100644
--- a/gettingStarted/tutorials/doris-paimon.md
+++ b/gettingStarted/tutorials/building-lakehouse/doris-paimon.md
@@ -1,6 +1,6 @@
---
{
- "title": "Building lakehouse using Doris and Paimon",
+ "title": "Using Doris and Paimon",
"language": "en"
}
@@ -33,7 +33,7 @@ In recent versions, Apache Doris has deepened its integration
with data lakes an
- Starting from version 1.2, Apache Doris officially introduced the
Multi-Catalog feature, achieving automatic metadata mapping and data access for
various data sources, along with many performance optimizations for external
data reading and query execution. It now fully possesses the ability to build a
high-speed and user-friendly Lakehouse architecture.
- In version 2.1, Apache Doris' Data Lakehouse architecture was significantly
enhanced, strengthening the reading and writing capabilities of mainstream data
lake formats (Hudi, Iceberg, Paimon, etc.), introducing compatibility with
multiple SQL dialects, and seamless migration from existing systems to Apache
Doris. For data science and large-scale data reading scenarios, Doris
integrated the Arrow Flight high-speed reading interface, achieving a 100-fold
improvement in data transfer eff [...]
-
+
## Apache Doris & Paimon
diff --git a/docs/practical-guide/log-storage-analysis.md
b/gettingStarted/tutorials/log-storage-analysis.md
similarity index 99%
rename from docs/practical-guide/log-storage-analysis.md
rename to gettingStarted/tutorials/log-storage-analysis.md
index 99d251de708..af49c722bf2 100644
--- a/docs/practical-guide/log-storage-analysis.md
+++ b/gettingStarted/tutorials/log-storage-analysis.md
@@ -1,6 +1,6 @@
---
{
- "title": "Log Storage and Analysis",
+ "title": "Building log analysis platform",
"language": "en"
}
---
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current.json
b/i18n/zh-CN/docusaurus-plugin-content-docs/current.json
index e0c3935306d..688eff8ac41 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current.json
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current.json
@@ -419,10 +419,6 @@
"message": "存算分离",
"description": "Compute-Storage Decoupled"
},
- "sidebar.docs.category.Use Case": {
- "message": "实践教程",
- "description": "The label for category Practical Guide in sidebar docs"
- },
"sidebar.ecosystem.category.BI and Database IDE": {
"message": "BI 与数据库 IDE",
"description": "The label for category BI and Database IDE in sidebar docs"
@@ -430,5 +426,9 @@
"sidebar.get-starting.category.Tutorials": {
"message": "使用教程",
"description": "The label for category BI and Database IDE in sidebar docs"
+ },
+ "sidebar.get-starting.category.Building lakehouse": {
+ "message": "构建 Lakehouse",
+ "description": "The label for category BI and Database IDE in sidebar docs"
}
}
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/practical-guide/log-storage-analysis.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/practical-guide/log-storage-analysis.md
deleted file mode 100644
index a6c5dd1a1c6..00000000000
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/practical-guide/log-storage-analysis.md
+++ /dev/null
@@ -1,564 +0,0 @@
----
-{
- "title": "日志存储与分析",
- "language": "zh-CN"
-}
----
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-日志是系统运行的详细记录,包含各种事件发生的主体、时间、位置、内容等关键信息。出于运维可观测、网络安全监控及业务分析等多重需求,企业通常需要将分散的日志采集起来,进行集中存储、查询和分析,以进一步从日志数据里挖掘出有价值的内容。
-
-针对此场景,Apache Doris 提供了相应解决方案,针对日志场景的特点,增加了倒排索引和极速全文检索能力,极致优化写入性能和存储空间,使得用户可以基于
Apache Doris 构建开放、高性能、低成本、统一的日志存储与分析平台。
-
-本文将围绕这一解决方案,介绍以下内容:
-
-- **整体架构**:说明基于 Apache Doris 构建的日志存储与分析平台的核心组成部分和基础架构。
-- **特点与优势**:说明基于 Apache Doris 构建的日志存储与分析平台的特点和优势。
-- **操作指南**:说明如何基于 Apache Doris 构建日志存储分析平台。
-
-## 整体架构
-
-基于 Apache Doris 构建的日志存储与分析平台的架构如下图:
-
-
-
-此架构主要由 3 大部分组成:
-
-- **日志采集和预处理**:多种日志采集工具可以通过 HTTP APIs 将日志数据写入 Apache Doris。
-- **日志存储和分析引擎**:Apache Doris 提供高性能、低成本的统一日志存储,通过 SQL 接口提供丰富的检索分析能力。
-- **日志分析和告警界面**:多种日志检索分析通工具通过标准 SQL 接口查询 Apache Doris,为用户提供简单易用的界面。
-
-## 特点与优势
-
-基于 Apache Doris 构建的日志存储与分析平台的特点和优势如下:
-
-- **高吞吐、低延迟日志写入**:支持每天百 TB 级、GB/s 级日志数据持续稳定写入,同时保持延迟 1s 以内。
-- **海量日志数据低成本存储**:支持 PB 级海量存储,相对于 Elasticsearch 存储成本节省 60% 到 80%,支持冷数据存储到
S3/HDFS,存储成本再降 50%。
-- **高性能日志全文检索分析**:支持倒排索引和全文检索,日志场景常见查询(关键词检索明细、趋势分析等)秒级响应。
-- **开放、易用的上下游生态**:上游通过 Stream Load 通用 HTTP APIs 对接常见的日志采集系统和数据源
Logstash、Filebeat、Fluentbit、Kafka 等,下游通过标准 MySQL 协议和语法对接各种可视化分析 UI,比如可观测性
Grafana、BI 分析 Superset、类 Kibana 的日志检索 Doris WebUI。
-
-### 高性能、低成本
-
-经过 Benchmark 测试及生产验证,基于 Apache Doris 构建的日志存储与分析平台,性价比相对于 Elasticsearch 具有 5~10
倍的提升。Apache Doris 的性能优势,主要得益于全球领先的高性能存储和查询引擎,以及下面一些针对日志场景的专门优化:
-
-- **写入吞吐提升**:Elasticsearch 写入的性能瓶颈在于解析数据和构建倒排索引的 CPU 消耗。相比之下,Apache Doris
进行了两方面的写入优化:一方面利用 SIMD 等 CPU 向量化指令提升了 JSON
数据解析速度和索引构建性能;另一方面针对日志场景简化倒了排索引结构,去掉日志场景不需要的正排等数据结构,有效降低了索引构建的复杂度。同样的资源,Apache
Doris 的写入性能是 Elasticsearch 的 3~5 倍。
-- **存储成本降低**:Elasticsearch 存储瓶颈在于正排、倒排、Docvalue 列存多份存储和通用压缩算法压缩率较低。相比之下,Apache
Doris 在存储上进行了以下优化:去掉正排,缩减了 30% 的索引数据量;采用列式存储和 Zstandard 压缩算法,压缩比可达到 5~10 倍,远高于
Elasticsearch 的 1.5 倍;日志数据中冷数据访问频率很低,Apache Doris
冷热分层功能可以将超过定义时间段的日志自动存储到更低的对象存储中,冷数据的存储成本可降低 70% 以上。同样的原始数据,SelectDB 的存储成本只需要
Elasticsearch 的 20% 左右。
-- **查询性能提升**:Apache Doris
将全文检索的流程简化,跳过了相关性打分等日志场景不需要的算法,加速基础的检索性能。同时针对日志场景常见的查询,比如查询包含某个关键字的最新 100
条日志,在查询规划和执行上做专门的 TopN 动态剪枝等优化。
-
-### 分析能力强
-
-Apache Doris 支持标准 SQL、兼容 MySQL 协议和语法,因此基于 Apache Doris 构建的日志系统能够使用 SQL
进行日志分析,这使得日志系统具备以下优势:
-
-- **简单易用**:工程师和数据分析师对于 SQL 非常熟悉,经验可以复用,不需要学习新的技术栈即可快速上手。
-- **生态丰富**:MySQL 生态是数据库领域使用最广泛的语言,因此可以与 MySQL 生态的集成和应用无缝衔接。Doris 可以利用 MySQL
命令行与各种 GUI 工具、BI 工具等大数据生态结合,实现更复杂及多样化的数据处理分析需求。
-- **分析能力强**:SQL 语言已经成为数据库和大数据分析的事实标准,它具有强大的表达能力和功能,支持检索、聚合、多表
JOIN、子查询、UDF、逻辑视图、物化视图等多种数据分析能力。
-
-### Flexible Schema
-
-下面是一个典型的 JSON
格式半结构化日志样例。顶层字段是一些比较固定的字段,比如日志时间戳(`timestamp`),日志来源(`source`),志所在机器(`node`),打日志的模块(`component`),日志级别(`level`),客户端请求标识(`clientRequestId`),日志内容(`message`),日志扩展属性(`properties`),基本上每条日志都会有。而扩展属性
`properties` 的内部嵌套字段 `properties.size`、`properties.format`
等是比较动态的,每条日志的字段可能不一样。
-
-```JSON
-{
-"timestamp": "2014-03-08T00:50:03.8432810Z",
-"source": "ADOPTIONCUSTOMERS81",
-"node": "Engine000000000405",
-"level": "Information",
-"component": "DOWNLOADER",
-"clientRequestId": "671db15d-abad-94f6-dd93-b3a2e6000672",
-"message": "Downloading file path:
benchmark/2014/ADOPTIONCUSTOMERS81_94_0.parquet.gz",
-"properties": {
-"size": 1495636750,
-"format": "parquet",
-"rowCount": 855138,
-"downloadDuration": "00:01:58.3520561"
-}
-}
-```
-
-Apache Doris 对 Flexible Schema 的日志数据提供了几个方面的支持:
-
-- 对于顶层字段的少量变化,可以通过 Light Schema Change 发起 ADD / DROP COLUMN 增加 / 删除列,ADD /
DROP INDEX 增加 / 删除索引,能够在秒级完成 Schema 变更。用户在日志平台规划时只需考虑当前需要哪些字段创建索引。
-- 对于类似 `properties` 的扩展字段,提供了原生半结构化数据类型 `VARIANT`,可以写入任何 JSON 数据,自动识别 JSON
中的字段名和类型,并自动拆分频繁出现的字段采用列式存储,以便于后续的分析,还可以对 `VARIANT` 创建倒排索引,加快内部字段的查询和检索。
-
-相对于 Elasticsearch 的 Dynamic Mapping,Apache Doris 的 Flexible Schema 有以下优势:
-
-- 允许一个字段有多种类型,`VARIANT` 自动对字段类型做冲突处理和类型提升,更好地适应日志数据的迭代变化。
-- `VARIANT` 自动将不频繁出现的字段合并成一个列存储,可避免字段、元数据、列过多导致性能问题。
-- 不仅可以动态加列,还可以动态删列、动态增加索引、动态删索引,无需像 Elasticsearch 在一开始对所有字段建索引,减少不必要的成本。
-
-## 操作指南
-
-### 第 1 步:评估资源
-
-在部署集群之前,首先应评估所需服务器硬件资源,包括以下几个关键步骤:
-
-1. **评估写入资源**:计算公式如下:
-
- - 日增数据量 / 86400 s = 平均写入吞吐
- - 平均写入吞吐 \* 写入吞吐峰值 / 均值比 = 峰值写入吞吐
- - 峰值写入吞吐 / 单核写入吞吐 = 峰值写入所需 CPU 核数
-
-2. **评估存储资源**:计算公式为「日增数据量 / 压缩率 * 副本数 * 数据存储周期 = 所需存储空间」。
-
-3. **评估查询资源**:查询的资源消耗随查询量和复杂度而异,建议初始预留 50% 的 CPU 资源用于查询,再根据实际测试情况进行调整。
-
-4. **汇总整合资源**:由第 1 步和第 3 步估算出所需 CPU 核数后,除以单机 CPU 核数,估算出 BE 服务器数量,再根据 BE
服务器数量和第 2 步的结果,估算出每台 BE 服务器所需存储空间,然后分摊到 4~12 块数据盘,计算出单盘存储容量。
-
-以每天新增 100 TB 数据量(压缩前)、7 倍压缩率、1 副本、热数据存储 3 天、冷数据存储 30 天、写入吞吐峰值 / 均值比
200%、单核写入吞吐 10 MB/s、查询预留 50% CPU 资源为例,可估算出:
-
-- FE:3 台服务器,每台配置 16 核 CPU、64 GB 内存、1 块 100 GB SSD 盘
-- BE:15 台服务器,每台配置 32 核 CPU、256 GB 内存、8 块 500 GB SSD 盘
-- Amazon S3 存储空间:即为预估冷数据存储空间,430 TB
-
-该例子中,各关键指标的值及具体计算方法可见下表:
-
-| 关键指标(单位) | 值 | 说明
|
-| :------------------------------- | :---- |
:----------------------------------------------------------- |
-| 日增数据量(TB) | 100 | 根据实际需求填写
|
-| 压缩率 | 7 | 一般为 5~10 倍(含索引),根据实际需求填写
|
-| 副本数 | 1 | 根据实际需求填写,默认 1 副本,可选值:1,2,3
|
-| 热数据存储周期(天) | 3 | 根据实际需求填写
|
-| 冷数据存储周期(天) | 30 | 根据实际需求填写
|
-| 总存储周期(天) | 33 | 算法:热数据存储周期 + 冷数据存储周期
|
-| 预估热数据存储空间(TB) | 42.9 | 算法:日增数据量 / 压缩率 * 副本数 * 热数据存储周期 |
-| 预估冷数据存储空间(TB) | 428.6 | 算法:日增数据量 / 压缩率 * 副本数 * 冷数据存储周期 |
-| 写入吞吐峰值 / 均值比 | 200% | 根据实际需求填写,默认 200%
|
-| 单机 CPU 核数 | 32 | 根据实际需求填写,默认 32 核
|
-| 平均写入吞吐(MB/s) | 1214 | 算法:日增数据量 / 86400 s
|
-| 峰值写入吞吐(MB/s) | 2427 | 算法:平均写入吞吐 * 写入吞吐峰值 / 均值比
|
-| 峰值写入所需 CPU 核数 | 242.7 | 算法:峰值写入吞吐 / 单机写入吞吐
|
-| 查询预留 CPU 百分比 | 50% | 根据实际需求填写,默认 50%
|
-| 预估 BE 服务器数 | 15.2 | 算法:峰值写入所需 CPU 核数 / 单机 CPU 核数 /(1 - 查询预留
CPU 百分比) |
-| 预估 BE 服务器数取整 | 15 | 算法:MAX (副本数,预估 BE 服务器数上取整)
|
-| 预估每台 BE 服务器存储空间(TB) | 4.03 | 算法:预估热数据存储空间 / 预估 BE 服务器数 /(1 - 30%),其中,30%
是存储空间预留值。建议每台 BE 服务器挂载 4~12 块数据盘,以提高 I/O 能力。 |
-
-### 第 2 步:部署集群
-
-完成资源评估后,可以开始部署 Apache Doris 集群,推荐在物理机及虚拟机环境中进行部署。手动部署集群,可参考
[手动部署](../install/cluster-deployment/standard-deployment.md)。
-
-另,推荐使用 SelectDB Enterprise 推出的 Cluster Manager 工具部署集群,以降低整体部署成本。更多关于 Cluster
Manager 的信息,可参考以下文档:
-
-- [Cluster Manager for Apache Doris 24.x
安装手册](https://docs.selectdb.com/docs/enterprise/cluster-manager-guide/deployment-guide/deployment-guide-24.x)
-- [Cluster Manager for Apache Doris 24.x
使用手册](https://docs.selectdb.com/docs/enterprise/cluster-manager-guide/management-guide/management-guide-24.x)
-
-### 第 3 步:优化 FE 和 BE 配置
-
-完成集群部署后,需分别优化 FE 和 BE 配置参数,以更加契合日志存储与分析的场景。
-
-**优化 FE 配置**
-
-在 `fe/conf/fe.conf` 目录下找到 FE 的相关配置项,并按照以下表格,调整 FE 配置。
-
-| 需调整参数 | 说明
|
-| :----------------------------------------------------------- |
:----------------------------------------------------------- |
-| `max_running_txn_num_per_db = 10000` |
高并发导入运行事务数较多,需调高参数。 |
-| `streaming_label_keep_max_second = 3600``label_keep_max_second = 7200` |
高频导入事务标签内存占用多,保留时间调短。 |
-| `enable_round_robin_create_tablet = true` | 创建 Tablet
时,采用 Round Robin 策略,尽量均匀。 |
-| `tablet_rebalancer_type = partition` | 均衡 Tablet
时,采用每个分区内尽量均匀的策略。 |
-| `enable_single_replica_load = true` |
开启单副本导入,多个副本只需构建一次索引,减少 CPU 消耗。 |
-| `autobucket_min_buckets = 10` | 将自动分桶的最小分桶数从
1 调大到 10,避免日志量增加时分桶不够。 |
-| `max_backend_heartbeat_failure_tolerance_count = 10` | 日志场景下 BE
服务器压力较大,可能短时间心跳超时,因此将容忍次数从 1 调大到 10。 |
-
-更多关于 FE 配置项的信息,可参考 [FE 配置项](../admin-manual/config/fe-config.md)。
-
-**优化 BE 配置**
-
-在 `be/conf/be.conf` 目录下找到 BE 的相关配置项,并按照以下表格,调整 BE 配置。
-
-| 模块 | 需调整参数 | 说明
|
-| :--------- | :----------------------------------------------------------- |
:----------------------------------------------------------- |
-| 存储 | `storage_root_path =
/path/to/dir1;/path/to/dir2;...;/path/to/dir12` | 配置热数据在磁盘目录上的存储路径。
|
-| - | `enable_file_cache = true` |
开启文件缓存。 |
-| - | `file_cache_path = [{"path": "/mnt/datadisk0/file_cache",
"total_size":53687091200, "query_limit": "10737418240"},{"path":
"/mnt/datadisk1/file_cache", "total_size":53687091200,"query_limit":
"10737418240"}]` | 配置冷数据的缓存路径和相关设置,具体配置说明如下:<br />`path`:缓存路径<br
/>`total_size`:该缓存路径的总大小,单位为字节,53687091200 字节等于 50 GB<br
/>`query_limit`:单次查询可以从缓存路径中查询的最大数据量,单位为字节,10737418240 字节等于 10 GB |
-| 写入 | `write_buffer_size = 1073741824` |
增加写入缓冲区(buffer)的文件大小,减少小文件和随机 I/O 操作,提升性能。 |
-| - | `max_tablet_version_num = 20000` |
配合建表的 time_series compaction 策略,允许更多版本暂时未合并。 |
-| - | `enable_single_replica_load = true` |
开启单副本写入,减少 CPU 消耗。与 FE 配置相同。 |
-| Compaction | `max_cumu_compaction_threads = 8` |
设置为 CPU 核数 / 4,意味着 CPU 资源的 1/4 用于写入,1/4 用于后台 Compaction,2/1 留给查询和其他操作。 |
-| - | `inverted_index_compaction_enable = true` |
开启索引合并(index compaction),减少 Compaction 时的 CPU 消耗。 |
-| - | `enable_segcompaction = false` `enable_ordered_data_compaction
= false` | 关闭日志场景不需要的两个 Compaction 功能。 |
-| 缓存 | `disable_storage_page_cache = true`
`inverted_index_searcher_cache_limit = 30%` |
因为日志数据量较大,缓存(cache)作用有限,因此关闭数据缓存,调换为索引缓存(index cache)的方式。 |
-| - | `inverted_index_cache_stale_sweep_time_sec = 3600`
`index_cache_entry_stay_time_after_lookup_s = 3600` | 让索引缓存在内存中尽量保留 1 小时。
|
-| - | `enable_inverted_index_cache_on_cooldown = true` <br
/>`enable_write_index_searcher_cache = false` | 开启索引上传冷数据存储时自动缓存的功能。
|
-| - | `tablet_schema_cache_recycle_interval = 3600`
`segment_cache_capacity = 20000` | 减少其他缓存对内存的占用。
|
-| 线程 | `pipeline_executor_size = 24`
`doris_scanner_thread_pool_thread_num = 48` | 32 核 CPU 的计算线程和 I/O
线程配置,根据核数等比扩缩。 |
-| - | `scan_thread_nice_value = 5` |
降低查询 I/O 线程的优先级,保证写入性能和时效性。 |
-| 其他 | `string_type_length_soft_limit_bytes = 10485760` | 将
String 类型数据的长度限制调高至 10 MB。 |
-| - | `trash_file_expire_time_sec = 300`
`path_gc_check_interval_second = 900` `path_scan_interval_second = 900` |
调快垃圾文件的回收时间。 |
-
-更多关于 BE 配置项的信息,可参考 [BE 配置项](../admin-manual/config/be-config.md)。
-
-### 第 4 步:建表
-
-由于日志数据的写入和查询都具备明显的特征,因此,在建表时按照本节说明进行针对性配置,以提升性能表现。
-
-**配置分区分桶参数**
-
-- 分区时,按照以下说明配置:
-- 使用时间字段上的 [Range
分区](https://doris.apache.org/zh-CN/docs/dev/table-design/data-partition/#range-%E5%88%86%E5%8C%BA),并开启
[动态分区](https://doris.apache.org/zh-CN/docs/dev/table-design/data-partition?_highlight=%E8%87%AA%E5%8A%A8&_highlight=%E5%88%86&_highlight=%E6%A1%B6#%E5%8A%A8%E6%80%81%E5%88%86%E5%8C%BA),按天自动管理分区。
-- 使用 Datetime 类型的时间字段作为 Key,在查询最新 N 条日志时有数倍加速。
-- 分桶时,按照以下说明配置:
-- 分桶数量大致为集群磁盘总数的 3 倍。
-- 使用 Random 策略,配合写入时的 Single Tablet 导入,可以提升批量(Batch)写入的效率。
-
-更多关于分区分桶的信息,可参考 [分区分桶](../table-design/data-partition.md)。
-
-**配置 Compaction 参数**
-
-按照以下说明配置 Compaction 参数:
-
-- 使用 time_series 策略,以减轻写放大效应,对于高吞吐日志写入的资源写入很重要。
-- 使用单副本 Compaction,减少多副本 Compaction 的开销。
-
-**建立和配置索引参数**
-
-按照以下说明操作:
-
-- 对经常查询的字段建立索引。
-- 对需要全文检索的字段,将分词器(parser)参数赋值为 unicode,一般能满足大部分需求。如有支持短语查询的需求,将 support_phrase
参数赋值为 true;如不需要,则设置为 false,以降低存储空间。
-
-**配置存储策略**
-
-按照以下说明操作:
-
-- 对于热存储数据,如果使用云盘,可配置 1 副本;如果使用物理盘,则至少配置 2 副本。
-- 配置 `log_s3` 的存储位置,并设置 `log_policy_3day` 冷热数据分层策略,即在超过 3 天后将数据冷却至 `log_s3`
指定的存储位置。可参考以下代码:
-
-```Go
-CREATE DATABASE log_db;
-USE log_db;
-
-CREATE RESOURCE "log_s3"
-PROPERTIES
-(
- "type" = "s3",
- "s3.endpoint" = "your_endpoint_url",
- "s3.region" = "your_region",
- "s3.bucket" = "your_bucket",
- "s3.root.path" = "your_path",
- "s3.access_key" = "your_ak",
- "s3.secret_key" = "your_sk"
-);
-
-CREATE STORAGE POLICY log_policy_3day
-PROPERTIES(
- "storage_resource" = "log_s3",
- "cooldown_ttl" = "259200"
-);
-
-CREATE TABLE log_table
-(
- `ts` DATETIME,
- `host` TEXT,
- `path` TEXT,
- `message` TEXT,
- INDEX idx_host (`host`) USING INVERTED,
- INDEX idx_path (`path`) USING INVERTED,
- INDEX idx_message (`message`) USING INVERTED PROPERTIES("parser" =
"unicode", "support_phrase" = "true")
-)
-ENGINE = OLAP
-DUPLICATE KEY(`ts`)
-PARTITION BY RANGE(`ts`) ()
-DISTRIBUTED BY RANDOM BUCKETS 250
-PROPERTIES (
-"dynamic_partition.enable" = "true",
-"dynamic_partition.create_history_partition" = "true",
-"dynamic_partition.time_unit" = "DAY",
-"dynamic_partition.start" = "-30",
-"dynamic_partition.end" = "1",
-"dynamic_partition.prefix" = "p",
-"dynamic_partition.buckets" = "250",
-"dynamic_partition.replication_num" = "1", -- 存算分离不需要
-"replication_num" = "1" -- 存算分离不需要
-"enable_single_replica_compaction" = "true", -- 存算分离不需要
-"storage_policy" = "log_policy_3day", -- 存算分离不需要
-"compaction_policy" = "time_series"
-);
-```
-
-### 第 5 步:采集日志
-
-完成建表后,可进行日志采集。
-
-Apache Doris 提供开放、通用的 Stream HTTP APIs,通过这些 APIs,你可与常用的日志采集器打通,包括
Logstash、Filebeat、Kafka 等,从而开展日志采集工作。本节介绍了如何使用 Stream HTTP APIs 对接日志采集器。
-
-**对接 Logstash**
-
-按照以下步骤操作:
-
-1. 下载并安装 Logstash Doris Output 插件。你可选择以下两种方式之一:
-
--
直接下载:[点此下载](https://apache-doris-releases.oss-accelerate.aliyuncs.com/logstash-output-doris-1.0.0.gem)。
-
-- 从源码编译,并运行下方命令安装:
-
-```markdown
-./bin/logstash-plugin install logstash-output-doris-1.0.0.gem
-```
-
-2. 配置 Logstash。需配置以下参数:
-
-- `logstash.yml`:配置 Logstash 批处理日志的条数和时间,用于提升数据写入性能。
-
-```markdown
-pipeline.batch.size: 1000000
-pipeline.batch.delay: 10000
-```
-
-
-- `logstash_demo.conf`:配置所采集日志的具体输入路径和输出到 Apache Doris 的设置。
-
-```markdown
-input {
-file {
-path => "/path/to/your/log"
-}
-}
-<br />output {
-doris {
-http_hosts => \[ "<http://fehost1:http_port>", "<http://fehost2:http_port>",
"<http://fehost3:http_port"\>]
-user => "your_username"
-password => "your_password"
-db => "your_db"
-table => "your_table"
-\# doris stream load http headers
-headers => {
-"format" => "json"
-"read_json_by_line" => "true"
-"load_to_single_tablet" => "true"
-}
-\# field mapping: doris fileld name => logstash field name
-\# %{} to get a logstash field, \[\] for nested field such as \[host\]\[name\]
for host.name
-mapping => {
-"ts" => "%{@timestamp}"
-"host" => "%{\[host\]\[name\]}"
-"path" => "%{\[log\]\[file\]\[path\]}"
-"message" => "%{message}"
-}
-log_request => true
-log_speed_interval => 10
-}
-}
-```
-
-3. 按照下方命令运行 Logstash,采集日志并输出至 Apache Doris。
-
-```Bash
-./bin/logstash -f logstash_demo.conf
-```
-
-更多关于 Logstash 配置和使用的说明,可参考 [Logstash Doris Output
Plugin](../ecosystem/logstash.md)。
-
-**对接 Filebeat**
-
-按照以下步骤操作:
-
-1. 获取支持输出至 Apache Doris 的 Filebeat 二进制文件。可
[点此下载](https://apache-doris-releases.oss-accelerate.aliyuncs.com/filebeat-doris-1.0.0)
或者从 Apache Doris 源码编译。
-2. 配置 Filebeat。需配置以下参数:
-
-- `filebeat_demo.yml`:配置所采集日志的具体输入路径和输出到 Apache Doris 的设置。
-
- ```YAML
- # input
- filebeat.inputs:
- - type: log
- enabled: true
- paths:
- - /path/to/your/log
- # multiline 可以将跨行的日志(比如 Java stacktrace)拼接起来
- multiline:
- type: pattern
- # 效果:以 yyyy-mm-dd HH:MM:SS 开头的行认为是一条新的日志,其他都拼接到上一条日志
- pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}'
- negate: true
- match: after
- skip_newline: true
-
- processors:
- # 用 js script 插件将日志中的 \t 替换成空格,避免 JSON 解析报错
- - script:
- lang: javascript
- source: >
- function process(event) {
- var msg = event.Get("message");
- msg = msg.replace(/\t/g, " ");
- event.Put("message", msg);
- }
- # 用 dissect 插件做简单的日志解析
- - dissect:
- # 2024-06-08 18:26:25,481 INFO (report-thread|199)
[ReportHandler.cpuReport():617] begin to handle
- tokenizer: "%{day} %{time} %{log_level} (%{thread}) [%{position}]
%{content}"
- target_prefix: ""
- ignore_failure: true
- overwrite_keys: true
-
- # queue and batch
- queue.mem:
- events: 1000000
- flush.min_events: 100000
- flush.timeout: 10s
-
- # output
- output.doris:
- fenodes: [ "http://fehost1:http_port", "http://fehost2:http_port",
"http://fehost3:http_port" ]
- user: "your_username"
- password: "your_password"
- database: "your_db"
- table: "your_table"
- # output string format
- ## %{[agent][hostname]} %{[log][file][path]} 是filebeat自带的metadata
- ## 常用的 filebeat metadata 还是有采集时间戳 %{[@timestamp]}
- ## %{[day]} %{[time]} 是上面 dissect 解析得到字段
- codec_format_string: '{"ts": "%{[day]} %{[time]}", "host":
"%{[agent][hostname]}", "path": "%{[log][file][path]}", "message":
"%{[message]}"}'
- headers:
- format: "json"
- read_json_by_line: "true"
- load_to_single_tablet: "true"
- ```
-
-3. 按照下方命令运行 Filebeat,采集日志并输出至 Apache Doris。
-
-```Bash
-chmod +x filebeat-doris-1.0.0
-./filebeat-doris-1.0.0 -c filebeat_demo.yml
-```
-
-更多关于 Filebeat 配置和使用的说明,可参考 [Beats Doris Output Plugin](../ecosystem/beats.md)。
-
-**对接 Kafka**
-
-将 JSON 格式的日志写入 Kafka 的消息队列,创建 Kafka Routine Load,即可让 Apache Doris 从 Kafka
主动拉取数据。
-
-可参考如下示例。其中,`property.\*` 是 Librdkafka 客户端相关配置,根据实际 Kafka 集群情况配置。
-
-```SQL
-\-- 准备好kafka集群和topic log_\_topic_
-\-- 创建routine load,从kafka log_\_topic_将数据导入log_table表
-CREATE ROUTINE LOAD load_log_kafka ON log_db.log_table
-COLUMNS(ts, clientip, request, status, size)
-PROPERTIES (
-"max_batch_interval" = "10",
-"max_batch_rows" = "1000000",
-"max_batch_size" = "109715200",
-"load_to_single_tablet" = "true",
-"timeout" = "600",
-"strict_mode" = "false",
-"format" = "json"
-)
-FROM KAFKA (
-"kafka_broker_list" = "host:port",
-"kafka_topic" = "log_\_topic_",
-"property.group.id" = "your_group_id",
-"property.security.protocol"="SASL_PLAINTEXT",
-"property.sasl.mechanism"="GSSAPI",
-"property.sasl.kerberos.service.name"="kafka",
-"property.sasl.kerberos.keytab"="/path/to/xxx.keytab",
-"property.sasl.kerberos.principal"="<[email protected]>"
-);
--- 查看routine的状态
-SHOW ROUTINE LOAD;
-```
-
-更多关于 Kafka 配置和使用的说明,可参考 [Routine
Load](../data-operate/import/routine-load-manual.md)。
-
-**使用自定义程序采集日志**
-
-除了对接常用的日志采集器以外,你也可以自定义程序,通过 HTTP API Stream Load 将日志数据导入 Apache Doris。参考以下代码:
-
-```Bash
-curl \\
-\--location-trusted \\
-\-u username:password \\
-\-H "format:json" \\
-\-H "read_json_by_line:true" \\
-\-H "load_to_single_tablet:true" \\
-\-H "timeout:600" \\
-\-T logfile.json \\
-http://fe_host:fe_http_port/api/log_db/log_table/\_stream_load
-```
-
-在使用自定义程序时,需注意以下关键点:
-
-- 使用 Basic Auth 进行 HTTP 鉴权,用命令 `echo -n 'username:password' | base64` 进行计算。
-- 设置 HTTP header "format:json",指定数据格式为 JSON。
-- 设置 HTTP header "read_json_by_line:true",指定每行一个 JSON。
-- 设置 HTTP header "load_to_single_tablet:true",指定一次导入写入一个分桶减少导入的小文件。
-- 建议写入客户端一个 Batch 的大小为 100MB ~ 1GB。如果你使用的是 Apache Doris 2.1 及更高版本,需通过服务端 Group
Commit 功能,降低客户端 Batch 大小。
-
-### 第 6 步:查询和分析日志
-
-**日志查询**
-
-Apache Doris 支持标准 SQL,因此,你可以通过 MySQL 客户端或者 JDBC 等方式连接到集群,执行 SQL 进行日志查询。参考以下命令:
-
-```
-mysql -h fe_host -P fe_mysql_port -u your_username -Dyour_db_name
-```
-
-下方列出常见的 5 条 SQL 查询命令,以供参考:
-
-- 查看最新的 10 条数据
-
-```SQL
-SELECT \* FROM your_table_name ORDER BY ts DESC LIMIT 10;
-```
-
-- 查询 `host` 为 `8.8.8.8` 的最新 10 条数据
-
-```SQL
-SELECT \* FROM your_table_name WHERE host = '8.8.8.8' ORDER BY ts DESC LIMIT
10;
-```
-
-- 检索请求字段中有 `error` 或者 `404` 的最新 10 条数据。其中,`MATCH_ANY` 是 Apache Doris 全文检索的 SQL
语法,用于匹配参数中任一关键字。
-
-```SQL
-SELECT \* FROM your_table_name WHERE message MATCH_ANY 'error 404'
-ORDER BY ts DESC LIMIT 10;
-```
-
-- 检索请求字段中有 `image` 和 `faq` 的最新 10 条数据。其中,`MATCH_ALL` 是 Apache Doris 全文检索的 SQL
语法,用于匹配参数中所有关键字。
-
-```SQL
-SELECT \* FROM your_table_name WHERE message MATCH_ALL 'image faq'
-ORDER BY ts DESC LIMIT 10;
-```
-
-- 检索请求字段中有 `image` 和 `faq` 的最新 10 条数据。其中,`MATCH_PHRASE` 是 Apache Doris 全文检索的
SQL 语法,用于匹配参数中所有关键字,并且要求顺序一致。在下方例子中,`a image faq b` 能匹配,但是 `a faq image b`
不能匹配,因为 `image` 和 `faq` 的顺序与查询不一致。
-
-```SQL
-SELECT \* FROM your_table_name WHERE message MATCH_PHRASE 'image faq'
-ORDER BY ts DESC LIMIT 10;
-```
-
-**可视化日志分析**
-
-基于 Apache Doris 构建的 SelectDB Enterprise Core 提供了名为 Doris WebUI 的数据开发平台,Doris
WebUI 包含了类 Kibana Discover 的日志检索分析界面,提供直观、易用的探索式日志分析交互,如下图所示:
-
-
-
-在此界面上,Doris WebUI 主要支持以下功能:
-
-- 支持全文检索和 SQL 两种模式
-- 支持时间框和直方图上选择查询日志的时间段
-- 支持信息丰富的日志明细展示,还可以展开成 JSON 或表格
-- 在日志数据上下文交互式点击增加和删除筛选条件
-- 搜索结果的字段 Top 值展示,便于发现异常值和进一步下钻分析
-
-你可以 [点此下载 SelectDB Enterprise
Core](https://www.selectdb.com/download/enterprise#core),完成
[安装](https://docs.selectdb.com/docs/enterprise/enterprise-core-guide/selectdb-distribution-doris-core-deployment-guide)
后,即可使用 Doris WebUI 登录数据库。更多关于如何使用 Doris WebUI 的信息,可参考
[WebUI](https://docs.selectdb.com/docs/enterprise/enterprise-core-guide/selectdb-webui-guide)。
\ No newline at end of file
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.json
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.json
index d60496fc4eb..48e5786a9f4 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.json
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.json
@@ -322,5 +322,9 @@
"sidebar.get-starting.category.Tutorials": {
"message": "使用教程",
"description": "The label for category BI and Database IDE in sidebar docs"
+ },
+ "sidebar.get-starting.category.Building lakehouse": {
+ "message": "构建 Lakehouse",
+ "description": "The label for category BI and Database IDE in sidebar docs"
}
}
\ No newline at end of file
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.0.json
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.0.json
index dd17024688e..9d3f74f7bd7 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.0.json
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.0.json
@@ -378,5 +378,9 @@
"sidebar.get-starting.category.Tutorials": {
"message": "使用教程",
"description": "The label for category BI and Database IDE in sidebar docs"
+ },
+ "sidebar.get-starting.category.Building lakehouse": {
+ "message": "构建 Lakehouse",
+ "description": "The label for category BI and Database IDE in sidebar docs"
}
}
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.0/practical-guide/log-storage-analysis.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.0/practical-guide/log-storage-analysis.md
deleted file mode 100644
index 1a358d8a3b5..00000000000
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.0/practical-guide/log-storage-analysis.md
+++ /dev/null
@@ -1,564 +0,0 @@
----
-{
- "title": "日志存储与分析",
- "language": "zh-CN"
-}
----
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-日志是系统运行的详细记录,包含各种事件发生的主体、时间、位置、内容等关键信息。出于运维可观测、网络安全监控及业务分析等多重需求,企业通常需要将分散的日志采集起来,进行集中存储、查询和分析,以进一步从日志数据里挖掘出有价值的内容。
-
-针对此场景,Apache Doris 提供了相应解决方案,针对日志场景的特点,增加了倒排索引和极速全文检索能力,极致优化写入性能和存储空间,使得用户可以基于
Apache Doris 构建开放、高性能、低成本、统一的日志存储与分析平台。
-
-本文将围绕这一解决方案,介绍以下内容:
-
-- **整体架构**:说明基于 Apache Doris 构建的日志存储与分析平台的核心组成部分和基础架构。
-- **特点与优势**:说明基于 Apache Doris 构建的日志存储与分析平台的特点和优势。
-- **操作指南**:说明如何基于 Apache Doris 构建日志存储分析平台。
-
-## 整体架构
-
-基于 Apache Doris 构建的日志存储与分析平台的架构如下图:
-
-
-
-此架构主要由 3 大部分组成:
-
-- **日志采集和预处理**:多种日志采集工具可以通过 HTTP APIs 将日志数据写入 Apache Doris。
-- **日志存储和分析引擎**:Apache Doris 提供高性能、低成本的统一日志存储,通过 SQL 接口提供丰富的检索分析能力。
-- **日志分析和告警界面**:多种日志检索分析通工具通过标准 SQL 接口查询 Apache Doris,为用户提供简单易用的界面。
-
-## 特点与优势
-
-基于 Apache Doris 构建的日志存储与分析平台的特点和优势如下:
-
-- **高吞吐、低延迟日志写入**:支持每天百 TB 级、GB/s 级日志数据持续稳定写入,同时保持延迟 1s 以内。
-- **海量日志数据低成本存储**:支持 PB 级海量存储,相对于 Elasticsearch 存储成本节省 60% 到 80%,支持冷数据存储到
S3/HDFS,存储成本再降 50%。
-- **高性能日志全文检索分析**:支持倒排索引和全文检索,日志场景常见查询(关键词检索明细、趋势分析等)秒级响应。
-- **开放、易用的上下游生态**:上游通过 Stream Load 通用 HTTP APIs 对接常见的日志采集系统和数据源
Logstash、Filebeat、Fluentbit、Kafka 等,下游通过标准 MySQL 协议和语法对接各种可视化分析 UI,比如可观测性
Grafana、BI 分析 Superset、类 Kibana 的日志检索 Doris WebUI。
-
-### 高性能、低成本
-
-经过 Benchmark 测试及生产验证,基于 Apache Doris 构建的日志存储与分析平台,性价比相对于 Elasticsearch 具有 5~10
倍的提升。Apache Doris 的性能优势,主要得益于全球领先的高性能存储和查询引擎,以及下面一些针对日志场景的专门优化:
-
-- **写入吞吐提升**:Elasticsearch 写入的性能瓶颈在于解析数据和构建倒排索引的 CPU 消耗。相比之下,Apache Doris
进行了两方面的写入优化:一方面利用 SIMD 等 CPU 向量化指令提升了 JSON
数据解析速度和索引构建性能;另一方面针对日志场景简化倒了排索引结构,去掉日志场景不需要的正排等数据结构,有效降低了索引构建的复杂度。同样的资源,Apache
Doris 的写入性能是 Elasticsearch 的 3~5 倍。
-- **存储成本降低**:Elasticsearch 存储瓶颈在于正排、倒排、Docvalue 列存多份存储和通用压缩算法压缩率较低。相比之下,Apache
Doris 在存储上进行了以下优化:去掉正排,缩减了 30% 的索引数据量;采用列式存储和 Zstandard 压缩算法,压缩比可达到 5~10 倍,远高于
Elasticsearch 的 1.5 倍;日志数据中冷数据访问频率很低,Apache Doris
冷热分层功能可以将超过定义时间段的日志自动存储到更低的对象存储中,冷数据的存储成本可降低 70% 以上。同样的原始数据,SelectDB 的存储成本只需要
Elasticsearch 的 20% 左右。
-- **查询性能提升**:Apache Doris
将全文检索的流程简化,跳过了相关性打分等日志场景不需要的算法,加速基础的检索性能。同时针对日志场景常见的查询,比如查询包含某个关键字的最新 100
条日志,在查询规划和执行上做专门的 TopN 动态剪枝等优化。
-
-### 分析能力强
-
-Apache Doris 支持标准 SQL、兼容 MySQL 协议和语法,因此基于 Apache Doris 构建的日志系统能够使用 SQL
进行日志分析,这使得日志系统具备以下优势:
-
-- **简单易用**:工程师和数据分析师对于 SQL 非常熟悉,经验可以复用,不需要学习新的技术栈即可快速上手。
-- **生态丰富**:MySQL 生态是数据库领域使用最广泛的语言,因此可以与 MySQL 生态的集成和应用无缝衔接。Doris 可以利用 MySQL
命令行与各种 GUI 工具、BI 工具等大数据生态结合,实现更复杂及多样化的数据处理分析需求。
-- **分析能力强**:SQL 语言已经成为数据库和大数据分析的事实标准,它具有强大的表达能力和功能,支持检索、聚合、多表
JOIN、子查询、UDF、逻辑视图、物化视图等多种数据分析能力。
-
-### Flexible Schema
-
-下面是一个典型的 JSON
格式半结构化日志样例。顶层字段是一些比较固定的字段,比如日志时间戳(`timestamp`),日志来源(`source`),志所在机器(`node`),打日志的模块(`component`),日志级别(`level`),客户端请求标识(`clientRequestId`),日志内容(`message`),日志扩展属性(`properties`),基本上每条日志都会有。而扩展属性
`properties` 的内部嵌套字段 `properties.size`、`properties.format`
等是比较动态的,每条日志的字段可能不一样。
-
-```JSON
-{
-"timestamp": "2014-03-08T00:50:03.8432810Z",
-"source": "ADOPTIONCUSTOMERS81",
-"node": "Engine000000000405",
-"level": "Information",
-"component": "DOWNLOADER",
-"clientRequestId": "671db15d-abad-94f6-dd93-b3a2e6000672",
-"message": "Downloading file path:
benchmark/2014/ADOPTIONCUSTOMERS81_94_0.parquet.gz",
-"properties": {
-"size": 1495636750,
-"format": "parquet",
-"rowCount": 855138,
-"downloadDuration": "00:01:58.3520561"
-}
-}
-```
-
-Apache Doris 对 Flexible Schema 的日志数据提供了几个方面的支持:
-
-- 对于顶层字段的少量变化,可以通过 Light Schema Change 发起 ADD / DROP COLUMN 增加 / 删除列,ADD /
DROP INDEX 增加 / 删除索引,能够在秒级完成 Schema 变更。用户在日志平台规划时只需考虑当前需要哪些字段创建索引。
-- 对于类似 `properties` 的扩展字段,提供了原生半结构化数据类型 `VARIANT`,可以写入任何 JSON 数据,自动识别 JSON
中的字段名和类型,并自动拆分频繁出现的字段采用列式存储,以便于后续的分析,还可以对 `VARIANT` 创建倒排索引,加快内部字段的查询和检索。
-
-相对于 Elasticsearch 的 Dynamic Mapping,Apache Doris 的 Flexible Schema 有以下优势:
-
-- 允许一个字段有多种类型,`VARIANT` 自动对字段类型做冲突处理和类型提升,更好地适应日志数据的迭代变化。
-- `VARIANT` 自动将不频繁出现的字段合并成一个列存储,可避免字段、元数据、列过多导致性能问题。
-- 不仅可以动态加列,还可以动态删列、动态增加索引、动态删索引,无需像 Elasticsearch 在一开始对所有字段建索引,减少不必要的成本。
-
-## 操作指南
-
-### 第 1 步:评估资源
-
-在部署集群之前,首先应评估所需服务器硬件资源,包括以下几个关键步骤:
-
-1. **评估写入资源**:计算公式如下:
-
- - 日增数据量 / 86400 s = 平均写入吞吐
- - 平均写入吞吐 \* 写入吞吐峰值 / 均值比 = 峰值写入吞吐
- - 峰值写入吞吐 / 单核写入吞吐 = 峰值写入所需 CPU 核数
-
-2. **评估存储资源**:计算公式为「日增数据量 / 压缩率 * 副本数 * 数据存储周期 = 所需存储空间」。
-
-3. **评估查询资源**:查询的资源消耗随查询量和复杂度而异,建议初始预留 50% 的 CPU 资源用于查询,再根据实际测试情况进行调整。
-
-4. **汇总整合资源**:由第 1 步和第 3 步估算出所需 CPU 核数后,除以单机 CPU 核数,估算出 BE 服务器数量,再根据 BE
服务器数量和第 2 步的结果,估算出每台 BE 服务器所需存储空间,然后分摊到 4~12 块数据盘,计算出单盘存储容量。
-
-以每天新增 100 TB 数据量(压缩前)、7 倍压缩率、1 副本、热数据存储 3 天、冷数据存储 30 天、写入吞吐峰值 / 均值比
200%、单核写入吞吐 10 MB/s、查询预留 50% CPU 资源为例,可估算出:
-
-- FE:3 台服务器,每台配置 16 核 CPU、64 GB 内存、1 块 100 GB SSD 盘
-- BE:15 台服务器,每台配置 32 核 CPU、256 GB 内存、8 块 500 GB SSD 盘
-- Amazon S3 存储空间:即为预估冷数据存储空间,430 TB
-
-该例子中,各关键指标的值及具体计算方法可见下表:
-
-| 关键指标(单位) | 值 | 说明
|
-| :------------------------------- | :---- |
:----------------------------------------------------------- |
-| 日增数据量(TB) | 100 | 根据实际需求填写
|
-| 压缩率 | 7 | 一般为 5~10 倍(含索引),根据实际需求填写
|
-| 副本数 | 1 | 根据实际需求填写,默认 1 副本,可选值:1,2,3
|
-| 热数据存储周期(天) | 3 | 根据实际需求填写
|
-| 冷数据存储周期(天) | 30 | 根据实际需求填写
|
-| 总存储周期(天) | 33 | 算法:热数据存储周期 + 冷数据存储周期
|
-| 预估热数据存储空间(TB) | 42.9 | 算法:日增数据量 / 压缩率 * 副本数 * 热数据存储周期 |
-| 预估冷数据存储空间(TB) | 428.6 | 算法:日增数据量 / 压缩率 * 副本数 * 冷数据存储周期 |
-| 写入吞吐峰值 / 均值比 | 200% | 根据实际需求填写,默认 200%
|
-| 单机 CPU 核数 | 32 | 根据实际需求填写,默认 32 核
|
-| 平均写入吞吐(MB/s) | 1214 | 算法:日增数据量 / 86400 s
|
-| 峰值写入吞吐(MB/s) | 2427 | 算法:平均写入吞吐 * 写入吞吐峰值 / 均值比
|
-| 峰值写入所需 CPU 核数 | 242.7 | 算法:峰值写入吞吐 / 单机写入吞吐
|
-| 查询预留 CPU 百分比 | 50% | 根据实际需求填写,默认 50%
|
-| 预估 BE 服务器数 | 15.2 | 算法:峰值写入所需 CPU 核数 / 单机 CPU 核数 /(1 - 查询预留
CPU 百分比) |
-| 预估 BE 服务器数取整 | 15 | 算法:MAX (副本数,预估 BE 服务器数上取整)
|
-| 预估每台 BE 服务器存储空间(TB) | 4.03 | 算法:预估热数据存储空间 / 预估 BE 服务器数 /(1 - 30%),其中,30%
是存储空间预留值。建议每台 BE 服务器挂载 4~12 块数据盘,以提高 I/O 能力。 |
-
-### 第 2 步:部署集群
-
-完成资源评估后,可以开始部署 Apache Doris 集群,推荐在物理机及虚拟机环境中进行部署。手动部署集群,可参考
[手动部署](../install/cluster-deployment/standard-deployment.md)。
-
-另,推荐使用 SelectDB Enterprise 推出的 Cluster Manager 工具部署集群,以降低整体部署成本。更多关于 Cluster
Manager 的信息,可参考以下文档:
-
-- [Cluster Manager for Apache Doris 24.x
安装手册](https://docs.selectdb.com/docs/enterprise/cluster-manager-guide/deployment-guide/deployment-guide-24.x)
-- [Cluster Manager for Apache Doris 24.x
使用手册](https://docs.selectdb.com/docs/enterprise/cluster-manager-guide/management-guide/management-guide-24.x)
-
-### 第 3 步:优化 FE 和 BE 配置
-
-完成集群部署后,需分别优化 FE 和 BE 配置参数,以更加契合日志存储与分析的场景。
-
-**优化 FE 配置**
-
-在 `fe/conf/fe.conf` 目录下找到 FE 的相关配置项,并按照以下表格,调整 FE 配置。
-
-| 需调整参数 | 说明
|
-| :----------------------------------------------------------- |
:----------------------------------------------------------- |
-| `max_running_txn_num_per_db = 10000` |
高并发导入运行事务数较多,需调高参数。 |
-| `streaming_label_keep_max_second = 3600``label_keep_max_second = 7200` |
高频导入事务标签内存占用多,保留时间调短。 |
-| `enable_round_robin_create_tablet = true` | 创建 Tablet
时,采用 Round Robin 策略,尽量均匀。 |
-| `tablet_rebalancer_type = partition` | 均衡 Tablet
时,采用每个分区内尽量均匀的策略。 |
-| `enable_single_replica_load = true` |
开启单副本导入,多个副本只需构建一次索引,减少 CPU 消耗。 |
-| `autobucket_min_buckets = 10` | 将自动分桶的最小分桶数从
1 调大到 10,避免日志量增加时分桶不够。 |
-| `max_backend_heartbeat_failure_tolerance_count = 10` | 日志场景下 BE
服务器压力较大,可能短时间心跳超时,因此将容忍次数从 1 调大到 10。 |
-
-更多关于 FE 配置项的信息,可参考 [FE 配置项](../admin-manual/config/fe-config.md)。
-
-**优化 BE 配置**
-
-在 `be/conf/be.conf` 目录下找到 BE 的相关配置项,并按照以下表格,调整 BE 配置。
-
-| 模块 | 需调整参数 | 说明
|
-| :--------- | :----------------------------------------------------------- |
:----------------------------------------------------------- |
-| 存储 | `storage_root_path =
/path/to/dir1;/path/to/dir2;...;/path/to/dir12` | 配置热数据在磁盘目录上的存储路径。
|
-| - | `enable_file_cache = true` |
开启文件缓存。 |
-| - | `file_cache_path = [{"path": "/mnt/datadisk0/file_cache",
"total_size":53687091200, "query_limit": "10737418240"},{"path":
"/mnt/datadisk1/file_cache", "total_size":53687091200,"query_limit":
"10737418240"}]` |
配置冷数据的缓存路径和相关设置,具体配置说明如下:<br/>`path`:缓存路径<br/>`total_size`:该缓存路径的总大小,单位为字节,53687091200
字节等于 50 GB<br/>`query_limit`:单次查询可以从缓存路径中查询的最大数据量,单位为字节,10737418240 字节等于 10 GB
|
-| 写入 | `write_buffer_size = 1073741824` |
增加写入缓冲区(buffer)的文件大小,减少小文件和随机 I/O 操作,提升性能。 |
-| - | `max_tablet_version_num = 20000` |
配合建表的 time_series compaction 策略,允许更多版本暂时未合并。 |
-| - | `enable_single_replica_load = true` |
开启单副本写入,减少 CPU 消耗。与 FE 配置相同。 |
-| Compaction | `max_cumu_compaction_threads = 8` |
设置为 CPU 核数 / 4,意味着 CPU 资源的 1/4 用于写入,1/4 用于后台 Compaction,2/1 留给查询和其他操作。 |
-| - | `inverted_index_compaction_enable = true` |
开启索引合并(index compaction),减少 Compaction 时的 CPU 消耗。 |
-| - | `enable_segcompaction = false` `enable_ordered_data_compaction
= false` | 关闭日志场景不需要的两个 Compaction 功能。 |
-| 缓存 | `disable_storage_page_cache = true`
`inverted_index_searcher_cache_limit = 30%` |
因为日志数据量较大,缓存(cache)作用有限,因此关闭数据缓存,调换为索引缓存(index cache)的方式。 |
-| - | `inverted_index_cache_stale_sweep_time_sec = 3600`
`index_cache_entry_stay_time_after_lookup_s = 3600` | 让索引缓存在内存中尽量保留 1 小时。
|
-| - | `enable_inverted_index_cache_on_cooldown = true` <br
/>`enable_write_index_searcher_cache = false` | 开启索引上传冷数据存储时自动缓存的功能。
|
-| - | `tablet_schema_cache_recycle_interval = 3600`
`segment_cache_capacity = 20000` | 减少其他缓存对内存的占用。
|
-| 线程 | `pipeline_executor_size = 24`
`doris_scanner_thread_pool_thread_num = 48` | 32 核 CPU 的计算线程和 I/O
线程配置,根据核数等比扩缩。 |
-| - | `scan_thread_nice_value = 5` |
降低查询 I/O 线程的优先级,保证写入性能和时效性。 |
-| 其他 | `string_type_length_soft_limit_bytes = 10485760` | 将
String 类型数据的长度限制调高至 10 MB。 |
-| - | `trash_file_expire_time_sec = 300`
`path_gc_check_interval_second = 900` `path_scan_interval_second = 900` |
调快垃圾文件的回收时间。 |
-
-更多关于 BE 配置项的信息,可参考 [BE 配置项](../admin-manual/config/be-config.md)。
-
-### 第 4 步:建表
-
-由于日志数据的写入和查询都具备明显的特征,因此,在建表时按照本节说明进行针对性配置,以提升性能表现。
-
-**配置分区分桶参数**
-
-- 分区时,按照以下说明配置:
-- 使用时间字段上的 [Range
分区](https://doris.apache.org/zh-CN/docs/2.0/table-design/data-partition/#range-%E5%88%86%E5%8C%BA),并开启
[动态分区](https://doris.apache.org/zh-CN/docs/2.0/table-design/data-partition#%E5%8A%A8%E6%80%81%E5%88%86%E5%8C%BA),按天自动管理分区。
-- 使用 Datetime 类型的时间字段作为 Key,在查询最新 N 条日志时有数倍加速。
-- 分桶时,按照以下说明配置:
-- 分桶数量大致为集群磁盘总数的 3 倍。
-- 使用 Random 策略,配合写入时的 Single Tablet 导入,可以提升批量(Batch)写入的效率。
-
-更多关于分区分桶的信息,可参考 [分区分桶](../table-design/data-partition.md)。
-
-**配置 Compaction 参数**
-
-按照以下说明配置 Compaction 参数:
-
-- 使用 time_series 策略,以减轻写放大效应,对于高吞吐日志写入的资源写入很重要。
-- 使用单副本 Compaction,减少多副本 Compaction 的开销。
-
-**建立和配置索引参数**
-
-按照以下说明操作:
-
-- 对经常查询的字段建立索引。
-- 对需要全文检索的字段,将分词器(parser)参数赋值为 unicode,一般能满足大部分需求。如有支持短语查询的需求,将 support_phrase
参数赋值为 true;如不需要,则设置为 false,以降低存储空间。
-
-**配置存储策略**
-
-按照以下说明操作:
-
-- 对于热存储数据,如果使用云盘,可配置 1 副本;如果使用物理盘,则至少配置 2 副本。
-- 配置 `log_s3` 的存储位置,并设置 `log_policy_3day` 冷热数据分层策略,即在超过 3 天后将数据冷却至 `log_s3`
指定的存储位置。可参考以下代码:
-
-```Go
-CREATE DATABASE log_db;
-USE log_db;
-
-CREATE RESOURCE "log_s3"
-PROPERTIES
-(
- "type" = "s3",
- "s3.endpoint" = "your_endpoint_url",
- "s3.region" = "your_region",
- "s3.bucket" = "your_bucket",
- "s3.root.path" = "your_path",
- "s3.access_key" = "your_ak",
- "s3.secret_key" = "your_sk"
-);
-
-CREATE STORAGE POLICY log_policy_3day
-PROPERTIES(
- "storage_resource" = "log_s3",
- "cooldown_ttl" = "259200"
-);
-
-CREATE TABLE log_table
-(
- `ts` DATETIME,
- `host` TEXT,
- `path` TEXT,
- `message` TEXT,
- INDEX idx_host (`host`) USING INVERTED,
- INDEX idx_path (`path`) USING INVERTED,
- INDEX idx_message (`message`) USING INVERTED PROPERTIES("parser" =
"unicode", "support_phrase" = "true")
-)
-ENGINE = OLAP
-DUPLICATE KEY(`ts`)
-PARTITION BY RANGE(`ts`) ()
-DISTRIBUTED BY RANDOM BUCKETS 250
-PROPERTIES (
-"dynamic_partition.enable" = "true",
-"dynamic_partition.create_history_partition" = "true",
-"dynamic_partition.time_unit" = "DAY",
-"dynamic_partition.start" = "-30",
-"dynamic_partition.end" = "1",
-"dynamic_partition.prefix" = "p",
-"dynamic_partition.buckets" = "250",
-"dynamic_partition.replication_num" = "1", -- 存算分离不需要
-"replication_num" = "1" -- 存算分离不需要
-"enable_single_replica_compaction" = "true", -- 存算分离不需要
-"storage_policy" = "log_policy_3day", -- 存算分离不需要
-"compaction_policy" = "time_series"
-);
-```
-
-### 第 5 步:采集日志
-
-完成建表后,可进行日志采集。
-
-Apache Doris 提供开放、通用的 Stream HTTP APIs,通过这些 APIs,你可与常用的日志采集器打通,包括
Logstash、Filebeat、Kafka 等,从而开展日志采集工作。本节介绍了如何使用 Stream HTTP APIs 对接日志采集器。
-
-**对接 Logstash**
-
-按照以下步骤操作:
-
-1. 下载并安装 Logstash Doris Output 插件。你可选择以下两种方式之一:
-
--
直接下载:[点此下载](https://apache-doris-releases.oss-accelerate.aliyuncs.com/logstash-output-doris-1.0.0.gem)。
-
-- 从源码编译,并运行下方命令安装:
-
-```markdown
-./bin/logstash-plugin install logstash-output-doris-1.0.0.gem
-```
-
-2. 配置 Logstash。需配置以下参数:
-
-- `logstash.yml`:配置 Logstash 批处理日志的条数和时间,用于提升数据写入性能。
-
-```markdown
-pipeline.batch.size: 1000000
-pipeline.batch.delay: 10000
-```
-
-
-- `logstash_demo.conf`:配置所采集日志的具体输入路径和输出到 Apache Doris 的设置。
-
-```markdown
-input {
-file {
-path => "/path/to/your/log"
-}
-}
-<br />output {
-doris {
-http_hosts => \[ "<http://fehost1:http_port>", "<http://fehost2:http_port>",
"<http://fehost3:http_port"\>]
-user => "your_username"
-password => "your_password"
-db => "your_db"
-table => "your_table"
-\# doris stream load http headers
-headers => {
-"format" => "json"
-"read_json_by_line" => "true"
-"load_to_single_tablet" => "true"
-}
-\# field mapping: doris fileld name => logstash field name
-\# %{} to get a logstash field, \[\] for nested field such as \[host\]\[name\]
for host.name
-mapping => {
-"ts" => "%{@timestamp}"
-"host" => "%{\[host\]\[name\]}"
-"path" => "%{\[log\]\[file\]\[path\]}"
-"message" => "%{message}"
-}
-log_request => true
-log_speed_interval => 10
-}
-}
-```
-
-3. 按照下方命令运行 Logstash,采集日志并输出至 Apache Doris。
-
-```Bash
-./bin/logstash -f logstash_demo.conf
-```
-
-更多关于 Logstash 配置和使用的说明,可参考 [Logstash Doris Output
Plugin](../ecosystem/logstash.md)。
-
-**对接 Filebeat**
-
-按照以下步骤操作:
-
-1. 获取支持输出至 Apache Doris 的 Filebeat 二进制文件。可
[点此下载](https://apache-doris-releases.oss-accelerate.aliyuncs.com/filebeat-doris-1.0.0)
或者从 Apache Doris 源码编译。
-2. 配置 Filebeat。需配置以下参数:
-
-- `filebeat_demo.yml`:配置所采集日志的具体输入路径和输出到 Apache Doris 的设置。
-
-```YAML
- # input
- filebeat.inputs:
- - type: log
- enabled: true
- paths:
- - /path/to/your/log
- # multiline 可以将跨行的日志(比如 Java stacktrace)拼接起来
- multiline:
- type: pattern
- # 效果:以 yyyy-mm-dd HH:MM:SS 开头的行认为是一条新的日志,其他都拼接到上一条日志
- pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}'
- negate: true
- match: after
- skip_newline: true
-
- processors:
- # 用 js script 插件将日志中的 \t 替换成空格,避免 JSON 解析报错
- - script:
- lang: javascript
- source: >
- function process(event) {
- var msg = event.Get("message");
- msg = msg.replace(/\t/g, " ");
- event.Put("message", msg);
- }
- # 用 dissect 插件做简单的日志解析
- - dissect:
- # 2024-06-08 18:26:25,481 INFO (report-thread|199)
[ReportHandler.cpuReport():617] begin to handle
- tokenizer: "%{day} %{time} %{log_level} (%{thread}) [%{position}]
%{content}"
- target_prefix: ""
- ignore_failure: true
- overwrite_keys: true
-
- # queue and batch
- queue.mem:
- events: 1000000
- flush.min_events: 100000
- flush.timeout: 10s
-
- # output
- output.doris:
- fenodes: [ "http://fehost1:http_port", "http://fehost2:http_port",
"http://fehost3:http_port" ]
- user: "your_username"
- password: "your_password"
- database: "your_db"
- table: "your_table"
- # output string format
- ## %{[agent][hostname]} %{[log][file][path]} 是filebeat自带的metadata
- ## 常用的 filebeat metadata 还是有采集时间戳 %{[@timestamp]}
- ## %{[day]} %{[time]} 是上面 dissect 解析得到字段
- codec_format_string: '{"ts": "%{[day]} %{[time]}", "host":
"%{[agent][hostname]}", "path": "%{[log][file][path]}", "message":
"%{[message]}"}'
- headers:
- format: "json"
- read_json_by_line: "true"
- load_to_single_tablet: "true"
- ```
-
-3. 按照下方命令运行 Filebeat,采集日志并输出至 Apache Doris。
-
-```Bash
-chmod +x filebeat-doris-1.0.0
-./filebeat-doris-1.0.0 -c filebeat_demo.yml
-```
-
-更多关于 Filebeat 配置和使用的说明,可参考 [Beats Doris Output Plugin](../ecosystem/beats.md)。
-
-**对接 Kafka**
-
-将 JSON 格式的日志写入 Kafka 的消息队列,创建 Kafka Routine Load,即可让 Apache Doris 从 Kafka
主动拉取数据。
-
-可参考如下示例。其中,`property.\*` 是 Librdkafka 客户端相关配置,根据实际 Kafka 集群情况配置。
-
-```SQL
-\-- 准备好kafka集群和topic log_\_topic_
-\-- 创建routine load,从kafka log_\_topic_将数据导入log_table表
-CREATE ROUTINE LOAD load_log_kafka ON log_db.log_table
-COLUMNS(ts, clientip, request, status, size)
-PROPERTIES (
-"max_batch_interval" = "10",
-"max_batch_rows" = "1000000",
-"max_batch_size" = "109715200",
-"load_to_single_tablet" = "true",
-"timeout" = "600",
-"strict_mode" = "false",
-"format" = "json"
-)
-FROM KAFKA (
-"kafka_broker_list" = "host:port",
-"kafka_topic" = "log_\_topic_",
-"property.group.id" = "your_group_id",
-"property.security.protocol"="SASL_PLAINTEXT",
-"property.sasl.mechanism"="GSSAPI",
-"property.sasl.kerberos.service.name"="kafka",
-"property.sasl.kerberos.keytab"="/path/to/xxx.keytab",
-"property.sasl.kerberos.principal"="<[email protected]>"
-);
-\-- 查看routine的状态
-SHOW ROUTINE LOAD;
-```
-
-更多关于 Kafka 配置和使用的说明,可参考 [Routine
Load](../data-operate/import/routine-load-manual.md)。
-
-**使用自定义程序采集日志**
-
-除了对接常用的日志采集器以外,你也可以自定义程序,通过 HTTP API Stream Load 将日志数据导入 Apache Doris。参考以下代码:
-
-```Bash
-curl \\
-\--location-trusted \\
-\-u username:password \\
-\-H "format:json" \\
-\-H "read_json_by_line:true" \\
-\-H "load_to_single_tablet:true" \\
-\-H "timeout:600" \\
-\-T logfile.json \\
-http://fe_host:fe_http_port/api/log_db/log_table/\_stream_load
-```
-
-在使用自定义程序时,需注意以下关键点:
-
-- 使用 Basic Auth 进行 HTTP 鉴权,用命令 `echo -n 'username:password' | base64` 进行计算。
-- 设置 HTTP header "format:json",指定数据格式为 JSON。
-- 设置 HTTP header "read_json_by_line:true",指定每行一个 JSON。
-- 设置 HTTP header "load_to_single_tablet:true",指定一次导入写入一个分桶减少导入的小文件。
-- 建议写入客户端一个 Batch 的大小为 100MB ~ 1GB。如果你使用的是 Apache Doris 2.1 及更高版本,需通过服务端 Group
Commit 功能,降低客户端 Batch 大小。
-
-### 第 6 步:查询和分析日志
-
-**日志查询**
-
-Apache Doris 支持标准 SQL,因此,你可以通过 MySQL 客户端或者 JDBC 等方式连接到集群,执行 SQL 进行日志查询。参考以下命令:
-
-```
-mysql -h fe_host -P fe_mysql_port -u your_username -Dyour_db_name
-```
-
-下方列出常见的 5 条 SQL 查询命令,以供参考:
-
-- 查看最新的 10 条数据
-
-```SQL
-SELECT \* FROM your_table_name ORDER BY ts DESC LIMIT 10;
-```
-
-- 查询 `host` 为 `8.8.8.8` 的最新 10 条数据
-
-```SQL
-SELECT \* FROM your_table_name WHERE host = '8.8.8.8' ORDER BY ts DESC LIMIT
10;
-```
-
-- 检索请求字段中有 `error` 或者 `404` 的最新 10 条数据。其中,`MATCH_ANY` 是 Apache Doris 全文检索的 SQL
语法,用于匹配参数中任一关键字。
-
-```SQL
-SELECT \* FROM your_table_name WHERE message MATCH_ANY 'error 404'
-ORDER BY ts DESC LIMIT 10;
-```
-
-- 检索请求字段中有 `image` 和 `faq` 的最新 10 条数据。其中,`MATCH_ALL` 是 Apache Doris 全文检索的 SQL
语法,用于匹配参数中所有关键字。
-
-```SQL
-SELECT \* FROM your_table_name WHERE message MATCH_ALL 'image faq'
-ORDER BY ts DESC LIMIT 10;
-```
-
-- 检索请求字段中有 `image` 和 `faq` 的最新 10 条数据。其中,`MATCH_PHRASE` 是 Apache Doris 全文检索的
SQL 语法,用于匹配参数中所有关键字,并且要求顺序一致。在下方例子中,`a image faq b` 能匹配,但是 `a faq image b`
不能匹配,因为 `image` 和 `faq` 的顺序与查询不一致。
-
-```SQL
-SELECT \* FROM your_table_name WHERE message MATCH_PHRASE 'image faq'
-ORDER BY ts DESC LIMIT 10;
-```
-
-**可视化日志分析**
-
-基于 Apache Doris 构建的 SelectDB Enterprise Core 提供了名为 Doris WebUI 的数据开发平台,Doris
WebUI 包含了类 Kibana Discover 的日志检索分析界面,提供直观、易用的探索式日志分析交互,如下图所示:
-
-
-
-在此界面上,Doris WebUI 主要支持以下功能:
-
-- 支持全文检索和 SQL 两种模式
-- 支持时间框和直方图上选择查询日志的时间段
-- 支持信息丰富的日志明细展示,还可以展开成 JSON 或表格
-- 在日志数据上下文交互式点击增加和删除筛选条件
-- 搜索结果的字段 Top 值展示,便于发现异常值和进一步下钻分析
-
-你可以 [点此下载 SelectDB Enterprise
Core](https://www.selectdb.com/download/enterprise#core),完成
[安装](https://docs.selectdb.com/docs/enterprise/enterprise-core-guide/selectdb-distribution-doris-core-deployment-guide)
后,即可使用 Doris WebUI 登录数据库。更多关于如何使用 Doris WebUI 的信息,可参考
[WebUI](https://docs.selectdb.com/docs/enterprise/enterprise-core-guide/selectdb-webui-guide)。
\ No newline at end of file
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1.json
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1.json
index 27708e2bd1d..45266e4dc72 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1.json
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1.json
@@ -418,5 +418,9 @@
"sidebar.get-starting.category.Tutorials": {
"message": "使用教程",
"description": "The label for category BI and Database IDE in sidebar docs"
+ },
+ "sidebar.get-starting.category.Building lakehouse": {
+ "message": "构建 Lakehouse",
+ "description": "The label for category BI and Database IDE in sidebar docs"
}
}
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/practical-guide/log-storage-analysis.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/practical-guide/log-storage-analysis.md
deleted file mode 100644
index 50f3a02571a..00000000000
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/practical-guide/log-storage-analysis.md
+++ /dev/null
@@ -1,564 +0,0 @@
----
-{
- "title": "日志存储与分析",
- "language": "zh-CN"
-}
----
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-日志是系统运行的详细记录,包含各种事件发生的主体、时间、位置、内容等关键信息。出于运维可观测、网络安全监控及业务分析等多重需求,企业通常需要将分散的日志采集起来,进行集中存储、查询和分析,以进一步从日志数据里挖掘出有价值的内容。
-
-针对此场景,Apache Doris 提供了相应解决方案,针对日志场景的特点,增加了倒排索引和极速全文检索能力,极致优化写入性能和存储空间,使得用户可以基于
Apache Doris 构建开放、高性能、低成本、统一的日志存储与分析平台。
-
-本文将围绕这一解决方案,介绍以下内容:
-
-- **整体架构**:说明基于 Apache Doris 构建的日志存储与分析平台的核心组成部分和基础架构。
-- **特点与优势**:说明基于 Apache Doris 构建的日志存储与分析平台的特点和优势。
-- **操作指南**:说明如何基于 Apache Doris 构建日志存储分析平台。
-
-## 整体架构
-
-基于 Apache Doris 构建的日志存储与分析平台的架构如下图:
-
-
-
-此架构主要由 3 大部分组成:
-
-- **日志采集和预处理**:多种日志采集工具可以通过 HTTP APIs 将日志数据写入 Apache Doris。
-- **日志存储和分析引擎**:Apache Doris 提供高性能、低成本的统一日志存储,通过 SQL 接口提供丰富的检索分析能力。
-- **日志分析和告警界面**:多种日志检索分析通工具通过标准 SQL 接口查询 Apache Doris,为用户提供简单易用的界面。
-
-## 特点与优势
-
-基于 Apache Doris 构建的日志存储与分析平台的特点和优势如下:
-
-- **高吞吐、低延迟日志写入**:支持每天百 TB 级、GB/s 级日志数据持续稳定写入,同时保持延迟 1s 以内。
-- **海量日志数据低成本存储**:支持 PB 级海量存储,相对于 Elasticsearch 存储成本节省 60% 到 80%,支持冷数据存储到
S3/HDFS,存储成本再降 50%。
-- **高性能日志全文检索分析**:支持倒排索引和全文检索,日志场景常见查询(关键词检索明细、趋势分析等)秒级响应。
-- **开放、易用的上下游生态**:上游通过 Stream Load 通用 HTTP APIs 对接常见的日志采集系统和数据源
Logstash、Filebeat、Fluentbit、Kafka 等,下游通过标准 MySQL 协议和语法对接各种可视化分析 UI,比如可观测性
Grafana、BI 分析 Superset、类 Kibana 的日志检索 Doris WebUI。
-
-### 高性能、低成本
-
-经过 Benchmark 测试及生产验证,基于 Apache Doris 构建的日志存储与分析平台,性价比相对于 Elasticsearch 具有 5~10
倍的提升。Apache Doris 的性能优势,主要得益于全球领先的高性能存储和查询引擎,以及下面一些针对日志场景的专门优化:
-
-- **写入吞吐提升**:Elasticsearch 写入的性能瓶颈在于解析数据和构建倒排索引的 CPU 消耗。相比之下,Apache Doris
进行了两方面的写入优化:一方面利用 SIMD 等 CPU 向量化指令提升了 JSON
数据解析速度和索引构建性能;另一方面针对日志场景简化倒了排索引结构,去掉日志场景不需要的正排等数据结构,有效降低了索引构建的复杂度。同样的资源,Apache
Doris 的写入性能是 Elasticsearch 的 3~5 倍。
-- **存储成本降低**:Elasticsearch 存储瓶颈在于正排、倒排、Docvalue 列存多份存储和通用压缩算法压缩率较低。相比之下,Apache
Doris 在存储上进行了以下优化:去掉正排,缩减了 30% 的索引数据量;采用列式存储和 Zstandard 压缩算法,压缩比可达到 5~10 倍,远高于
Elasticsearch 的 1.5 倍;日志数据中冷数据访问频率很低,Apache Doris
冷热分层功能可以将超过定义时间段的日志自动存储到更低的对象存储中,冷数据的存储成本可降低 70% 以上。同样的原始数据,SelectDB 的存储成本只需要
Elasticsearch 的 20% 左右。
-- **查询性能提升**:Apache Doris
将全文检索的流程简化,跳过了相关性打分等日志场景不需要的算法,加速基础的检索性能。同时针对日志场景常见的查询,比如查询包含某个关键字的最新 100
条日志,在查询规划和执行上做专门的 TopN 动态剪枝等优化。
-
-### 分析能力强
-
-Apache Doris 支持标准 SQL、兼容 MySQL 协议和语法,因此基于 Apache Doris 构建的日志系统能够使用 SQL
进行日志分析,这使得日志系统具备以下优势:
-
-- **简单易用**:工程师和数据分析师对于 SQL 非常熟悉,经验可以复用,不需要学习新的技术栈即可快速上手。
-- **生态丰富**:MySQL 生态是数据库领域使用最广泛的语言,因此可以与 MySQL 生态的集成和应用无缝衔接。Doris 可以利用 MySQL
命令行与各种 GUI 工具、BI 工具等大数据生态结合,实现更复杂及多样化的数据处理分析需求。
-- **分析能力强**:SQL 语言已经成为数据库和大数据分析的事实标准,它具有强大的表达能力和功能,支持检索、聚合、多表
JOIN、子查询、UDF、逻辑视图、物化视图等多种数据分析能力。
-
-### Flexible Schema
-
-下面是一个典型的 JSON
格式半结构化日志样例。顶层字段是一些比较固定的字段,比如日志时间戳(`timestamp`),日志来源(`source`),志所在机器(`node`),打日志的模块(`component`),日志级别(`level`),客户端请求标识(`clientRequestId`),日志内容(`message`),日志扩展属性(`properties`),基本上每条日志都会有。而扩展属性
`properties` 的内部嵌套字段 `properties.size`、`properties.format`
等是比较动态的,每条日志的字段可能不一样。
-
-```JSON
-{
-"timestamp": "2014-03-08T00:50:03.8432810Z",
-"source": "ADOPTIONCUSTOMERS81",
-"node": "Engine000000000405",
-"level": "Information",
-"component": "DOWNLOADER",
-"clientRequestId": "671db15d-abad-94f6-dd93-b3a2e6000672",
-"message": "Downloading file path:
benchmark/2014/ADOPTIONCUSTOMERS81_94_0.parquet.gz",
-"properties": {
-"size": 1495636750,
-"format": "parquet",
-"rowCount": 855138,
-"downloadDuration": "00:01:58.3520561"
-}
-}
-```
-
-Apache Doris 对 Flexible Schema 的日志数据提供了几个方面的支持:
-
-- 对于顶层字段的少量变化,可以通过 Light Schema Change 发起 ADD / DROP COLUMN 增加 / 删除列,ADD /
DROP INDEX 增加 / 删除索引,能够在秒级完成 Schema 变更。用户在日志平台规划时只需考虑当前需要哪些字段创建索引。
-- 对于类似 `properties` 的扩展字段,提供了原生半结构化数据类型 `VARIANT`,可以写入任何 JSON 数据,自动识别 JSON
中的字段名和类型,并自动拆分频繁出现的字段采用列式存储,以便于后续的分析,还可以对 `VARIANT` 创建倒排索引,加快内部字段的查询和检索。
-
-相对于 Elasticsearch 的 Dynamic Mapping,Apache Doris 的 Flexible Schema 有以下优势:
-
-- 允许一个字段有多种类型,`VARIANT` 自动对字段类型做冲突处理和类型提升,更好地适应日志数据的迭代变化。
-- `VARIANT` 自动将不频繁出现的字段合并成一个列存储,可避免字段、元数据、列过多导致性能问题。
-- 不仅可以动态加列,还可以动态删列、动态增加索引、动态删索引,无需像 Elasticsearch 在一开始对所有字段建索引,减少不必要的成本。
-
-## 操作指南
-
-### 第 1 步:评估资源
-
-在部署集群之前,首先应评估所需服务器硬件资源,包括以下几个关键步骤:
-
-1. **评估写入资源**:计算公式如下:
-
- - 日增数据量 / 86400 s = 平均写入吞吐
- - 平均写入吞吐 \* 写入吞吐峰值 / 均值比 = 峰值写入吞吐
- - 峰值写入吞吐 / 单核写入吞吐 = 峰值写入所需 CPU 核数
-
-2. **评估存储资源**:计算公式为「日增数据量 / 压缩率 * 副本数 * 数据存储周期 = 所需存储空间」。
-
-3. **评估查询资源**:查询的资源消耗随查询量和复杂度而异,建议初始预留 50% 的 CPU 资源用于查询,再根据实际测试情况进行调整。
-
-4. **汇总整合资源**:由第 1 步和第 3 步估算出所需 CPU 核数后,除以单机 CPU 核数,估算出 BE 服务器数量,再根据 BE
服务器数量和第 2 步的结果,估算出每台 BE 服务器所需存储空间,然后分摊到 4~12 块数据盘,计算出单盘存储容量。
-
-以每天新增 100 TB 数据量(压缩前)、7 倍压缩率、1 副本、热数据存储 3 天、冷数据存储 30 天、写入吞吐峰值 / 均值比
200%、单核写入吞吐 10 MB/s、查询预留 50% CPU 资源为例,可估算出:
-
-- FE:3 台服务器,每台配置 16 核 CPU、64 GB 内存、1 块 100 GB SSD 盘
-- BE:15 台服务器,每台配置 32 核 CPU、256 GB 内存、8 块 500 GB SSD 盘
-- Amazon S3 存储空间:即为预估冷数据存储空间,430 TB
-
-该例子中,各关键指标的值及具体计算方法可见下表:
-
-| 关键指标(单位) | 值 | 说明
|
-| :------------------------------- | :---- |
:----------------------------------------------------------- |
-| 日增数据量(TB) | 100 | 根据实际需求填写
|
-| 压缩率 | 7 | 一般为 5~10 倍(含索引),根据实际需求填写
|
-| 副本数 | 1 | 根据实际需求填写,默认 1 副本,可选值:1,2,3
|
-| 热数据存储周期(天) | 3 | 根据实际需求填写
|
-| 冷数据存储周期(天) | 30 | 根据实际需求填写
|
-| 总存储周期(天) | 33 | 算法:热数据存储周期 + 冷数据存储周期
|
-| 预估热数据存储空间(TB) | 42.9 | 算法:日增数据量 / 压缩率 * 副本数 * 热数据存储周期 |
-| 预估冷数据存储空间(TB) | 428.6 | 算法:日增数据量 / 压缩率 * 副本数 * 冷数据存储周期 |
-| 写入吞吐峰值 / 均值比 | 200% | 根据实际需求填写,默认 200%
|
-| 单机 CPU 核数 | 32 | 根据实际需求填写,默认 32 核
|
-| 平均写入吞吐(MB/s) | 1214 | 算法:日增数据量 / 86400 s
|
-| 峰值写入吞吐(MB/s) | 2427 | 算法:平均写入吞吐 * 写入吞吐峰值 / 均值比
|
-| 峰值写入所需 CPU 核数 | 242.7 | 算法:峰值写入吞吐 / 单机写入吞吐
|
-| 查询预留 CPU 百分比 | 50% | 根据实际需求填写,默认 50%
|
-| 预估 BE 服务器数 | 15.2 | 算法:峰值写入所需 CPU 核数 / 单机 CPU 核数 /(1 - 查询预留
CPU 百分比) |
-| 预估 BE 服务器数取整 | 15 | 算法:MAX (副本数,预估 BE 服务器数上取整)
|
-| 预估每台 BE 服务器存储空间(TB) | 4.03 | 算法:预估热数据存储空间 / 预估 BE 服务器数 /(1 - 30%),其中,30%
是存储空间预留值。建议每台 BE 服务器挂载 4~12 块数据盘,以提高 I/O 能力。 |
-
-### 第 2 步:部署集群
-
-完成资源评估后,可以开始部署 Apache Doris 集群,推荐在物理机及虚拟机环境中进行部署。手动部署集群,可参考
[手动部署](../install/cluster-deployment/standard-deployment.md)。
-
-另,推荐使用 SelectDB Enterprise 推出的 Cluster Manager 工具部署集群,以降低整体部署成本。更多关于 Cluster
Manager 的信息,可参考以下文档:
-
-- [Cluster Manager for Apache Doris 24.x
安装手册](https://docs.selectdb.com/docs/enterprise/cluster-manager-guide/deployment-guide/deployment-guide-24.x)
-- [Cluster Manager for Apache Doris 24.x
使用手册](https://docs.selectdb.com/docs/enterprise/cluster-manager-guide/management-guide/management-guide-24.x)
-
-### 第 3 步:优化 FE 和 BE 配置
-
-完成集群部署后,需分别优化 FE 和 BE 配置参数,以更加契合日志存储与分析的场景。
-
-**优化 FE 配置**
-
-在 `fe/conf/fe.conf` 目录下找到 FE 的相关配置项,并按照以下表格,调整 FE 配置。
-
-| 需调整参数 | 说明
|
-| :----------------------------------------------------------- |
:----------------------------------------------------------- |
-| `max_running_txn_num_per_db = 10000` |
高并发导入运行事务数较多,需调高参数。 |
-| `streaming_label_keep_max_second = 3600``label_keep_max_second = 7200` |
高频导入事务标签内存占用多,保留时间调短。 |
-| `enable_round_robin_create_tablet = true` | 创建 Tablet
时,采用 Round Robin 策略,尽量均匀。 |
-| `tablet_rebalancer_type = partition` | 均衡 Tablet
时,采用每个分区内尽量均匀的策略。 |
-| `enable_single_replica_load = true` |
开启单副本导入,多个副本只需构建一次索引,减少 CPU 消耗。 |
-| `autobucket_min_buckets = 10` | 将自动分桶的最小分桶数从
1 调大到 10,避免日志量增加时分桶不够。 |
-| `max_backend_heartbeat_failure_tolerance_count = 10` | 日志场景下 BE
服务器压力较大,可能短时间心跳超时,因此将容忍次数从 1 调大到 10。 |
-
-更多关于 FE 配置项的信息,可参考 [FE 配置项](../admin-manual/config/fe-config.md)。
-
-**优化 BE 配置**
-
-在 `be/conf/be.conf` 目录下找到 BE 的相关配置项,并按照以下表格,调整 BE 配置。
-
-| 模块 | 需调整参数 | 说明
|
-| :--------- | :----------------------------------------------------------- |
:----------------------------------------------------------- |
-| 存储 | `storage_root_path =
/path/to/dir1;/path/to/dir2;...;/path/to/dir12` | 配置热数据在磁盘目录上的存储路径。
|
-| - | `enable_file_cache = true` |
开启文件缓存。 |
-| - | `file_cache_path = [{"path": "/mnt/datadisk0/file_cache",
"total_size":53687091200, "query_limit": "10737418240"},{"path":
"/mnt/datadisk1/file_cache", "total_size":53687091200,"query_limit":
"10737418240"}]` | 配置冷数据的缓存路径和相关设置,具体配置说明如下:<br />`path`:缓存路径<br
/>`total_size`:该缓存路径的总大小,单位为字节,53687091200 字节等于 50 GB<br
/>`query_limit`:单次查询可以从缓存路径中查询的最大数据量,单位为字节,10737418240 字节等于 10 GB |
-| 写入 | `write_buffer_size = 1073741824` |
增加写入缓冲区(buffer)的文件大小,减少小文件和随机 I/O 操作,提升性能。 |
-| - | `max_tablet_version_num = 20000` |
配合建表的 time_series compaction 策略,允许更多版本暂时未合并。 |
-| - | `enable_single_replica_load = true` |
开启单副本写入,减少 CPU 消耗。与 FE 配置相同。 |
-| Compaction | `max_cumu_compaction_threads = 8` |
设置为 CPU 核数 / 4,意味着 CPU 资源的 1/4 用于写入,1/4 用于后台 Compaction,2/1 留给查询和其他操作。 |
-| - | `inverted_index_compaction_enable = true` |
开启索引合并(index compaction),减少 Compaction 时的 CPU 消耗。 |
-| - | `enable_segcompaction = false` `enable_ordered_data_compaction
= false` | 关闭日志场景不需要的两个 Compaction 功能。 |
-| 缓存 | `disable_storage_page_cache = true`
`inverted_index_searcher_cache_limit = 30%` |
因为日志数据量较大,缓存(cache)作用有限,因此关闭数据缓存,调换为索引缓存(index cache)的方式。 |
-| - | `inverted_index_cache_stale_sweep_time_sec = 3600`
`index_cache_entry_stay_time_after_lookup_s = 3600` | 让索引缓存在内存中尽量保留 1 小时。
|
-| - | `enable_inverted_index_cache_on_cooldown = true` <br
/>`enable_write_index_searcher_cache = false` | 开启索引上传冷数据存储时自动缓存的功能。
|
-| - | `tablet_schema_cache_recycle_interval = 3600`
`segment_cache_capacity = 20000` | 减少其他缓存对内存的占用。
|
-| 线程 | `pipeline_executor_size = 24`
`doris_scanner_thread_pool_thread_num = 48` | 32 核 CPU 的计算线程和 I/O
线程配置,根据核数等比扩缩。 |
-| - | `scan_thread_nice_value = 5` |
降低查询 I/O 线程的优先级,保证写入性能和时效性。 |
-| 其他 | `string_type_length_soft_limit_bytes = 10485760` | 将
String 类型数据的长度限制调高至 10 MB。 |
-| - | `trash_file_expire_time_sec = 300`
`path_gc_check_interval_second = 900` `path_scan_interval_second = 900` |
调快垃圾文件的回收时间。 |
-
-更多关于 BE 配置项的信息,可参考 [BE 配置项](../admin-manual/config/be-config.md)。
-
-### 第 4 步:建表
-
-由于日志数据的写入和查询都具备明显的特征,因此,在建表时按照本节说明进行针对性配置,以提升性能表现。
-
-**配置分区分桶参数**
-
-- 分区时,按照以下说明配置:
-- 使用时间字段上的 [Range
分区](https://doris.apache.org/zh-CN/docs/dev/table-design/data-partition/#range-%E5%88%86%E5%8C%BA),并开启
[动态分区](https://doris.apache.org/zh-CN/docs/dev/table-design/data-partition?_highlight=%E8%87%AA%E5%8A%A8&_highlight=%E5%88%86&_highlight=%E6%A1%B6#%E5%8A%A8%E6%80%81%E5%88%86%E5%8C%BA),按天自动管理分区。
-- 使用 Datetime 类型的时间字段作为 Key,在查询最新 N 条日志时有数倍加速。
-- 分桶时,按照以下说明配置:
-- 分桶数量大致为集群磁盘总数的 3 倍。
-- 使用 Random 策略,配合写入时的 Single Tablet 导入,可以提升批量(Batch)写入的效率。
-
-更多关于分区分桶的信息,可参考 [分区分桶](../table-design/data-partition.md)。
-
-**配置 Compaction 参数**
-
-按照以下说明配置 Compaction 参数:
-
-- 使用 time_series 策略,以减轻写放大效应,对于高吞吐日志写入的资源写入很重要。
-- 使用单副本 Compaction,减少多副本 Compaction 的开销。
-
-**建立和配置索引参数**
-
-按照以下说明操作:
-
-- 对经常查询的字段建立索引。
-- 对需要全文检索的字段,将分词器(parser)参数赋值为 unicode,一般能满足大部分需求。如有支持短语查询的需求,将 support_phrase
参数赋值为 true;如不需要,则设置为 false,以降低存储空间。
-
-**配置存储策略**
-
-按照以下说明操作:
-
-- 对于热存储数据,如果使用云盘,可配置 1 副本;如果使用物理盘,则至少配置 2 副本。
-- 配置 `log_s3` 的存储位置,并设置 `log_policy_3day` 冷热数据分层策略,即在超过 3 天后将数据冷却至 `log_s3`
指定的存储位置。可参考以下代码:
-
-```Go
-CREATE DATABASE log_db;
-USE log_db;
-
-CREATE RESOURCE "log_s3"
-PROPERTIES
-(
- "type" = "s3",
- "s3.endpoint" = "your_endpoint_url",
- "s3.region" = "your_region",
- "s3.bucket" = "your_bucket",
- "s3.root.path" = "your_path",
- "s3.access_key" = "your_ak",
- "s3.secret_key" = "your_sk"
-);
-
-CREATE STORAGE POLICY log_policy_3day
-PROPERTIES(
- "storage_resource" = "log_s3",
- "cooldown_ttl" = "259200"
-);
-
-CREATE TABLE log_table
-(
- `ts` DATETIME,
- `host` TEXT,
- `path` TEXT,
- `message` TEXT,
- INDEX idx_host (`host`) USING INVERTED,
- INDEX idx_path (`path`) USING INVERTED,
- INDEX idx_message (`message`) USING INVERTED PROPERTIES("parser" =
"unicode", "support_phrase" = "true")
-)
-ENGINE = OLAP
-DUPLICATE KEY(`ts`)
-PARTITION BY RANGE(`ts`) ()
-DISTRIBUTED BY RANDOM BUCKETS 250
-PROPERTIES (
-"dynamic_partition.enable" = "true",
-"dynamic_partition.create_history_partition" = "true",
-"dynamic_partition.time_unit" = "DAY",
-"dynamic_partition.start" = "-30",
-"dynamic_partition.end" = "1",
-"dynamic_partition.prefix" = "p",
-"dynamic_partition.buckets" = "250",
-"dynamic_partition.replication_num" = "1", -- 存算分离不需要
-"replication_num" = "1" -- 存算分离不需要
-"enable_single_replica_compaction" = "true", -- 存算分离不需要
-"storage_policy" = "log_policy_3day", -- 存算分离不需要
-"compaction_policy" = "time_series"
-);
-```
-
-### 第 5 步:采集日志
-
-完成建表后,可进行日志采集。
-
-Apache Doris 提供开放、通用的 Stream HTTP APIs,通过这些 APIs,你可与常用的日志采集器打通,包括
Logstash、Filebeat、Kafka 等,从而开展日志采集工作。本节介绍了如何使用 Stream HTTP APIs 对接日志采集器。
-
-**对接 Logstash**
-
-按照以下步骤操作:
-
-1. 下载并安装 Logstash Doris Output 插件。你可选择以下两种方式之一:
-
--
直接下载:[点此下载](https://apache-doris-releases.oss-accelerate.aliyuncs.com/logstash-output-doris-1.0.0.gem)。
-
-- 从源码编译,并运行下方命令安装:
-
-```markdown
-./bin/logstash-plugin install logstash-output-doris-1.0.0.gem
-```
-
-2. 配置 Logstash。需配置以下参数:
-
-- `logstash.yml`:配置 Logstash 批处理日志的条数和时间,用于提升数据写入性能。
-
-```markdown
-pipeline.batch.size: 1000000
-pipeline.batch.delay: 10000
-```
-
-
-- `logstash_demo.conf`:配置所采集日志的具体输入路径和输出到 Apache Doris 的设置。
-
-```markdown
-input {
-file {
-path => "/path/to/your/log"
-}
-}
-<br />output {
-doris {
-http_hosts => \[ "<http://fehost1:http_port>", "<http://fehost2:http_port>",
"<http://fehost3:http_port"\>]
-user => "your_username"
-password => "your_password"
-db => "your_db"
-table => "your_table"
-\# doris stream load http headers
-headers => {
-"format" => "json"
-"read_json_by_line" => "true"
-"load_to_single_tablet" => "true"
-}
-\# field mapping: doris fileld name => logstash field name
-\# %{} to get a logstash field, \[\] for nested field such as \[host\]\[name\]
for host.name
-mapping => {
-"ts" => "%{@timestamp}"
-"host" => "%{\[host\]\[name\]}"
-"path" => "%{\[log\]\[file\]\[path\]}"
-"message" => "%{message}"
-}
-log_request => true
-log_speed_interval => 10
-}
-}
-```
-
-3. 按照下方命令运行 Logstash,采集日志并输出至 Apache Doris。
-
-```Bash
-./bin/logstash -f logstash_demo.conf
-```
-
-更多关于 Logstash 配置和使用的说明,可参考 [Logstash Doris Output
Plugin](../ecosystem/logstash.md)。
-
-**对接 Filebeat**
-
-按照以下步骤操作:
-
-1. 获取支持输出至 Apache Doris 的 Filebeat 二进制文件。可
[点此下载](https://apache-doris-releases.oss-accelerate.aliyuncs.com/filebeat-doris-1.0.0)
或者从 Apache Doris 源码编译。
-2. 配置 Filebeat。需配置以下参数:
-
-- `filebeat_demo.yml`:配置所采集日志的具体输入路径和输出到 Apache Doris 的设置。
-
- ```YAML
- # input
- filebeat.inputs:
- - type: log
- enabled: true
- paths:
- - /path/to/your/log
- # multiline 可以将跨行的日志(比如 Java stacktrace)拼接起来
- multiline:
- type: pattern
- # 效果:以 yyyy-mm-dd HH:MM:SS 开头的行认为是一条新的日志,其他都拼接到上一条日志
- pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}'
- negate: true
- match: after
- skip_newline: true
-
- processors:
- # 用 js script 插件将日志中的 \t 替换成空格,避免 JSON 解析报错
- - script:
- lang: javascript
- source: >
- function process(event) {
- var msg = event.Get("message");
- msg = msg.replace(/\t/g, " ");
- event.Put("message", msg);
- }
- # 用 dissect 插件做简单的日志解析
- - dissect:
- # 2024-06-08 18:26:25,481 INFO (report-thread|199)
[ReportHandler.cpuReport():617] begin to handle
- tokenizer: "%{day} %{time} %{log_level} (%{thread}) [%{position}]
%{content}"
- target_prefix: ""
- ignore_failure: true
- overwrite_keys: true
-
- # queue and batch
- queue.mem:
- events: 1000000
- flush.min_events: 100000
- flush.timeout: 10s
-
- # output
- output.doris:
- fenodes: [ "http://fehost1:http_port", "http://fehost2:http_port",
"http://fehost3:http_port" ]
- user: "your_username"
- password: "your_password"
- database: "your_db"
- table: "your_table"
- # output string format
- ## %{[agent][hostname]} %{[log][file][path]} 是filebeat自带的metadata
- ## 常用的 filebeat metadata 还是有采集时间戳 %{[@timestamp]}
- ## %{[day]} %{[time]} 是上面 dissect 解析得到字段
- codec_format_string: '{"ts": "%{[day]} %{[time]}", "host":
"%{[agent][hostname]}", "path": "%{[log][file][path]}", "message":
"%{[message]}"}'
- headers:
- format: "json"
- read_json_by_line: "true"
- load_to_single_tablet: "true"
- ```
-
-3. 按照下方命令运行 Filebeat,采集日志并输出至 Apache Doris。
-
-```Bash
-chmod +x filebeat-doris-1.0.0
-./filebeat-doris-1.0.0 -c filebeat_demo.yml
-```
-
-更多关于 Filebeat 配置和使用的说明,可参考 [Beats Doris Output Plugin](../ecosystem/beats.md)。
-
-**对接 Kafka**
-
-将 JSON 格式的日志写入 Kafka 的消息队列,创建 Kafka Routine Load,即可让 Apache Doris 从 Kafka
主动拉取数据。
-
-可参考如下示例。其中,`property.\*` 是 Librdkafka 客户端相关配置,根据实际 Kafka 集群情况配置。
-
-```SQL
-\-- 准备好kafka集群和topic log_\_topic_
-\-- 创建routine load,从kafka log_\_topic_将数据导入log_table表
-CREATE ROUTINE LOAD load_log_kafka ON log_db.log_table
-COLUMNS(ts, clientip, request, status, size)
-PROPERTIES (
-"max_batch_interval" = "10",
-"max_batch_rows" = "1000000",
-"max_batch_size" = "109715200",
-"load_to_single_tablet" = "true",
-"timeout" = "600",
-"strict_mode" = "false",
-"format" = "json"
-)
-FROM KAFKA (
-"kafka_broker_list" = "host:port",
-"kafka_topic" = "log_\_topic_",
-"property.group.id" = "your_group_id",
-"property.security.protocol"="SASL_PLAINTEXT",
-"property.sasl.mechanism"="GSSAPI",
-"property.sasl.kerberos.service.name"="kafka",
-"property.sasl.kerberos.keytab"="/path/to/xxx.keytab",
-"property.sasl.kerberos.principal"="<[email protected]>"
-);
--- 查看routine的状态
-SHOW ROUTINE LOAD;
-```
-
-更多关于 Kafka 配置和使用的说明,可参考 [Routine
Load](../data-operate/import/routine-load-manual.md)。
-
-**使用自定义程序采集日志**
-
-除了对接常用的日志采集器以外,你也可以自定义程序,通过 HTTP API Stream Load 将日志数据导入 Apache Doris。参考以下代码:
-
-```Bash
-curl \\
-\--location-trusted \\
-\-u username:password \\
-\-H "format:json" \\
-\-H "read_json_by_line:true" \\
-\-H "load_to_single_tablet:true" \\
-\-H "timeout:600" \\
-\-T logfile.json \\
-http://fe_host:fe_http_port/api/log_db/log_table/\_stream_load
-```
-
-在使用自定义程序时,需注意以下关键点:
-
-- 使用 Basic Auth 进行 HTTP 鉴权,用命令 `echo -n 'username:password' | base64` 进行计算。
-- 设置 HTTP header "format:json",指定数据格式为 JSON。
-- 设置 HTTP header "read_json_by_line:true",指定每行一个 JSON。
-- 设置 HTTP header "load_to_single_tablet:true",指定一次导入写入一个分桶减少导入的小文件。
-- 建议写入客户端一个 Batch 的大小为 100MB ~ 1GB。如果你使用的是 Apache Doris 2.1 及更高版本,需通过服务端 Group
Commit 功能,降低客户端 Batch 大小。
-
-### 第 6 步:查询和分析日志
-
-**日志查询**
-
-Apache Doris 支持标准 SQL,因此,你可以通过 MySQL 客户端或者 JDBC 等方式连接到集群,执行 SQL 进行日志查询。参考以下命令:
-
-```
-mysql -h fe_host -P fe_mysql_port -u your_username -Dyour_db_name
-```
-
-下方列出常见的 5 条 SQL 查询命令,以供参考:
-
-- 查看最新的 10 条数据
-
-```SQL
-SELECT \* FROM your_table_name ORDER BY ts DESC LIMIT 10;
-```
-
-- 查询 `host` 为 `8.8.8.8` 的最新 10 条数据
-
-```SQL
-SELECT \* FROM your_table_name WHERE host = '8.8.8.8' ORDER BY ts DESC LIMIT
10;
-```
-
-- 检索请求字段中有 `error` 或者 `404` 的最新 10 条数据。其中,`MATCH_ANY` 是 Apache Doris 全文检索的 SQL
语法,用于匹配参数中任一关键字。
-
-```SQL
-SELECT \* FROM your_table_name WHERE message MATCH_ANY 'error 404'
-ORDER BY ts DESC LIMIT 10;
-```
-
-- 检索请求字段中有 `image` 和 `faq` 的最新 10 条数据。其中,`MATCH_ALL` 是 Apache Doris 全文检索的 SQL
语法,用于匹配参数中所有关键字。
-
-```SQL
-SELECT \* FROM your_table_name WHERE message MATCH_ALL 'image faq'
-ORDER BY ts DESC LIMIT 10;
-```
-
-- 检索请求字段中有 `image` 和 `faq` 的最新 10 条数据。其中,`MATCH_PHRASE` 是 Apache Doris 全文检索的
SQL 语法,用于匹配参数中所有关键字,并且要求顺序一致。在下方例子中,`a image faq b` 能匹配,但是 `a faq image b`
不能匹配,因为 `image` 和 `faq` 的顺序与查询不一致。
-
-```SQL
-SELECT \* FROM your_table_name WHERE message MATCH_PHRASE 'image faq'
-ORDER BY ts DESC LIMIT 10;
-```
-
-**可视化日志分析**
-
-基于 Apache Doris 构建的 SelectDB Enterprise Core 提供了名为 Doris WebUI 的数据开发平台,Doris
WebUI 包含了类 Kibana Discover 的日志检索分析界面,提供直观、易用的探索式日志分析交互,如下图所示:
-
-
-
-在此界面上,Doris WebUI 主要支持以下功能:
-
-- 支持全文检索和 SQL 两种模式
-- 支持时间框和直方图上选择查询日志的时间段
-- 支持信息丰富的日志明细展示,还可以展开成 JSON 或表格
-- 在日志数据上下文交互式点击增加和删除筛选条件
-- 搜索结果的字段 Top 值展示,便于发现异常值和进一步下钻分析
-
-你可以 [点此下载 SelectDB Enterprise
Core](https://www.selectdb.com/download/enterprise#core),完成
[安装](https://docs.selectdb.com/docs/enterprise/enterprise-core-guide/selectdb-distribution-doris-core-deployment-guide)
后,即可使用 Doris WebUI 登录数据库。更多关于如何使用 Doris WebUI 的信息,可参考
[WebUI](https://docs.selectdb.com/docs/enterprise/enterprise-core-guide/selectdb-webui-guide)。
\ No newline at end of file
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.0.json
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.0.json
index 4e06e794aa9..d808f51f6f6 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.0.json
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.0.json
@@ -426,5 +426,9 @@
"sidebar.get-starting.category.Tutorials": {
"message": "使用教程",
"description": "The label for category BI and Database IDE in sidebar docs"
+ },
+ "sidebar.get-starting.category.Building lakehouse": {
+ "message": "构建 Lakehouse",
+ "description": "The label for category BI and Database IDE in sidebar docs"
}
}
diff --git a/sidebars.json b/sidebars.json
index 0af8578d3bd..f2bdfd52485 100644
--- a/sidebars.json
+++ b/sidebars.json
@@ -533,13 +533,6 @@
"admin-manual/rowsets"
]
},
- {
- "type": "category",
- "label": "Use Case",
- "items": [
- "practical-guide/log-storage-analysis"
- ]
- },
{
"type": "category",
"label": "SQL Reference",
@@ -1566,9 +1559,16 @@
"type": "category",
"label": "Tutorials",
"items": [
- "gettingStarted/tutorials/doris-hudi",
- "gettingStarted/tutorials/doris-paimon",
- "gettingStarted/tutorials/doris-iceberg"
+ {
+ "type": "category",
+ "label": "Building lakehouse",
+ "items": [
+
"gettingStarted/tutorials/building-lakehouse/doris-hudi",
+
"gettingStarted/tutorials/building-lakehouse/doris-paimon",
+
"gettingStarted/tutorials/building-lakehouse/doris-iceberg"
+ ]
+ },
+ "gettingStarted/tutorials/log-storage-analysis"
]
}
],
diff --git a/static/images/doris-based-data-lakehouse-architecture.png
b/static/images/doris-based-data-lakehouse-architecture.png
index a9757de1e82..7cabddb6e16 100644
Binary files a/static/images/doris-based-data-lakehouse-architecture.png and
b/static/images/doris-based-data-lakehouse-architecture.png differ
diff --git a/static/images/lakehouse-architecture-for-doris-and-hudi.png
b/static/images/lakehouse-architecture-for-doris-and-hudi.png
new file mode 100644
index 00000000000..9cc02a8a66a
Binary files /dev/null and
b/static/images/lakehouse-architecture-for-doris-and-hudi.png differ
diff --git a/static/images/lakehouse-architecture-for-doris-and-iceberg.png
b/static/images/lakehouse-architecture-for-doris-and-iceberg.png
new file mode 100644
index 00000000000..f93e03b4f6d
Binary files /dev/null and
b/static/images/lakehouse-architecture-for-doris-and-iceberg.png differ
diff --git a/static/images/lakehouse-architecture-for-doris-and-paimon.png
b/static/images/lakehouse-architecture-for-doris-and-paimon.png
new file mode 100644
index 00000000000..0c1c889d93f
Binary files /dev/null and
b/static/images/lakehouse-architecture-for-doris-and-paimon.png differ
diff --git a/versioned_sidebars/version-1.2-sidebars.json
b/versioned_sidebars/version-1.2-sidebars.json
index f597e5005ba..14b831333f1 100644
--- a/versioned_sidebars/version-1.2-sidebars.json
+++ b/versioned_sidebars/version-1.2-sidebars.json
@@ -1179,8 +1179,16 @@
"type": "category",
"label": "Tutorials",
"items": [
- "gettingStarted/tutorials/doris-hudi",
- "gettingStarted/tutorials/doris-paimon"
+ {
+ "type": "category",
+ "label": "Building lakehouse",
+ "items": [
+
"gettingStarted/tutorials/building-lakehouse/doris-hudi",
+
"gettingStarted/tutorials/building-lakehouse/doris-paimon",
+
"gettingStarted/tutorials/building-lakehouse/doris-iceberg"
+ ]
+ },
+ "gettingStarted/tutorials/log-storage-analysis"
]
}
],
diff --git a/versioned_sidebars/version-2.0-sidebars.json
b/versioned_sidebars/version-2.0-sidebars.json
index 004e8662f4a..07741f2a81d 100644
--- a/versioned_sidebars/version-2.0-sidebars.json
+++ b/versioned_sidebars/version-2.0-sidebars.json
@@ -452,13 +452,6 @@
"admin-manual/rowsets"
]
},
- {
- "type": "category",
- "label": "Use Case",
- "items": [
- "practical-guide/log-storage-analysis"
- ]
- },
{
"type": "category",
"label": "SQL Reference",
@@ -1401,8 +1394,16 @@
"type": "category",
"label": "Tutorials",
"items": [
- "gettingStarted/tutorials/doris-hudi",
- "gettingStarted/tutorials/doris-paimon"
+ {
+ "type": "category",
+ "label": "Building lakehouse",
+ "items": [
+
"gettingStarted/tutorials/building-lakehouse/doris-hudi",
+
"gettingStarted/tutorials/building-lakehouse/doris-paimon",
+
"gettingStarted/tutorials/building-lakehouse/doris-iceberg"
+ ]
+ },
+ "gettingStarted/tutorials/log-storage-analysis"
]
}
],
diff --git a/versioned_sidebars/version-2.1-sidebars.json
b/versioned_sidebars/version-2.1-sidebars.json
index bb8065298b1..05f3d3c5e03 100644
--- a/versioned_sidebars/version-2.1-sidebars.json
+++ b/versioned_sidebars/version-2.1-sidebars.json
@@ -494,13 +494,6 @@
"admin-manual/rowsets"
]
},
- {
- "type": "category",
- "label": "Use Case",
- "items": [
- "practical-guide/log-storage-analysis"
- ]
- },
{
"type": "category",
"label": "SQL Reference",
@@ -1513,9 +1506,16 @@
"type": "category",
"label": "Tutorials",
"items": [
- "gettingStarted/tutorials/doris-hudi",
- "gettingStarted/tutorials/doris-paimon",
- "gettingStarted/tutorials/doris-iceberg"
+ {
+ "type": "category",
+ "label": "Building lakehouse",
+ "items": [
+
"gettingStarted/tutorials/building-lakehouse/doris-hudi",
+
"gettingStarted/tutorials/building-lakehouse/doris-paimon",
+
"gettingStarted/tutorials/building-lakehouse/doris-iceberg"
+ ]
+ },
+ "gettingStarted/tutorials/log-storage-analysis"
]
}
],
diff --git a/versioned_sidebars/version-3.0-sidebars.json
b/versioned_sidebars/version-3.0-sidebars.json
index 186d0e03de1..284b0e48e71 100644
--- a/versioned_sidebars/version-3.0-sidebars.json
+++ b/versioned_sidebars/version-3.0-sidebars.json
@@ -520,13 +520,6 @@
"admin-manual/rowsets"
]
},
- {
- "type": "category",
- "label": "Use Case",
- "items": [
- "practical-guide/log-storage-analysis"
- ]
- },
{
"type": "category",
"label": "SQL Reference",
@@ -1541,9 +1534,16 @@
"type": "category",
"label": "Tutorials",
"items": [
- "gettingStarted/tutorials/doris-hudi",
- "gettingStarted/tutorials/doris-paimon",
- "gettingStarted/tutorials/doris-iceberg"
+ {
+ "type": "category",
+ "label": "Building lakehouse",
+ "items": [
+
"gettingStarted/tutorials/building-lakehouse/doris-hudi",
+
"gettingStarted/tutorials/building-lakehouse/doris-paimon",
+
"gettingStarted/tutorials/building-lakehouse/doris-iceberg"
+ ]
+ },
+ "gettingStarted/tutorials/log-storage-analysis"
]
}
],
diff --git a/yarn.lock b/yarn.lock
index 24244f8fd38..daa19a3a4ed 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3500,19 +3500,7 @@ character-reference-invalid@^1.0.0:
resolved
"https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
integrity
sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
-cheerio-select@^2.1.0:
- version "2.1.0"
- resolved
"https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
- integrity
sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
- dependencies:
- boolbase "^1.0.0"
- css-select "^5.1.0"
- css-what "^6.1.0"
- domelementtype "^2.3.0"
- domhandler "^5.0.3"
- domutils "^3.0.1"
-
[email protected]:
[email protected], cheerio@^1.0.0-rc.12, cheerio@^1.0.0-rc.3:
version "1.0.0-rc.3"
resolved
"https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
integrity
sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==
@@ -3524,23 +3512,6 @@ [email protected]:
lodash "^4.15.0"
parse5 "^3.0.1"
-cheerio@^1.0.0-rc.12:
- version "1.0.0"
- resolved
"https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0.tgz#1ede4895a82f26e8af71009f961a9b8cb60d6a81"
- integrity
sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==
- dependencies:
- cheerio-select "^2.1.0"
- dom-serializer "^2.0.0"
- domhandler "^5.0.3"
- domutils "^3.1.0"
- encoding-sniffer "^0.2.0"
- htmlparser2 "^9.1.0"
- parse5 "^7.1.2"
- parse5-htmlparser2-tree-adapter "^7.0.0"
- parse5-parser-stream "^7.1.2"
- undici "^6.19.5"
- whatwg-mimetype "^4.0.0"
-
"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.2, chokidar@^3.5.3:
version "3.6.0"
resolved
"https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
@@ -3959,17 +3930,6 @@ css-select@^4.1.3:
domutils "^2.8.0"
nth-check "^2.0.1"
-css-select@^5.1.0:
- version "5.1.0"
- resolved
"https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
- integrity
sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
- dependencies:
- boolbase "^1.0.0"
- css-what "^6.1.0"
- domhandler "^5.0.2"
- domutils "^3.0.1"
- nth-check "^2.0.1"
-
css-select@~1.2.0:
version "1.2.0"
resolved
"https://registry.npmmirror.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
@@ -3993,7 +3953,7 @@ [email protected]:
resolved
"https://registry.npmmirror.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
integrity
sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
-css-what@^6.0.1, css-what@^6.1.0:
+css-what@^6.0.1:
version "6.1.0"
resolved
"https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
integrity
sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
@@ -4308,15 +4268,6 @@ dom-serializer@^1.0.1:
domhandler "^4.2.0"
entities "^2.0.0"
-dom-serializer@^2.0.0:
- version "2.0.0"
- resolved
"https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
- integrity
sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
- dependencies:
- domelementtype "^2.3.0"
- domhandler "^5.0.2"
- entities "^4.2.0"
-
dom-serializer@~0.1.1:
version "0.1.1"
resolved
"https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
@@ -4330,7 +4281,7 @@ domelementtype@1, domelementtype@^1.3.0,
domelementtype@^1.3.1:
resolved
"https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
integrity
sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
-domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0:
+domelementtype@^2.0.1, domelementtype@^2.2.0:
version "2.3.0"
resolved
"https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
integrity
sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
@@ -4349,13 +4300,6 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
dependencies:
domelementtype "^2.2.0"
-domhandler@^5.0.2, domhandler@^5.0.3:
- version "5.0.3"
- resolved
"https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
- integrity
sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
- dependencies:
- domelementtype "^2.3.0"
-
[email protected]:
version "1.5.1"
resolved
"https://registry.npmmirror.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
@@ -4381,15 +4325,6 @@ domutils@^2.5.2, domutils@^2.8.0:
domelementtype "^2.2.0"
domhandler "^4.2.0"
-domutils@^3.0.1, domutils@^3.1.0:
- version "3.1.0"
- resolved
"https://registry.npmmirror.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
- integrity
sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
- dependencies:
- dom-serializer "^2.0.0"
- domelementtype "^2.3.0"
- domhandler "^5.0.3"
-
dot-case@^3.0.4:
version "3.0.4"
resolved
"https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
@@ -4462,14 +4397,6 @@ encodeurl@~1.0.2:
resolved
"https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity
sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
-encoding-sniffer@^0.2.0:
- version "0.2.0"
- resolved
"https://registry.npmmirror.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5"
- integrity
sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==
- dependencies:
- iconv-lite "^0.6.3"
- whatwg-encoding "^3.1.1"
-
end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.4"
resolved
"https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@@ -4495,7 +4422,7 @@ entities@^2.0.0:
resolved
"https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity
sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
-entities@^4.2.0, entities@^4.4.0, entities@^4.5.0:
+entities@^4.4.0:
version "4.5.0"
resolved
"https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity
sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
@@ -5479,16 +5406,6 @@ htmlparser2@^6.1.0:
domutils "^2.5.2"
entities "^2.0.0"
-htmlparser2@^9.1.0:
- version "9.1.0"
- resolved
"https://registry.npmmirror.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23"
- integrity
sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==
- dependencies:
- domelementtype "^2.3.0"
- domhandler "^5.0.3"
- domutils "^3.1.0"
- entities "^4.5.0"
-
http-cache-semantics@^4.0.0:
version "4.1.1"
resolved
"https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
@@ -5565,13 +5482,6 @@ [email protected]:
dependencies:
safer-buffer ">= 2.1.2 < 3"
[email protected], iconv-lite@^0.6.3:
- version "0.6.3"
- resolved
"https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
- integrity
sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
- dependencies:
- safer-buffer ">= 2.1.2 < 3.0.0"
-
icss-utils@^5.0.0, icss-utils@^5.1.0:
version "5.1.0"
resolved
"https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
@@ -6882,21 +6792,6 @@ parse-numeric-range@^1.3.0:
resolved
"https://registry.npmmirror.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3"
integrity
sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==
-parse5-htmlparser2-tree-adapter@^7.0.0:
- version "7.0.0"
- resolved
"https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1"
- integrity
sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==
- dependencies:
- domhandler "^5.0.2"
- parse5 "^7.0.0"
-
-parse5-parser-stream@^7.1.2:
- version "7.1.2"
- resolved
"https://registry.npmmirror.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz#d7c20eadc37968d272e2c02660fff92dd27e60e1"
- integrity
sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==
- dependencies:
- parse5 "^7.0.0"
-
parse5@^3.0.1:
version "3.0.3"
resolved
"https://registry.npmmirror.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
@@ -6909,13 +6804,6 @@ parse5@^6.0.0:
resolved
"https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
integrity
sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
-parse5@^7.0.0, parse5@^7.1.2:
- version "7.1.2"
- resolved
"https://registry.npmmirror.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
- integrity
sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
- dependencies:
- entities "^4.4.0"
-
parseurl@~1.3.2, parseurl@~1.3.3:
version "1.3.3"
resolved
"https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@@ -8424,7 +8312,7 @@ safe-regex-test@^1.0.3:
es-errors "^1.3.0"
is-regex "^1.1.4"
-"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
+"safer-buffer@>= 2.1.2 < 3":
version "2.1.2"
resolved
"https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity
sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -9406,11 +9294,6 @@ undici-types@~6.13.0:
resolved
"https://registry.npmmirror.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5"
integrity
sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==
-undici@^6.19.5:
- version "6.19.7"
- resolved
"https://registry.npmmirror.com/undici/-/undici-6.19.7.tgz#7d4cf26dc689838aa8b6753a3c5c4288fc1e0216"
- integrity
sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A==
-
unherit@^1.0.4:
version "1.1.3"
resolved
"https://registry.npmmirror.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"
@@ -9862,18 +9745,6 @@ websocket-extensions@>=0.1.1:
resolved
"https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
integrity
sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
-whatwg-encoding@^3.1.1:
- version "3.1.1"
- resolved
"https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5"
- integrity
sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==
- dependencies:
- iconv-lite "0.6.3"
-
-whatwg-mimetype@^4.0.0:
- version "4.0.0"
- resolved
"https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a"
- integrity
sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==
-
whatwg-url@^5.0.0:
version "5.0.0"
resolved
"https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]