elasticsearch 事务日志是个啥东西? - 饭别稀 - 博客园

标签: | 发表时间:2020-06-03 12:11 | 作者:
出处:https://www.cnblogs.com

ES事务日志是什么?

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,懂了吧

相关 [elasticsearch 日志 东西] 推荐:

elasticsearch 事务日志是个啥东西? - 饭别稀 - 博客园

- -
translog是elasticsearch的事务日志文件,它记录了所有对索引分片的事务操作(add/update/delete),每个分片对应一个translog文件. translog是用来恢复数据的. Es用“后写”的套路来加快写入速度 — 写入的索引并没有实时落盘到索引文件,而是先双写到内存和translog文件,.

使用elasticsearch+simple_flow搭建实时日志搜索系统

- - ITeye博客
    在实际的系统中,我们经常会进行分布式的系统部署,但是这样会导致一个问题,系统日志也被分散开了,导致根据日志进行错误定位不太方便,所以,利用simple_flow实时流的特点,再配合elasticsearch建立索引,搭配构建一个实时日志搜索系统.具体流程图如下:. 1.启动elasticsearch, 这个参考官方文档  http://www.elasticsearch.org/.

ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

- - 编程语言 - ITeye博客
在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段:. 以下内容来自: http://baidu.blog.51cto.com/71938/1676798. 日志主要包括系统日志、应用程序日志和安全日志. 系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因.

Filebeat + Elasticsearch + Kibana 轻量日志收集与展示系统

- - wzyboy’s blog
有个段子是说现在创业公司招人的如果说自己是「大数据」(Big Data),意思其实是说他们会把日志收集上来,但是从来不看. 段子归段子,近些年所谓「微服务」「容器化」等「热门技术」的发展,的确促进了日志收集等技术的发展. 而 ELK ( Elasticsearch +. Kibana) 也不再是日志收集与展示系统的铁三角了.

使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践

- - SegmentFault 最新的文章
Logstash:负责日志的收集,处理和储存. Elasticsearch:负责日志检索和分析. Kibana:负责日志的可视化. 2015年08月31日 - 初稿. 阅读原文 - http://wsgzao.github.io/post/elk/. CentOS 7.x安装ELK(Elasticsearch+Logstash+Kibana) - http://www.chenshake.com/centos-install-7-x-elk-elasticsearchlogstashkibana/.

filebeat使用elasticsearch的pipeline处理日志内容 | 阿小信的博客

- -
以前使用Logstash时,都是通过logstash来对日志内容做过滤解析等操作,现在6.3.0版本中,可以通过filebeat直接写数据到es中,要对日志内容做处理的话设置对应的pipeline就可以. 以gunicorn的access日志内容为例:. 有以上内容的日志,记录请求发生的时间,发起请求的ip,referer,useragent,status_line, status_code, 进程id, 请求执行时间.

ES事务日志的持久化变更 | Elasticsearch: 权威指南 | Elastic

- -
translog 也被用来提供实时 CRUD. 当你试着通过ID查询、更新、删除一个文档,它会在尝试从相应的段中检索之前, 首先检查 translog 任何最近的变更. 这意味着它总是能够实时地获取到文档的最新版本. 如果没有用  fsync 把数据从文件系统缓存刷(flush)到硬盘,我们不能保证数据在断电甚至是程序正常退出之后依然存在.

开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)+Redis+Syslog-ng实现日志实时搜索

- - C1G军火库
ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎. 设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便. 支持通过HTTP使用JSON进行数据索引. logstash是一个应用程序日志、事件的传输、处理、管理和搜索的平台. 你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计.

Clickhouse 在日志存储与分析方面作为 ElasticSearch 和 MySQL 的替代方案

- -
2021年,Clickhouse 在日志存储与分析方面作为 ElasticSearch 和 MySQL 的替代方案. 原文作者:Anton Sidashin. 关于Clickhouse的文章,这段内容在互联网上仍然很流行,甚至被多次翻译. 现在已经过去两年多,同时 Clickhouse 的开发节奏.

[译]elasticsearch mapping

- - an74520的专栏
es的mapping设置很关键,mapping设置不到位可能导致索引重建. 请看下面各个类型介绍^_^. 每一个JSON字段可以被映射到一个特定的核心类型. JSON本身已经为我们提供了一些输入,支持 string,  integer/ long,  float/ double,  boolean, and  null..