【Elasticsearch】使用Data Streams

在Elasticsearch中,数据流(Data Streams)是一种用于处理时间序列数据的高级功能,它提供了一种高效、可扩展的方式来管理和查询大量的时序数据。以下是结合网页内容对Elasticsearch中"使用数据流"的详细说明:


1.什么是数据流?

数据流是一种逻辑结构,用于管理时间序列数据。它由多个后端索引(Backing Indices)组成,这些索引在内部自动管理,用户无需手动操作。数据流的主要特点是:

• 自动滚动(Rollover):当达到预设的条件(如索引大小或文档数量)时,数据流会自动创建一个新的后端索引,以确保性能和可扩展性。

• 追加只读:数据流仅支持添加新文档,不能直接更新或删除文档,这有助于保持数据的一致性和性能。

• 时间序列优化:数据流特别适合处理时间序列数据,例如日志、监控数据等。


2.数据流的主要操作

2.1 向数据流添加文档

单个文档

使用`index`API向数据流添加单个文档。支持摄取管道(Ingest Pipelines),可以在索引时对数据进行预处理。

```http

POST /my-data-stream/_doc/

{

"@timestamp": "2099-03-08T11:06:07.000Z",

"user": {

"id": "8a4f500d"

},

"message": "Login successful"

}

```

• 注意:不能使用`PUT /<target>/_doc/<_id>`格式添加文档,而应使用`PUT /<target>/_create/<_id>`。

多个文档

使用`bulk`API批量添加文档,支持`create`操作。

```http

PUT /my-data-stream/_bulk?refresh

{"create":{ }}

{ "@timestamp": "2099-03-08T11:04:05.000Z", "user": { "id": "vlb44hny" }, "message": "Login attempt failed" }

{"create":{ }}

{ "@timestamp": "2099-03-08T11:06:07.000Z", "user": { "id": "8a4f500d" }, "message": "Login successful" }

```


2.2 搜索数据流

数据流支持多种搜索API,包括:

• 普通搜索(Search)

• 异步搜索(Async Search)

• 多搜索(Multi Search)

• 字段功能(Field Capabilities)

• EQL搜索(EQL Search)


2.3 获取数据流统计信息

使用`data_streams_stats`API获取数据流的统计信息,例如索引大小、文档数量等。

```http

GET /_data_stream/my-data-stream/_stats?human=true

```


2.4 手动滚动数据流

可以通过`rollover`API手动触发数据流滚动。滚动操作会创建一个新的后端索引,并将写入操作切换到新索引。

• 立即滚动:

```http

POST /my-data-stream/_rollover/

```

• 延迟滚动:延迟滚动直到下一次写入操作发生,避免在不频繁更新的数据流中创建空索引。

```http

POST /my-data-stream/_rollover?lazy

```


2.5 打开已关闭的后端索引

如果后端索引被关闭,可以通过`open`API重新打开。可以针对单个索引或整个数据流操作。

```http

POST /.ds-my-data-stream-2099.03.07-000001/_open/

```


2.6 使用数据流重新索引

可以通过`reindex`API将现有索引、别名或数据流中的文档复制到数据流。由于数据流是追加只读的,因此重新索引操作必须使用`op_type=create`。

```http

POST /_reindex

{

"source": {

"index": "archive"

},

"dest": {

"index": "my-data-stream",

"op_type": "create"

}

}

```


2.7 更新或删除数据流中的文档

由于数据流是追加只读的,不能直接更新或删除文档。但可以通过以下方式实现:

通过查询更新或删除

使用`update_by_query`或`delete_by_query`API更新或删除与查询匹配的文档。

```http

POST /my-data-stream/_update_by_query

{

"query": {

"match": {

"user.id": "l7gk7f82"

}

},

"script": {

"source": "ctx._source.user.id = params.new_id",

"params": {

"new_id": "XgdX0NoX"

}

}

}

```

在后端索引中操作

如果需要直接更新或删除文档,可以通过后端索引操作。需要指定文档ID、序列号和主版本号。

```http

PUT /.ds-my-data-stream-2099.03.08-000003/_doc/bfspvnIBr7VVZlfp2lqX?if_seq_no=0&if_primary_term=1

{

"@timestamp": "2099-03-08T11:06:07.000Z",

"user": {

"id": "8a4f500d"

},

"message": "Login successful"

}

```


3.数据流的优势

• 自动管理:后端索引的创建和管理是自动化的,用户无需手动干预。

• 高性能:通过滚动操作,数据流可以高效地处理大量数据,同时保持查询性能。

• 时间序列优化:数据流特别适合处理时间序列数据,例如日志、监控数据等。

• 可扩展性:数据流可以根据数据量自动扩展,适合大规模数据场景。


4.适用场景

数据流特别适合以下场景:

• 日志数据:如服务器日志、应用程序日志等。

• 监控数据:如系统指标、性能数据等。

• 事件数据:如用户行为数据、事件追踪等。


5.总结

Elasticsearch的数据流功能提供了一种高效、可扩展的方式来管理和查询时间序列数据。通过自动滚动、追加只读和多种API支持,数据流能够满足大规模数据场景下的高性能需求。无论是日志数据、监控数据还是事件数据,数据流都能提供强大的支持。

如果您有更多关于数据流的问题,或者需要进一步的指导,请随时告诉我!

相关推荐
risc1234562 小时前
【Elasticsearch】Data Streams
elasticsearch
risc1234564 小时前
【Elasticsearch】索引生命周期转换
elasticsearch
kngines6 小时前
【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.1.2字段类型选择:keyword vs text、nested对象
大数据·elasticsearch·搜索引擎
m0_748256147 小时前
springboot之集成Elasticsearch
spring boot·后端·elasticsearch
risc1234569 小时前
【Elasticsearch】使用ILM自动化滚动操作
elasticsearch
risc12345610 小时前
【Elasticsearch】索引生命周期管理操作之Allocate(分配)
elasticsearch
ADFVBM10 小时前
重学SpringBoot3-整合 Elasticsearch 8.x (二)使用Repository
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客10 小时前
使用 Elasticsearch 进行集成测试初始化数据时的注意事项
大数据·数据库·elasticsearch·搜索引擎·集成测试·可用性测试
risc12345610 小时前
【Elasticsearch】自定义内置的索引生命周期管理(ILM)策略。
elasticsearch