elasticsearch shard创建过程,查看merge参数传入
来源:互联网 发布:京东关键词排名优化 编辑:程序博客网 时间:2024/06/04 18:35
今天来翻翻源码,看下merge相关的代码,以及ES是如何处理参数。该文章纯属个人记录,仅供自己参考
相关类:
IndicesClusterStateService
IndexService
IndexShard
InternalEngine
StoreRecoveryService
ConcurrentMergeScheduler
TieredMergePolicy
IndexWriter
MergePolicyConfig
MergeSchedulerConfig
EngineConfig
在创建index时每个节点会收到一个clusterChanged事件响应,响应里面包括了很多事件处理
其他apply方法暂时不关注,我们看下applyNewOrUpdatedShards这个方法,shard的create和update都会调用这个方法进行处理。
applyNewOrUpdatedShards方法中会对shard进行template的应用等,然后在上图的代码中判断shard的状态是否是INITIALIZING,如果是则初始化shard,在applyInitializingShard方法中会对index进行判断是否已经存在shard以及判断是否是副本和是否是从别的节点迁移过来的shard。
indexService.hasShard判断不存在时则调用createShard方法,传入shardRouting参数,该参数用于封装shard路由信息。
创建shard是通过配置好需要的modules,然后通过modules.createChildInjector方法进行注入shardInjector.getInstance(IndexShard.class) 得到Shard实例接着更新shard的routing信息
注意:在注入IndexShard实例时:
1. 在构造方法中初始化MergePolicyConfig策略配置对象,在MergePolicyConfig构造方法中会将参数设置到TieredMergePolicy对象
2. 在构造方法中调用了newEngineConfig方法,在此方法中new EngineConfig对象时将mergePolicy对象传入,也就是MergePolicy实现类
至此elasticsearch的merge参数就这么交给了lucene进行处理
创建完shard后调用下图方法
继续跟踪代码会进入到一下代码片段,通过generic的threadPool去recover shard
一个shard是一个lucene实例,调用createNewEngine..newEngine方法来创建一个新实例
创建lucene实例的代码如下,设置mergeScheduler,mergePolicy,以及iwc的相关配置参数,每一个shard都有自己的mergeScheduler,每个shard都是自个merge,这里使用的是es自己的EngineMergeScheduler,而非使用lucene默认的,这是为了ES记录merge的耗时,merge数量,正在merge,merge throttle时间等信息
以上就是elasticsearch是怎么把自己的mergeScheduler交给lucene的。
今天到此,后续继续更新
- elasticsearch shard创建过程,查看merge参数传入
- 用存储过程通过传入参数动态创建视图
- ElasticSearch的shard迁移
- ElasticSearch Shard Placement Control
- elasticsearch之shard内部
- elasticsearch shard UNASSIGNED 修复
- 存储过程传入DataTable参数
- Elasticsearch对shard分配定制
- Elasticsearch 的 Shard 和 Segment
- Elasticsearch 的 Shard 和 Segment
- JAVA调用存储过程--传入集合参数
- perl -- 子过程 -->数组参数传入
- quick 如何创建对象的传入参数
- Elasticsearch集群未分配的shard
- elasticsearch shard超过xx的问题
- MFC查看AfxWinMain VS2010命令行参数传入方法
- 传入参数
- oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包
- Android入门篇(二)熟悉androidstudio开发软件
- 将1—200之间整数中能同时被3和5整除的数打印出来,并统计其个数
- Android 修改开机动画(bootanimation)
- php和七牛搭建了一个图床
- 浅析angular,react,vue.js jQuery使用区别
- elasticsearch shard创建过程,查看merge参数传入
- java初学之流程控制中的循环结构
- 编写一个Book类,该类至少有name和price两个属性。该类要实现Comparable接口,
- clion以及cygwin的安装还有clion的环境配置
- windows下GitHub的SSH key配置
- Eclipse:Java ee 插件安装
- Java微信公众号--2--微信菜单和消息管理
- Linux中的网桥
- 三维人脸器官定位