如何使用Apache Nifi重命名Elastic Search索引及选择对应处理器
首先明确:Elasticsearch本身没有提供单步完成索引重命名的原生接口,所谓索引重命名本质是新索引创建+数据迁移+流量切换+旧索引清理的组合操作,根据操作环节选对应官方处理器即可,不需要自己写自定义逻辑:
核心数据迁移优先选
ReindexElasticsearch处理器
这个处理器直接对接Elasticsearch原生的_reindex接口,数据迁移全程在ES集群内部完成,不需要把数据拉取到NiFi层面再转发,迁移效率最高、资源占用最低。配置时只需要填好ES集群连接信息,指定源索引(待重命名的旧索引)、目标索引(重命名后的新索引)即可,还支持自定义查询过滤待迁移数据、设置版本冲突处理规则、开启异步迁移等参数,是重命名场景的首选处理器。
如果你的NiFi版本较老没有自带这个处理器,小数据量场景可以临时用ScrollElasticsearch拉取源索引数据,搭配PutElasticsearchRecord写入新索引;数据量超过10G的场景不建议这么做,全量数据经过NiFi流转会占用大量网络和内存资源,迁移速度极慢,这种情况可以直接用InvokeHttp调用ES原生_reindex接口完成迁移。索引创建/配置更新选
UpdateElasticsearchIndex处理器
如果你需要提前初始化重命名后的新索引(比如自定义mapping、分片数、副本数、分词器配置),或者要对现有索引做mapping更新、配置调整,直接用这个处理器就行,不需要额外写HTTP请求调用ES接口。无感知切流搭配
InvokeHttp处理器
如果要做到业务不中断的索引重命名,等新旧索引数据同步完成后,可以用InvokeHttp处理器向ES的_aliases端点发送POST请求,通过原子操作把业务侧正在使用的索引别名从旧索引解绑、绑定到新索引,业务侧不需要修改任何访问配置就能平滑切到重命名后的索引。旧索引清理选
DeleteElasticsearchIndex处理器
等新索引校验通过、流量完全切走后,直接用这个处理器删除旧索引释放存储空间即可。
常规生产可用的索引重命名NiFi流程顺序:
- 用
UpdateElasticsearchIndex创建配置符合要求的新索引- 用
ReindexElasticsearch完成旧索引到新索引的全量数据同步,不停服场景可以额外加增量同步逻辑,补齐全量迁移期间的新增/变更数据- 用
InvokeHttp调用别名接口完成原子切流- 校验新索引数据完整性、查询正常后,用
DeleteElasticsearchIndex删除旧索引
内容的提问来源于stack exchange,提问作者Md.Shams Imran Shuvo

