Elasticsearch 线上实战问题及解决方案探讨

news2024/11/25 4:56:51

1、reindex相关问题

1.1 问题描述

我有 1tb 的一个大索引若干,要迁移到另外一个新集群去,有没有好办法?reindex好像会中断......

reindex 是不是就算设置了频率也会莫名的中断,而且没地方查到错误?1000多万的数据,大概80G  用reindex有时候都会莫名的断。

有时候是全的,有时候不全。

https://t.zsxq.com/14pVGxDdv

db22fb6f0d03dc0283aaee847759a54c.jpeg

1.2 问题认知

对于大型索引的迁移问题,迁移 1TB 大小的索引,尤其是在保持服务不中断的情况下,是一项挑战。

Reindex 操作本质上是 Elasticsearch 提供的高级复制,它会从源索引读取文档并写入目标索引。对于大型索引,这可能成为一个瓶颈,因为它需要大量的IO和网络带宽。

反馈和问到最多的问题就是:Reindex 支不支持断点续传?

其实,Reindex确实不提供原生的断点续传功能。如果过程中断,则需要重新开始或者手动管理已经完成的部分。

1.3 解决方案

1.3.1 数据规模和数据量不大,推荐使用 reindex。

注意事项如下:

  • 1、集群足够健康。确保集群健康状况良好,没有过载或者资源争夺情况。

  • 2、用好 slice,提高并行效能。

使用_reindex API时,通过设置 scroll 和 batch_size 参数来管理内存使用和单批次的文档数量。使用 slice 功能来并行化reindex任务。

  • 3、避免中断策略

在Elasticsearch配置中调整连接和超时设置,例如

reindex.remote.connect_timeout
reindex.remote.read_timeout
  • 4、自己维护校验机制。

迁移完成后,使用校验和或者文档计数来确认数据完整性。

之前实战项目中,可以定时脚本统计一下写入新索引的数据量,以校验源和目的端数据的一致性。

1.3.2 数据规模和数据量巨大,推荐使用快照或者 logstash 等工具。
  • 1、快照和恢复机制 创建一个源索引的快照,并将其恢复到新集群。这通常比 reindex 操作更加可靠。

  • 2、logstash 同步 支持两种类似断点续传机制,一是:基于自增ID同步,另一是:基于自增时间同步。

  • 3、canal 同步 如果源头是 MySQL、Oracle 等关系型数据库,推荐使用阿里开源的 canal 工具同步。

https://github.com/alibaba/canal

2、 如何记录es的所有请求日志?

https://t.zsxq.com/14ccO0rEr

2.1 问题认知

这是经常被问到的问题,默认情况下 Elasticsearch 输出核心是 error 日志,以方便我们窥探集群哪里出了问题。

但,有些业务场景,需要全量日志,包含但不限于检索日志细节等。

这时候,默认机制便不再生效。

2.2 问题解决

打开 slowlog,便可以查看全量日志。

PUT packets-2022-12-14/_settings
{
"index.indexing.slowlog.threshold.index.debug": "0s",
"index.search.slowlog.threshold.fetch.debug": "0s",
"index.search.slowlog.threshold.query.debug": "0s"
}

更多推荐:Elasticsearch 日志能否把全部请求打印出来?

3、脚本的使用问题

3.1 问题描述

我想请问下我用kibana中的无痛脚本编写创建新的字段时想要创建一个list数据表,输入下面这段代码,但是平台却显示无法识别new ArrayList是什么原因呢?

List(String)mylist= new ArrayList<>()

https://t.zsxq.com/142Q4X8mp 

https://t.zsxq.com/14rq91spR 

https://t.zsxq.com/14c0vh6ND

3.2 问题认知

Elasticsearch painless 脚本功能的确非常强大,但非必要不要使用。原因在于后期的性能问题。

3.3 问题解决

  • 1、首先,写入的时候充分建模。

能前置写入的时候处理的话,尽量前置处理。借助写入语言:Java、Python 等处理完毕后再写入。

  • 2、其次,写入前借助 Ingest pipeline 预处理。

Ingest pipeline 是写入前预处理的锋利的“瑞士军刀”,功能也非常强大,5.X版本就已经推出,可以大胆的用起来。

f0872b868ea9dcd824785a73787b0c18.jpeg

写入的时候处理,可能会写入变慢,总比:检索响应慢更容易让客户接受。

与之并驾齐驱的还可以借助 :logstash filter 环节实现预处理过滤功能。

  • 3、再次,检索的时候使用:runtime_field 动态字段实现。

这是迫不得已的下策,需要结合场景选用。

此方案也比自己写脚本来得更为实际。

4、集群相关问题

4.1 问题描述

请问大佬,集群扩容,新加入的节点需要把原集群机器中的data目录拷贝到新加入的节点中吗?还是新节点直接空data目录加入即可?再就是,linux和windows 的 ES可以互相加入彼此的集群中吗?谢谢

https://t.zsxq.com/14EuMm1Q7

4.2 问题认知

凡是涉及到直接拷贝data目录的多半都是官方不推荐的冒险方案,非特殊情况都不建议这么做。

4.3 解决方案

其一:了解副本的原理、路由机制原理,可以知道,新写入的数据会根据路由落到某个节点的某个分片,然后,复制到其他的副本分片中去。这样手动迁移data的必要性和可能性都不存在了。

其二:当然可以,windows 和 linux 本就是平台的不同,但都可以作为节点的宿主机。Elasticsearch 本来就是 java 开发的,支持跨平台。

5、自定义词典问题

5.1 问题描述

中文分词字段,如何实现不同字段使用不同的自定义词典?

https://t.zsxq.com/14QYEGCu7

5.2 问题认知

这是一种小众业务场景问题。

一般咱们企业级应用更多的是一类业务敲定一个分词器,往往在分词器的细粒度等问题做文章。比如:如何动态扩展词库?如何丰富已有词库?

5.3 解决方案

如果非要不同字段不同字典,其实最直接方案,可以导入多个分词插件。

比如:引入 IK 分词插件同时引入结巴分词插件。这样就可以很好得解决。

但,我验证了一下,仅 IK 扩展支持两套分词词典,貌似不改变源码不具备可行性。

推荐一个支持多词库的源码修改过的 IK 解决方案。

“改造前,所有索引使用一个词库,没办法针对不同索引添加不同词库, 改造后,词库的加载由索引中自定义的analyzer配置时,设置的词库而决定 从而实现了,不同业务的索引使用不同的词库。”

https://github.com/PeterMen/elasticsearch-analysis-ik

推荐阅读

  • 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  • 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单

  • 如何系统的学习 Elasticsearch ?

  • 那些 ChatGPT4 也搞不定的 Elasticsearch 问题,请抛给我们!

1dea68e4559a37366d79354aef00be6e.jpeg

更短时间更快习得更多干货!

中国50%+Elastic认证专家出自于此!

61ee237c25aa1db15efc947a55b8381b.gif

比同事抢先一步学习进阶干货!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1265369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

盖茨表示GPT-5不会比GPT-4有太大改进;Intro to Large Language Models

&#x1f989; AI新闻 &#x1f680; 盖茨表示GPT-5不会比GPT-4有太大改进 摘要&#xff1a;比尔盖茨在与德国《商报》的采访中透露&#xff0c;虽然OpenAI内部有人相信GPT-5会优于GPT-4&#xff0c;但他认为目前的生成式人工智能已经达到极限。盖茨对GPT-5未来的发展并不乐观…

视频集中存储/磁盘阵列EasyCVR平台黑名单异常解决步骤是什么?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

七、Lua字符串

文章目录 一、字符串&#xff08;一&#xff09;单引号间的一串字符&#xff08;二&#xff09;local str "Hello, "&#xff08;三&#xff09;[[ 与 ]] 间的一串字符&#xff08;四&#xff09;例子 二、字符串长度计算&#xff08;一&#xff09;string.len&…

nginx 配置跨域(小皮面板)

本地开发的时候&#xff0c;前端请求后端&#xff0c;后端不能用域名请求&#xff0c;只能用端口模式&#xff0c;在小皮面板的话就是如下配置&#xff1a; 我的测试项目部署&#xff1a; 前端&#xff1a;http://localhost:8082 后端&#xff1a;http://localhost:8081 前端…

与珎同行录-开篇-231129

与珎同行录-开篇 珎就是对陪伴并帮助我写代码的AI的昵称 能不能读懂这个绕口令问题呢? 连续的椎体的相邻椎体质心的相邻质心的质心作为当前质心所在的椎体的质心, 该质心的方向代表该椎体的上下方向 如何代码实现呢? 还是没看懂…好吧最终的算法是:

vue建立组件无校验版

实现功能&#xff1a; 切换&#xff0c;相当于tab 1、非组件代码&#xff1a; <template><div><div class"tabStyle"><div v-for"(item,index) in tabTitle" :key"index" class"bordItemStyle" :class"c…

类指针压缩空间

一、类指针压缩介绍 压缩指针&#xff0c;指的是在 64 位的机器上&#xff0c;使用 32 位的指针来访问数据&#xff08;堆中的对象或 Metaspace 中的元数据&#xff09;的一种方式。 对象头中的 Class Pointer 默认占 8 个字节&#xff0c;开启 -XX:UseCompressedOops 后&…

git的创建以及使用

1、上传本地仓库 首先确定项目根目录中没有.git文件&#xff0c;有的话就删了&#xff0c;没有就下一步。在终端中输入git init命令。注意必须是根目录&#xff01; 将代码存到暂存区 将代码保存到本地仓库 2、创建git仓库 仓库名称和路径&#xff08;name&#xff09;随便写…

绝地求生:成长型皮肤异色定价是否有些夸张?

大家好&#xff0c;我闲游盒小盒子&#xff01; 自从26.2更新上架回归的黑市中四款成长型皮肤以后&#xff0c;能看到社区里很多玩家都分享抽中了自己心仪的成长型皮肤。 但是对于异色很少有人去实装&#xff0c;大多数玩家都是选择去分解异色换取五张图纸然后追求升级原皮等级…

leetcode:2549. 统计桌面上的不同数字(python3解法)

难度&#xff1a;简单 给你一个正整数 n &#xff0c;开始时&#xff0c;它放在桌面上。在 109 天内&#xff0c;每天都要执行下述步骤&#xff1a; 对于出现在桌面上的每个数字 x &#xff0c;找出符合 1 < i < n 且满足 x % i 1 的所有数字 i 。然后&#xff0c;将这些…

链接1:编译器驱动程序

文章目录 GNU编译器示例编译 GNU编译器 GNU编译器&#xff08;GNU Compiler&#xff09;是由自由软件基金会&#xff08;Free Software Foundation&#xff0c;FSF&#xff09;开发和维护的一套编译器集合。这些编译器主要用于编译各种编程语言的源代码&#xff0c;将其转换为…

汽车电子 -- 车载ADAS之FCW(前方碰撞预警)

相关法规文件: FCW: GB∕T 33577-2017 智能运输系统 车辆前向碰撞预警系统 性能要求和测试规程 一、前方碰撞预警 FCW&#xff08; Forward Collision Warning&#xff09; 参看&#xff1a;法规标准-GB/T 33577标准解读(2017版) 1、状态机 系统关闭 当车辆前向碰撞预警系…

08-学成在线项目中统一异常处理的规范

项目中的异常处理 规范异常类型 在Service类的业务方法中有很多的参数合法性校验,当请求参数不合法的时候会抛出异常,但此时异常信息只会在控制台输出,前端界面并不会提示用户 实际开发中前端和后端需要做一些约定: 一般将错误提示信息统一以json格式返回给前端,以HTTP状态码…

excel表格在线编辑(开源版)

文章目录 前言一、Luckysheetvue3vite 例子如有启发&#xff0c;可点赞收藏哟~ 前言 本文记录好用的开源在线表格 具体如图显示 另外记录下更名后的univer~&#xff0c;如下图&#xff08;有兴趣可自行详细了解&#xff09; univer 在线思维导图 一、Luckysheet 参考git…

【LeetCode】每日一题 2023_11_28 设计前中后队列(数组/链表/双端队列)

文章目录 刷题前唠嗑题目&#xff1a;设计前中后队列题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 这道题的难度&#xff0c;才是我想象中的中等题的难度好吧&#xff0c;昨天那玩意对我来说还是太难了…

WebUI自动化学习(Selenium+Python+Pytest框架)003

1.元素操作 在成功定位到元素之后&#xff0c;我们需要对元素进行一些操作动作。常用的元素操作动作有&#xff1a; &#xff08;1&#xff09;send_keys() 键盘动作&#xff1a;向浏览器发送一个内容&#xff0c;通常用于输入框输入内容或向浏览器发送快捷键 &#xff08;2…

C语言——有一个3*4的矩阵,要求求出其中值最大的那个元素的值,以及其所在的行号和列号

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j,row0,colum0,a[3][4]{{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};int maxa[0][0];for ( i 0; i < 3; i)//行&#xff08;row&#xff09;{for ( j 0; j < 4; j)//列&#xff08;colum&#xf…

【FGPA】Verilog:JK 触发器 | D 触发器 | T 触发器 | D 触发器的实现

0x00 JK 触发器 JK 触发器是 RS 触发器和 T 触发器的组合&#xff0c;有两个输入端 J 和 K&#xff0c;如果两个输入端都等于 1&#xff0c;则将当前值反转。 行为表 状态图 Timing Diagram Circuit JK 触发器的设计目的是防止 RS 触发器在输入 S 和 R 均等于 …

Unity学习笔记11

一、视频播放功能 1.如何让视频在游戏场景中播放&#xff1f; 在Assets目录下添加一个渲染器纹理&#xff0c;步骤&#xff1a;新建→渲染器纹理 首先在创建一个平面&#xff0c;想让视频在平面上显示。在平面上添加一个组件 Video Player 然后将视频文件拖拽到视频剪辑位置上…

sed应用

一.sed 1.Sed概述 sed编辑器时一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据&#xff0c;这些命令要么从命令行中输入&#xff0c;要存储在一个命令文本文件中。 2.sed命令的格…