searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Doris在日志场景的应用

2024-09-25 09:31:52
17
0

基于Elasticsearch的日志分析解决方案

l   日志收集:Filebeat收集本地日志文件并将其写入Kafka消息队列。

l   日志传输:Kafka消息队列收集和缓存日志。

l   日志转换:Logstash过滤和转换Kafka中的日志数据。

l   日志存储:LogstashJSON格式将日志写入Elasticsearch进行存储。

l   日志查询:用户通过Kibana可视化搜索日志或通过Elasticsearch DSL API发送查询请求。


存在哪些问题?

缺乏无模式支持

1.   Elasticsearch中的索引映射定义了表的结构,包括字段名称、数据类型以及是否启用索引创建。

2.   Elasticsearch还拥有自动根据输入的JSON数据添加字段到映射的动态映射机制。这提供了某种程度的无模式支持,但这还不够,因为动态映射在处理脏数据时经常会创建过多的字段,从而中断整个系统的运行。

3.   字段的数据类型是不可变的。为了确保兼容性,用户通常将数据类型配置为"文本",但这会导致比二进制数据类型(如整数)慢得多的查询性能。

4.   字段的索引也是不可变的。用户无法为特定字段添加或删除索引,因此经常为所有字段创建索引,以便在查询中方便地进行数据过滤。但是太多的索引需要额外的存储空间,并减慢数据导入速度。

分析能力不足

Elasticsearch拥有独特的领域特定语言(DSL),与大多数数据工程师和分析师熟悉的技术栈非常不同,所以存在陡峭的学习曲线。此外,Elasticsearch相对封闭的生态系统,在与BI工具集成方面会遇到一些阻力。最重要的是,Elasticsearch仅支持单表分析,滞后于现代OLAP对多表连接、子查询和视图的需求。

高成本和低稳定性

1.   计算成本:在数据写入过程中,Elasticsearch还执行计算密集型操作,包括倒排索引的创建、分词和倒排索引的排序。在这些情况下,数据以每个核心约2MB/s的速度写入Elasticsearch。当CPU资源紧张时,数据写入需求往往会在高峰时段被拒绝,进一步导致更高的延迟。

2.   存储成本:为了加快检索速度,Elasticsearch存储原始数据的正排索引、倒排索引和文档值,消耗了更多的存储空间。单个数据副本的压缩比仅为1.5:1,而大多数日志解决方案的压缩比为5:1

3.   在查询期间:由于所有查询都在内存中处理,大型查询很容易导致JVMOOM(内存溢出)。

4.   恢复缓慢:对于集群故障,Elasticsearch需要重新加载索引,这对资源消耗很大,因此恢复过程可能需要几分钟。这对于服务可用性的保证是一个挑战。

基于doris的日志存储与分析的解决方案

 

l   数据导入:Apache Doris支持多种日志数据的摄入方式。可以通过使用LogstashHTTP输出将日志推送到Doris,可以在将日志写入Doris之前使用Flink预处理日志,或者可以通过常规加载和S3加载从Flink或对象存储中加载日志到Doris中。

l   数据分析:可以把日志数据放入Doris,并在数据仓库中进行跨日志和其他数据的联接查询。

l   应用:Apache Doris兼容MySQL协议,因此可以把各种数据分析工具和客户端集成到Doris中,例如Grafana。还可以通过JDBCODBC API将应用程序连接到Doris

有哪些优势?

增加写入吞吐量

Elasticsearch的性能受到数据解析和倒排索引创建的限制,因此改进了Apache Doris在这些方面的性能:通过SIMD指令和CPU向量指令加快了数据解析和索引创建的速度;然后移除了在日志分析场景中不必要的数据结构,例如正排索引,以简化索引创建过程。

减少存储成本

移除了正排索引,这部分数据占据了索引数据的30%。采用了列式存储和ZSTD压缩算法,从而实现了5:110:1的压缩比。考虑到大部分历史日志很少被访问,引入了分层存储来分离热数据和冷数据。超过指定时间段的日志将被移动到存储成本更低的对象存储中。这可以将存储成本降低约70%

基于SQL的分析引擎

1.   基于SQL的分析引擎确保数据工程师和分析师能够在短时间内轻松掌握Apache Doris,并将其在SQL方面的经验应用到这个OLAP引擎中。借助SQL的丰富功能,用户可以执行数据检索、聚合、多表连接、子查询、UDF、逻辑视图和物化视图,以满足自身需求。

2.   具备MySQL兼容性,可以与大数据生态系统中的大多数GUIBI工具集成,使用户能够实现更复杂和多样化的数据分析。

VARIANT数据类型

存储半结构化 JSON 数据。它允许存储包含不同数据类型(如整数、字符串、布尔值等)的复杂数据结构,而无需在表结构中提前定义具体的列。VARIANT类型特别适用于处理复杂的嵌套结构,而这些结构可能随时会发生变化。在写入过程中,该类型可以自动根据列的结构、类型推断列信息,动态合并写入的 schema,并通过将 JSON 键及其对应的值存储为列和动态子列。

 

Es vs doris

Doris2.1版本(3fe+3be

Es3master+3node

基于clickbench(GitHub - ClickHouse/ClickBench: ClickBench: a Benchmark For Analytical Databases)数据集测试,测试结论导入速度提升8倍,存储降低6倍,查询性能提升4倍。

导入速度对比

导入速度/s

 

 

es

doris

 

616

76

8

存储对比

存储/GB

 

 

es

doris

 

9.5

1.5

6

性能测试对比:

 

es

doris

 

第一次/s

第二次/s

第三次/s

avg

第一次/s

第二次/s

第三次/s

avg

query1

0.03

0.01

0.01

0.02

0.02

0.04

0.03

0.03

query2

0.23

0.17

0.01

0.14

0.03

0.02

0.03

0.03

query3

0.50

0.14

0.08

0.24

0.03

0.04

0.03

0.03

query4

0.27

0.05

0.11

0.14

0.03

0.03

0.03

0.03

query5

0.17

0.08

0.02

0.09

0.06

0.05

0.06

0.06

query6

0.54

0.13

0.10

0.26

0.19

0.16

0.16

0.17

query7

0.09

0.06

0.05

0.06

0.02

0.04

0.02

0.03

query8

0.16

0.03

0.02

0.07

0.04

0.03

0.04

0.04

query9

1.43

0.83

0.84

1.03

0.09

0.08

0.08

0.08

query10

1.07

0.98

0.90

0.99

0.09

0.09

0.08

0.09

query11

0.20

0.09

0.05

0.11

0.05

0.03

0.04

0.04

query12

0.14

0.09

0.03

0.09

0.05

0.04

0.04

0.04

query13

0.58

0.21

0.13

0.31

0.17

0.17

0.17

0.17

query14

0.14

0.10

0.12

0.12

0.19

0.19

0.19

0.19

query15

0.06

0.05

0.05

0.05

0.18

0.18

0.18

0.18

query16

0.06

0.06

0.08

0.07

0.06

0.05

0.06

0.06

query17

0.10

0.09

0.10

0.10

0.14

0.14

0.14

0.14

query18

0.09

0.08

0.00

0.06

0.06

0.08

0.07

0.07

query19

0.95

0.31

0.02

0.42

0.21

0.20

0.23

0.21

query20

0.03

0.05

0.01

0.03

0.02

0.01

0.01

0.01

query21

0.68

0.19

0.19

0.35

0.07

0.04

0.05

0.05

query22

0.30

0.35

0.29

0.31

0.06

0.07

0.07

0.07

query23

0.83

1.45

0.76

1.01

0.10

0.10

0.09

0.10

query24

0.27

0.09

0.23

0.20

0.16

0.08

0.16

0.13

query25

0.52

0.05

0.04

0.20

0.03

0.03

0.03

0.03

query26

0.14

0.08

0.02

0.08

0.09

0.04

0.05

0.06

query27

0.02

0.02

0.01

0.02

0.03

0.03

0.02

0.03

query28

1.02

0.71

0.76

0.83

0.13

0.08

0.08

0.10

query30

11.42

11.13

10.87

11.14

0.19

0.09

0.08

0.12

query31

0.12

0.05

0.05

0.07

0.14

0.12

0.13

0.13

query32

0.11

0.06

0.10

0.09

0.19

0.19

0.18

0.19

query33

0.15

0.15

0.11

0.14

1.06

1.02

1.01

1.03

query34

0.25

0.54

0.19

0.32

0.68

0.67

0.68

0.68

query35

0.17

0.17

0.02

0.12

0.67

0.66

0.66

0.66

query36

0.76

0.51

0.50

0.59

0.12

0.07

0.07

0.09

query37

0.10

0.04

0.02

0.05

0.14

0.08

0.09

0.10

query38

0.12

0.37

0.10

0.20

0.05

0.04

0.04

0.04

query39

0.04

0.03

0.03

0.03

0.04

0.03

0.04

0.04

query40

0.37

0.12

0.12

0.20

0.22

0.16

0.17

0.18

query41

0.10

0.03

0.02

0.05

0.08

0.03

0.03

0.05

query42

0.06

0.03

0.02

0.03

0.03

0.04

0.04

0.04

query43

0.16

0.07

0.04

0.09

0.03

0.04

0.03

0.03

 

24.50

19.81

17.21

20.51

6.04

5.38

5.49

5.64

query29

超时

超时

超时

 

0.59

0.57

0.56

0.573

0条评论
0 / 1000
李****帅
3文章数
0粉丝数
李****帅
3 文章 | 0 粉丝
李****帅
3文章数
0粉丝数
李****帅
3 文章 | 0 粉丝
原创

Doris在日志场景的应用

2024-09-25 09:31:52
17
0

基于Elasticsearch的日志分析解决方案

l   日志收集:Filebeat收集本地日志文件并将其写入Kafka消息队列。

l   日志传输:Kafka消息队列收集和缓存日志。

l   日志转换:Logstash过滤和转换Kafka中的日志数据。

l   日志存储:LogstashJSON格式将日志写入Elasticsearch进行存储。

l   日志查询:用户通过Kibana可视化搜索日志或通过Elasticsearch DSL API发送查询请求。


存在哪些问题?

缺乏无模式支持

1.   Elasticsearch中的索引映射定义了表的结构,包括字段名称、数据类型以及是否启用索引创建。

2.   Elasticsearch还拥有自动根据输入的JSON数据添加字段到映射的动态映射机制。这提供了某种程度的无模式支持,但这还不够,因为动态映射在处理脏数据时经常会创建过多的字段,从而中断整个系统的运行。

3.   字段的数据类型是不可变的。为了确保兼容性,用户通常将数据类型配置为"文本",但这会导致比二进制数据类型(如整数)慢得多的查询性能。

4.   字段的索引也是不可变的。用户无法为特定字段添加或删除索引,因此经常为所有字段创建索引,以便在查询中方便地进行数据过滤。但是太多的索引需要额外的存储空间,并减慢数据导入速度。

分析能力不足

Elasticsearch拥有独特的领域特定语言(DSL),与大多数数据工程师和分析师熟悉的技术栈非常不同,所以存在陡峭的学习曲线。此外,Elasticsearch相对封闭的生态系统,在与BI工具集成方面会遇到一些阻力。最重要的是,Elasticsearch仅支持单表分析,滞后于现代OLAP对多表连接、子查询和视图的需求。

高成本和低稳定性

1.   计算成本:在数据写入过程中,Elasticsearch还执行计算密集型操作,包括倒排索引的创建、分词和倒排索引的排序。在这些情况下,数据以每个核心约2MB/s的速度写入Elasticsearch。当CPU资源紧张时,数据写入需求往往会在高峰时段被拒绝,进一步导致更高的延迟。

2.   存储成本:为了加快检索速度,Elasticsearch存储原始数据的正排索引、倒排索引和文档值,消耗了更多的存储空间。单个数据副本的压缩比仅为1.5:1,而大多数日志解决方案的压缩比为5:1

3.   在查询期间:由于所有查询都在内存中处理,大型查询很容易导致JVMOOM(内存溢出)。

4.   恢复缓慢:对于集群故障,Elasticsearch需要重新加载索引,这对资源消耗很大,因此恢复过程可能需要几分钟。这对于服务可用性的保证是一个挑战。

基于doris的日志存储与分析的解决方案

 

l   数据导入:Apache Doris支持多种日志数据的摄入方式。可以通过使用LogstashHTTP输出将日志推送到Doris,可以在将日志写入Doris之前使用Flink预处理日志,或者可以通过常规加载和S3加载从Flink或对象存储中加载日志到Doris中。

l   数据分析:可以把日志数据放入Doris,并在数据仓库中进行跨日志和其他数据的联接查询。

l   应用:Apache Doris兼容MySQL协议,因此可以把各种数据分析工具和客户端集成到Doris中,例如Grafana。还可以通过JDBCODBC API将应用程序连接到Doris

有哪些优势?

增加写入吞吐量

Elasticsearch的性能受到数据解析和倒排索引创建的限制,因此改进了Apache Doris在这些方面的性能:通过SIMD指令和CPU向量指令加快了数据解析和索引创建的速度;然后移除了在日志分析场景中不必要的数据结构,例如正排索引,以简化索引创建过程。

减少存储成本

移除了正排索引,这部分数据占据了索引数据的30%。采用了列式存储和ZSTD压缩算法,从而实现了5:110:1的压缩比。考虑到大部分历史日志很少被访问,引入了分层存储来分离热数据和冷数据。超过指定时间段的日志将被移动到存储成本更低的对象存储中。这可以将存储成本降低约70%

基于SQL的分析引擎

1.   基于SQL的分析引擎确保数据工程师和分析师能够在短时间内轻松掌握Apache Doris,并将其在SQL方面的经验应用到这个OLAP引擎中。借助SQL的丰富功能,用户可以执行数据检索、聚合、多表连接、子查询、UDF、逻辑视图和物化视图,以满足自身需求。

2.   具备MySQL兼容性,可以与大数据生态系统中的大多数GUIBI工具集成,使用户能够实现更复杂和多样化的数据分析。

VARIANT数据类型

存储半结构化 JSON 数据。它允许存储包含不同数据类型(如整数、字符串、布尔值等)的复杂数据结构,而无需在表结构中提前定义具体的列。VARIANT类型特别适用于处理复杂的嵌套结构,而这些结构可能随时会发生变化。在写入过程中,该类型可以自动根据列的结构、类型推断列信息,动态合并写入的 schema,并通过将 JSON 键及其对应的值存储为列和动态子列。

 

Es vs doris

Doris2.1版本(3fe+3be

Es3master+3node

基于clickbench(GitHub - ClickHouse/ClickBench: ClickBench: a Benchmark For Analytical Databases)数据集测试,测试结论导入速度提升8倍,存储降低6倍,查询性能提升4倍。

导入速度对比

导入速度/s

 

 

es

doris

 

616

76

8

存储对比

存储/GB

 

 

es

doris

 

9.5

1.5

6

性能测试对比:

 

es

doris

 

第一次/s

第二次/s

第三次/s

avg

第一次/s

第二次/s

第三次/s

avg

query1

0.03

0.01

0.01

0.02

0.02

0.04

0.03

0.03

query2

0.23

0.17

0.01

0.14

0.03

0.02

0.03

0.03

query3

0.50

0.14

0.08

0.24

0.03

0.04

0.03

0.03

query4

0.27

0.05

0.11

0.14

0.03

0.03

0.03

0.03

query5

0.17

0.08

0.02

0.09

0.06

0.05

0.06

0.06

query6

0.54

0.13

0.10

0.26

0.19

0.16

0.16

0.17

query7

0.09

0.06

0.05

0.06

0.02

0.04

0.02

0.03

query8

0.16

0.03

0.02

0.07

0.04

0.03

0.04

0.04

query9

1.43

0.83

0.84

1.03

0.09

0.08

0.08

0.08

query10

1.07

0.98

0.90

0.99

0.09

0.09

0.08

0.09

query11

0.20

0.09

0.05

0.11

0.05

0.03

0.04

0.04

query12

0.14

0.09

0.03

0.09

0.05

0.04

0.04

0.04

query13

0.58

0.21

0.13

0.31

0.17

0.17

0.17

0.17

query14

0.14

0.10

0.12

0.12

0.19

0.19

0.19

0.19

query15

0.06

0.05

0.05

0.05

0.18

0.18

0.18

0.18

query16

0.06

0.06

0.08

0.07

0.06

0.05

0.06

0.06

query17

0.10

0.09

0.10

0.10

0.14

0.14

0.14

0.14

query18

0.09

0.08

0.00

0.06

0.06

0.08

0.07

0.07

query19

0.95

0.31

0.02

0.42

0.21

0.20

0.23

0.21

query20

0.03

0.05

0.01

0.03

0.02

0.01

0.01

0.01

query21

0.68

0.19

0.19

0.35

0.07

0.04

0.05

0.05

query22

0.30

0.35

0.29

0.31

0.06

0.07

0.07

0.07

query23

0.83

1.45

0.76

1.01

0.10

0.10

0.09

0.10

query24

0.27

0.09

0.23

0.20

0.16

0.08

0.16

0.13

query25

0.52

0.05

0.04

0.20

0.03

0.03

0.03

0.03

query26

0.14

0.08

0.02

0.08

0.09

0.04

0.05

0.06

query27

0.02

0.02

0.01

0.02

0.03

0.03

0.02

0.03

query28

1.02

0.71

0.76

0.83

0.13

0.08

0.08

0.10

query30

11.42

11.13

10.87

11.14

0.19

0.09

0.08

0.12

query31

0.12

0.05

0.05

0.07

0.14

0.12

0.13

0.13

query32

0.11

0.06

0.10

0.09

0.19

0.19

0.18

0.19

query33

0.15

0.15

0.11

0.14

1.06

1.02

1.01

1.03

query34

0.25

0.54

0.19

0.32

0.68

0.67

0.68

0.68

query35

0.17

0.17

0.02

0.12

0.67

0.66

0.66

0.66

query36

0.76

0.51

0.50

0.59

0.12

0.07

0.07

0.09

query37

0.10

0.04

0.02

0.05

0.14

0.08

0.09

0.10

query38

0.12

0.37

0.10

0.20

0.05

0.04

0.04

0.04

query39

0.04

0.03

0.03

0.03

0.04

0.03

0.04

0.04

query40

0.37

0.12

0.12

0.20

0.22

0.16

0.17

0.18

query41

0.10

0.03

0.02

0.05

0.08

0.03

0.03

0.05

query42

0.06

0.03

0.02

0.03

0.03

0.04

0.04

0.04

query43

0.16

0.07

0.04

0.09

0.03

0.04

0.03

0.03

 

24.50

19.81

17.21

20.51

6.04

5.38

5.49

5.64

query29

超时

超时

超时

 

0.59

0.57

0.56

0.573

文章来自个人专栏
doris的应用场景
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0