不要急,总有办法的

CCR里面的autoFollow的问题

Elasticsearch | 作者 Charele | 发布于2020年11月09日 | 阅读数:1920

比如我建一个autoFollow,匹配的是aaa-*,
leader那边建一个索引aaa-1,follower这边就会自动建这个索引。
我的问题是:
follower这边是怎么知道那边建个索引的呢?
靠这边的定时任务,一分种检查一次?好像不是,那边建了,这边好像马上可以知道。
 
在leader那边建一个任务,有新索引就通知这边?好像也不像,因为CCR对leader那边没有影响啊。
 
有人研究过这块吗?希望可以帮忙看下。
 
 
 
 
 
已邀请:

JiangJibo - 喊我雷锋

赞同来自:

我觉得这个类似在leader和follower之间维持一个长链接,同时在leader上注册一个listerner,当leader有变动时,notify所有listener,在listener里将变更信息通过长连接传输给follower,有不少中间接是这么搞的,比如消息中间件RockerMQ的Client和Server之间的通信,保证消息能够及时被消费

stone_xy

赞同来自:

不是定时检查。
ES中索引信息存在在ClusterState中,而要获取一个集群的ClusterState可以通过
remoteClient.admin().cluster().state(request, clusterStateListener);

其中的request为ClusterStateRequest,ClusterStateRequest中有一个参数waitForMetaDataVersion,也就是说等待某个版本的meta data,在CCR中就是使用的这个来获取新版本的metadata。
详见代码: 

https://github.com/elastic/ela ... 3L232

至于服务端如何处理ClusterStateRequest的waitForMetaDataVersion可以看一下 TransportClusterStateAction这个类。

要回复问题请先登录注册