热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

es审计日志_elasticsearch事务日志translog

translog是elasticsearch的事务日志文件,它记录了所有对索引分片的事务操作(addupdatedelete),每个分片对应一个tran

translog是elasticsearch的事务日志文件,它记录了所有对索引分片的事务操作(add/update/delete),每个分片对应一个translog文件。

干嘛用的?

translog是用来恢复数据的。Es用“后写”的套路来加快写入速度 — 写入的索引并没有实时落盘到索引文件,而是先双写到内存和translog文件,

下图1中灰色部分(见蓝色箭头)表示数据出于 可搜索 & 未落盘 & 已写日志 的状态。此时如果掉电,es重启后还可以把数据从日志文件中读回来。

图1

什么时机写?

有两种玩法:

request — 每操作都写(默认策略),可靠性最高。

async — 异步定时写,可靠性跟时间间隔有关,试问自己断电时你能接受多少数据无法恢复?

我实际对比两种策略的性能数据,第二种的性能优势表现不明显。

存在哪里?

在索引分片目录下,取名translog(蓝色框),跟数据文件目录(金黄色)相邻。

translog-N.tlog  - 真正的日志文件,N表示generation(代)的意思,通过它跟索引文件关联

tranlog.ckp - 日志的元数据文件,长度总是20个字节,记录3个信息:偏移量 & 事务操作数量 & 当前代

图2

什么时候删?

在flush的时候,translog文件会被清空。实际的过程是先删掉老文件,再创建一个新文件,取名时,序号加1,比如图2中,flush后你只会看到 translog-2.tlog,原来的translog-1.tlog已被删除。

为什么要删?

如果能留着该多好?像mysql的binlog那样,只要日志在,那么随时可以重放来恢复数据,还可以通过对接数据平台,把数据同步到其它的系统。

那留着有什么坏处呢?数据冗余(因为索引文件和日志文件各有一份),想想mysql的数据文件和binlog文件,人家也冗余,冗余就冗余,没毛病。

是恢复数据时间更长吗?不对,因为恢复只跟新日志文件有关,旧文件可以留着不删。

这个问题我没想特明白,我猜也许只是个设计思路的问题 — 删掉一了百了,更简洁,不考虑重放,留着没多大用,还得要想法子收拾。

translog 长成啥样?

translog为什么总是43个字节?

因为每次事务默认总是被提交,导致translog总会立刻被删除,然后创建新的。而你能看到的总是新的文件。

看下面的代码,当REQUESET时,indexShard.sync会执行,引发flush 操作。

可以通过添加以下配置改变策略,不要每次都flush。

index.translog.durability: async

index.translog.sync_interval: 3600s

translog-n.tlog 文件这43个字节到底写的啥?

数据项魔法数中断符常量中断符版本中断符UUID长度UUID

长度(字节)

4

1

8

3

1

3

1

22

取值

3fd76c17

08

“translog”的ascII码

ox000

ox02

ox000

ox16

uuid hex

作用

用来区分lucene不同版本

的文件

确认es的版本

区分tranlog文件,

同一个分片目录的translog

这个值是一样的

translog.ckp 里面都有啥?

其实就是tranlog-1.tlog的3个元数据,而且一直都会是20个字节

当前偏移量 —  2b十进制就是43,正好是文件头的位置

事务数 — 当前是0

当前代 — 1,可以还原出文件名 tranlog-1.tlog



推荐阅读
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 在Linux环境下编译安装Heartbeat时,常遇到依赖库缺失的问题。为确保顺利安装,建议预先通过yum安装必要的开发库,如glib2-devel、libtool-ltdl-devel、net-snmp-devel、bzip2-devel和ncurses-devel等。这些库是编译过程中不可或缺的组件,能够有效避免编译错误,确保Heartbeat的稳定运行。 ... [详细]
  • NOI题库(noi.openjudge.cn):1.7 编程基础之字符串 T31 至 T35 详解与解析
    T31至T35题目详细解析了字符串处理的基础编程技巧。其中,T31涉及P型编码,要求将一个仅包含数字字符的字符串转换为特定格式的编码串。例如,输入字符串“111223”应输出相应的P型编码结果。其他题目则涵盖了字符串的多种操作和变换方法,包括但不限于子串提取、字符替换和模式匹配等,旨在提升编程者对字符串处理的综合能力。 ... [详细]
author-avatar
阵风阿斯顿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有