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

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.mzph.cn/news/180665.shtml

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

相关文章

【axios封装】万字长文,TypeScript实战,封装一个axios - 基础封装篇

目录 前言版本环境变量配置引入的类型1、AxiosIntance: axios实例类型2、InternalAxiosRequestConfig: 高版本下AxiosRequestConfig的拓展类型3、AxiosRequestConfig: 请求体配置参数类型4、AxiosError: 错误对象类型5、AxiosResponse: 完整原始响应体类型 目标效果开始封装骨架…

鸿运主动安全监控云平台存在任意文件读取漏洞 附POC

@[toc] 鸿运主动安全监控云平台存在任意文件读取漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途…

蓝桥杯物联网竞赛_STM32L071_5_串口接收发送数据

理论&#xff1a; 串口采取异步通信&#xff0c;即不依赖时钟节拍来接收或发送数据&#xff0c;而是采用互相约定的波特率传输数据。 波特率与单位时间传输的比特数有关&#xff0c;波特率越大传输的数据越多 传输一个比特花费的时间T 1 / 比特率 接受和发送数据的时候需要…

leetcode:455. 分发饼干

一、题目 原题链接&#xff1a;455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 函数原型&#xff1a;int findContentChildren(int* g, int gSize, int* s, int sSize) 二、思路 将胃口数组和饼干尺寸数组降序排序 遍历两个数组&#xff0c;从胃口数组中找到符合饼干尺…

网络入门---网络的大致了解

目录标题 网络发展的简单认识协议作用的理解协议的本质什么是协议分层网络通信所面对的问题OSI七层模型TCP/IP模型协议报头的理解局域网通信局域网通信基本原理报头的问题局域网的特点跨网的网络链接如何查看mac地址 网络发展的简单认识 通过之前的学习我们知道计算机是给人提…

使用docker-compose优雅部署nacos

查看代码中引入nacos版本 在应用的pom.xml中搜索nacos关键字&#xff0c;找到相关的nacos依赖 点击以来左边的图标&#xff0c;找到依赖管理器中的pom.xml&#xff0c;并全局搜索nacos&#xff0c;即可找到对应的nacos客户端版本 使用docker-compose部署nacos version: 3s…

Jmeter-分布式压测(远程启动服务器,windows)

1 前提条件 JDK已部署&#xff0c;版本一致Jmeter已部署&#xff0c;版本一致多台服务器连接的同一网络(例如&#xff1a;同一wifi)防火墙处于关闭状态&#xff08;或者对应默认端口处于开放状态&#xff09;虚拟网络适配器都处于关闭状态查找到每一台服务器的IP 2 主服务器配…

蓝桥杯第229题 迷宫与陷阱 BFS C++ 模拟 带你理解迷宫的深奥

题目 迷宫与陷阱 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/229/learning/?page1&first_category_id1&name%E8%BF%B7%E5%AE%AB%E4%B8%8E%E9%99%B7%E9%98%B1 思路和解题方法 首先&#xff0c;定义了一个结构体node来表示迷宫中的每个节点&#xff0c;包…

3种在ArcGIS Pro中制作山体阴影的方法

山体阴影可以更直观的展现地貌特点&#xff0c;表达真实的地形&#xff0c;这里为大家介绍一下在ArcGIS Pro中制作山体阴影的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&#xff0c;常见的GIS数据…

揭秘Git高手的10个秘密武器:让你的工作效率飙升!

Git和GitHub是每个软件工程师都必须了解的最基本的工具。它们是开发人员日常工作不可或缺的一部分&#xff0c;每天都要与之互动。 精通Git不仅能简化你的日常操作&#xff0c;还能显著提高生产力。在这篇文章中&#xff0c;我们将探讨一组能够极大提升生产力的命令。 随着对…

适用于 Windows 的最佳电脑数据恢复软件是什么?

数据丢失是数字世界中令人不快的一部分&#xff0c;它会在某一时刻影响许多计算机用户。很容易意外删除一些重要文件&#xff0c;这可能会在您努力恢复它们时带来不必要的压力。幸运的是&#xff0c;数据恢复软件可以帮助恢复已删除的文件&#xff0c;即使您没有备份它们。这是…

智慧公厕为高速服务区公厕做出的贡献

在现代社会&#xff0c;科技的飞速发展改变了人们的生活方式&#xff0c;也深刻影响着城市的基础设施和公共服务。而在这个数字化时代的背景下&#xff0c;智慧公厕作为城市智能化管理的一部分&#xff0c;为高速服务区公厕带来了一系列的创新和贡献&#xff0c;为旅客的出行提…

动态规划经典例题leetcode思路代码详解

目录 动态规划基础篇例题 leetcode70题.爬楼梯 leetcode746题.使用最小花费爬楼梯 leetcode198题.打家劫舍 leetcode62题.不同路径 leetcode64题.最小路径和 leetcode63题.63不同路径II 动态规划基础篇例题 这一篇的例题解答是严格按照我上一篇写的动态规划三部曲做的&…

P9242 [蓝桥杯 2023 省 B] 接龙数列(dp+最长接龙序列+分类)

1. 计算0~9为结尾的最长子串长度 2. 对于每个数字&#xff0c;比较其开头可连接子串长度1 与 原来以其末位为末尾的子串长度 3. 更新以其末位为末尾的子串长度 #include<iostream> #include<string.h>using namespace std;// 相当于记录…

万户协同办公平台ezoffice SendFileCheckTemplateEdit.jsp接口存在SQL注入漏洞 附POC

@[toc] 万户协同办公平台ezoffice SendFileCheckTemplateEdit.jsp接口存在SQL注入漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文…

力扣141-环形链表

文章目录 力扣141-环形链表示例代码实现要点剖析 力扣141-环形链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测…

计算机基础知识60

MySQL分组 # 概念&#xff1a;分组是按照某个指定的条件将单个单个的个体分成一个个整体 # MySQL分组的关键字&#xff1a;group by # 分组一般配合聚合函数使用&#xff1a; sum max min avg count 基本的语法格式: group by 字段名 [having 条件表达式] # 单独使用 group by关…

再探Java集合系列—ArrayList

适用于什么场景&#xff1f; 检索比较多的场景&#xff0c;例如学生成绩管理系统&#xff0c;老师对学生的成绩进行排名或查询操作 ArrayList有哪些特点&#xff1f; 1、ArrayList集合底层采用了数组数据结构&#xff0c;是Object类型 2、动态数组。ArrayList的默认初始容量…

第1章 理解知识图谱(一)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

SpringBoot : ch11 整合RabbitMQ

前言 在当今的互联网时代&#xff0c;消息队列成为了构建高可靠、高性能系统的重要组件之一。RabbitMQ作为一个可靠、灵活的消息中间件&#xff0c;被广泛应用于各种分布式系统中。 本篇博客将介绍如何使用Spring Boot整合RabbitMQ&#xff0c;实现消息的发送和接收。通过这种…