文章转载自:

https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484473&idx=1&sn=1b3b07b9893f36e32ba20845f906e04a&chksm=eaa82c11dddfa50788e996fa50d2dce2d88ec0b42d2e28a9d43d8e220519eda7e9d854ce964b&scene=21#wechat_redirect

1、问题引出

来自星球同学的提问:

“Ingest node什么场景会遇到它? 一直没搜到它是在什么场景工作的?”

的确我们比较关心集群的节点角色的划分。包括:

集群应该几个节点?

几个节点用于数据存储?

要不要独立Master节点、协调节点?

但是Ingest node的场景用的比较少。

2、集群节点角色划分梳理

之前的文章:刨根问底 | Elasticsearch 5.X集群多节点角色配置深入详解有过解读。本文再参考7.1版本官方文档总结一下:

2.1 主节点

主节点负责集群相关的操作,例如创建或删除索引,跟踪哪些节点是集群的一部分,以及决定将哪些分片分配给哪些节点。

拥有稳定的主节点是衡量集群健康的重要标志。

注意:

1、由于索引和搜索数据都是CPU、内存、IO密集型的,可能会对数据节点的资源造成较大压力。 因此,在较大规模的集群里,最好要设置单独的仅主节点角色。(这点PB级集群调优时重点关注)

2、不要将主节点同时充当协调节点的角色,因为:对于稳定的集群来说,主节点的角色功能越单一越好。

2.2 数据节点

数据节点:保存包含索引文档的分片数据,执行CRUD、搜索、聚合相关的操作。属于:内存、CPU、IO密集型,对硬件资源要求高。

2.3 协调节点

搜索请求在两个阶段中执行(query 和 fetch),这两个阶段由接收客户端请求的节点 - 协调节点协调。

在请求阶段,协调节点将请求转发到保存数据的数据节点。 每个数据节点在本地执行请求并将其结果返回给协调节点。

在收集fetch阶段,协调节点将每个数据节点的结果汇集为单个全局结果集。

2.4 Ingest节点

ingest 节点可以看作是数据前置处理转换的节点,支持 pipeline管道 设置,可以使用 ingest 对数据进行过滤、转换等操作,类似于 logstash 中 filter 的作用,功能相当强大。

我把Ingest节点的功能抽象为:大数据处理环节的“ETL”——抽取、转换、加载。

前Elastic中国架构师吴斌的文章中对Ingest节点的评价很高,他指出

“2018这一年来拜访了很多用户,其中有相当一部分在数据摄取时遇到包括性能在内的各种各样的问题,那么大多数在我们做了ingest节点的调整后得到了很好的解决。Ingest节点不是万能的,但是使用起来简单,而且抛开后面数据节点来看性能提升趋于线性。所以我一直本着能用ingest节点解决的问题,绝不麻烦其他组件的大体原则”。

3、Ingest 节点能解决什么问题?

上面的Ingest节点介绍太官方,看不大懂怎么办?来个实战场景例子吧。

思考问题1:线上写入数据改字段需求

如何在数据写入阶段修改字段名(不是修改字段值)?

思考问题2:线上业务数据添加特定字段需求

如何在批量写入数据的时候,每条document插入实时时间戳?

这时,脑海里开始对已有的知识点进行搜索。

针对思考问题1:字段值的修改无非:update,updatebyquery?但是字段名呢?貌似没有相关接口或实现。

针对思考问题2:插入的时候,业务层面处理,读取当前时间并写入貌似可以,有没有不动业务层面的字段的方法呢?

答案是有的,这就是Ingest节点的妙处。

4、Ingest实践一把

针对问题1:

PUT _ingest/pipeline/rename_hostname

{

  "processors": [

    {

        "field": "hostname",

        "target_field": "host",

        "ignore_missing": true

      }

    }

  ]

}

PUT server

POST server/values/?pipeline=rename_hostname

{

  "hostname": "myserver"

}

如上,借助Ingest节点的 rename_hostname管道的预处理功能,实现了字段名称的变更:由hostname改成host。

针对问题2:6.5版本ES验证ok如下。

PUT _ingest/pipeline/indexed_at

{

  "description": "Adds indexed_at timestamp to documents",

  "processors": [

    {

      "set": {

        "field": "_source.indexed_at",

        "value": "{{_ingest.timestamp}}"

      }

    }

  ]

}

PUT ms-test

{

  "settings": {

    "index.default_pipeline": "indexed_at"

  }

}

POST ms-test/_doc/1

{"title":"just testing"}

如上,通过indexedat管道的set处理器与ms-test的索引层面关联操作,

ms-test索引每插入一篇document,都会自动添加一个字段indexat=最新时间戳。

5、Ingest节点基本概念

在实际文档索引发生之前,使用Ingest节点预处理文档。Ingest节点拦截批量和索引请求,它应用转换,然后将文档传递回索引或Bulk API。

强调一下: Ingest节点处理时机——在数据被索引之前,通过预定义好的处理管道对数据进行预处理。

默认情况下,所有节点都启用Ingest,因此任何节点都可以处理Ingest任务。我们也可以创建专用的Ingest节点。

要禁用节点的Ingest功能,需要在elasticsearch.yml 设置如下:

node.ingest:false

这里就涉及几个知识点:

1、预处理 pre-process

要在数据索引化(indexing)之前预处理文档。

2、管道 pipeline

每个预处理过程可以指定包含一个或多个处理器的管道。

管道的实际组成:

{

  "description" : "...",

  "processors" : [ ... ]

}

description:管道功能描述。

processors:注意是数组,可以指定1个或多个处理器。

3、处理器 processors

每个处理器以某种特定方式转换文档。

例如,管道可能有一个从文档中删除字段的处理器,然后是另一个重命名字段的处理器。 这样,再反过来看第4部分就很好理解了。

6、Ingest API

Ingest API共分为4种操作,分别对应:

PUT(新增)、

GET(获取)、

DELETE(删除)、

Simulate (仿真模拟)。

模拟管道AP Simulate 针对请求正文中提供的文档集执行特定管道。

除此之外,高阶操作包括:

1、支持复杂条件的Nested类型的操作;

2、限定条件的管道操作;

3、限定条件的正则操作等。

详细内容,参见官网即可。

常见的处理器有如下28种,举例:

append处理器:添加1个或1组字段值;

convert处理器:支持类型转换。

建议:没必要都过一遍,根据业务需求,反查文档即可。

7、Ingest节点和Logstash Filter 啥区别?

业务选型中,肯定会问到这个问题。

区别一:支持的数据源不同。
Logstash:大量的输入和输出插件(比如:kafka,redis等)可供使用,还可用来支持一系列不同的架构。
Ingest节点:不能从外部来源(例如消息队列或数据库)提取数据,必须批量bulk或索引index请求将数据推送到 Elasticsearch. 区别二:应对数据激增的能力不同。
Logstash:Logstash 可在本地对数据进行缓冲以应对采集骤升情况。如前所述,Logstash 同时还支持与大量不同的消息队列类型进行集成。
Ingest节点:极限情况下会出现:在长时间无法联系上 Elasticsearch 或者 Elasticsearch 无法接受数据的情况下,均有可能会丢失数据。 区别三:处理能力不同。
Logstash:支持的插件和功能点较Ingest节点多很多。
Ingest节点:支持28类处理器操作。Ingest节点管道只能在单一事件的上下文中运行。Ingest通常不能调用其他系统或者从磁盘中读取数据。 区别四:排他式功能支持不同。
Ingest节点:支持采集附件处理器插件,此插件可用来处理和索引常见格式(例如 PPT、XLS 和 PDF)的附件。
Logstash:不支持如上文件附件类型。

选型小结:

1、两种方式各有利弊,建议小数据规模,建议使用Ingest节点。原因:架构模型简单,不需要额外的硬件设备支撑。

2、数据规模大之后,除了建议独立Ingest节点,同时建议架构中使用Logstash结合消息队列如Kafka的架构选型。

3、将Logstash和Ingest节点结合,也是架构选型参考方案之一。

8、小结

Ingest是5.X版本就有的特性,不算是新知识点。

实践很重要!当我们对不熟悉的概念学习的时候,可以先查一下别人的应用场景,大致理解一下,再动手跟着官方文档敲一遍、理解一遍,加深认知。

基于Ingest实现的PDF文档预处理和索引,甚至基于Ingest自定义插件开发可以实现更多复杂的功能,你都可以尝试一下!

Elasticsearch的ETL利器——Ingest节点的更多相关文章

  1. ETL利器Kettle

    ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析 ...

  2. ETL利器Kettle实战应用解析系列一【Kettle使用介绍】

    本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析系列二 [应用场景和实战DEMO下载] 三.ETL利器Kettle ...

  3. (转载)ETL利器Kettle实战应用解析系列一【Kettle使用介绍】

    http://www.cnblogs.com/limengqiang/archive/2013/01/16/kettleapply1.html ETL利器Kettle实战应用解析系列一[Kettle使 ...

  4. 【ELK】【docker】6.Elasticsearch 集群启动多节点 + 解决ES节点集群状态为yellow

    本章其实是ELK第二章的插入章节. 本章ES集群的多节点是docker启动在同一个虚拟机上 ====================================================== ...

  5. ETL利器Kettle实战应用解析系列三

    本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析系列二 [应用场景和实战DEMO下载] 三.ETL利器Kettle ...

  6. ETL利器Kettle实战应用解析系列二

    本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析系列二 [应用场景和实战DEMO下载] 三.ETL利器Kettle ...

  7. elasticsearch单机部署多个节点

    cp -r elasticsearch-2.4.4 elasticsearch-2.4.4-2 mv elasticsearch-2.4.4 elasticsearch-2.4.4-1 总共cp了三个 ...

  8. Elasticsearch源码分析 | 单节点的启动和关闭

    本文主要简要介绍Elasticsearch单节点的启动和关闭流程.Elasticsearch版本:6.3.2 相关文章 1.Google Guice 快速入门 2.Elasticsearch 中的 G ...

  9. 【原创】Elasticsearch无宕机迁移节点

    官方API文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/allocation-filtering.html 参考 ...

随机推荐

  1. 非root用户linux下安装FFTW

    一.环境准备 确保g++可用本次编译是基于 GNU C++ 环境的,因此务必确定g++编译器可用,使用如下命令验证:命令:g++ --version出现类似如下输出则表明编译器可用: 二.下载FFTW ...

  2. python 线程理解

    简介 一个应用程序由多个进程组成,一个进程有多个线程,一个线程则是操作系统调度的最小单位,当应用程序运行时,操作系统根据优先级和时间片调度线程(决定此时此刻执行哪个线程). python的线程 pyt ...

  3. mybatis 07: sql标签中 "#{}" 和 "${}" 的作用和比较

    "#{}"占位符 作用 传参大部分使用"#{}",在数据库底层使用的是:PreparedStatement预编译处理对象 数据库底层被解析为"?&qu ...

  4. Go语言 WaitGroup 详解

    你必须非常努力,才能看起来毫不费力! 微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero ! 前言 在前面的文章中,我们使用过 WaitGroup 进行任务编排,Go语言 ...

  5. 前端监控系列2 |聊聊 JS 错误监控那些事儿

    作者:彭莉,火山引擎 APM 研发工程师.2020年加入字节,负责前端监控 SDK 的开发维护.平台数据消费的探索和落地. 有必要针对 JS 错误做监控吗? 我们可以先假设不对 JS 错误做监控,试想 ...

  6. java学习第五天异常机制.day14

    异常处理机制 确保程序的正常执行.这种机制称为异常处理机制 异常对象 常用方法 方法介绍 toString 返回异常类型和异常信息 getMessage 返回异常信息 printStackTrace ...

  7. Express 项目,res.cookie() 设置 Cookie 无法被保存在浏览器的 Application 中

    res.cookie() 给客户端响应头封装的 Cookie 无法被保存在客户端浏览器的 Application 中,只能在 Set-Cookie 中看到有这个值: 在前后端分离项目中,存在跨域问题, ...

  8. Canvas 线性图形(三):曲线

    前言 画曲线要用到二次贝塞尔曲线或三次贝塞尔曲线.贝塞尔曲线是计算机图形学中相当重要的参数曲线,在一些比较成熟的位图软件中也有贝塞尔曲线工具,如 PhotoShop. 二次贝塞尔曲线 二次贝塞尔曲线在 ...

  9. 使用 Vue.js 框架后的感想

    前言 用 Vue 已经有段时间了,把自己的所想所悟写下来,每一个想法都是非常宝贵的,记录成为生活,记录成为习惯. 简化开发 Vue 是可以辅助前端工程师开发 Web App 的一种框架,它节省很多时间 ...

  10. (已解决)Adobe Creative Cloud 安装 Acrobat PDF 报错 DW071 DW003

    今天安装 Adobe Acrobat pdf 阅读器报错了,错误为 Exit Code: 7 Please see specific errors below for troubleshooting. ...