'delete index' 命令在 ES 中是如何工作的?

How does the 'delete index' command work inside ES?

'delete index' 命令在 ES 中是如何工作的?

在运行 ES集群上使用'delete index'命令有什么风险吗? 这个命令会不会消耗太多 CPU 或内存?

删除索引通常非常快,Elasticsearch 在发送删除索引请求的成功响应时实际上并没有删除所有文档。

Elasticsearch 主要更新 cluster state(在集群的所有节点上维护)以将索引标记为已删除,主要的繁重工作是在更新它以及路由等其他一些事情时完成 table、元数据等

this是Elaticsearch源码中的主要方法,可以帮助你理解我上面提到的东西和删除索引的内部结构。

上面的一些重要代码片段link

RoutingTable.Builder routingTableBuilder = RoutingTable.builder(currentState.routingTable());
        Metadata.Builder metadataBuilder = Metadata.builder(meta);
        ClusterBlocks.Builder clusterBlocksBuilder = ClusterBlocks.builder().blocks(currentState.blocks());

        final IndexGraveyard.Builder graveyardBuilder = IndexGraveyard.builder(metadataBuilder.indexGraveyard());
        final int previousGraveyardSize = graveyardBuilder.tombstones().size();
        for (final Index index : indices) {
            String indexName = index.getName();
            logger.info("{} deleting index", index);
            routingTableBuilder.remove(indexName);
            clusterBlocksBuilder.removeIndexBlocks(indexName);
            metadataBuilder.remove(indexName);
        }
        // add tombstones to the cluster state for each deleted index
        final IndexGraveyard currentGraveyard = graveyardBuilder.addTombstones(indices).build(settings);
        metadataBuilder.indexGraveyard(currentGraveyard); // the new graveyard set on the metadata
        logger.trace("{} tombstones purged from the cluster state. Previous tombstone size: {}. Current tombstone size: {}.",
            graveyardBuilder.getNumPurged(), previousGraveyardSize, currentGraveyard.getTombstones().size());

关于您的问题,在 运行 ES 集群上使用 'delete index' 命令是否有任何风险?这个命令会不会太耗费 CPU 或内存?

不,在 运行 Elasticsearch 集群上使用 delete index 请求没有风险,除非你有一个巨大的集群状态,并且如前所述,实际上删除索引是异步发生的,这只会更新各种状态和标志,它不会命令太多 CPU.

您还可以在 org.elasticsearch.cluster.metadata.MetadataDeleteIndexService 中启用跟踪日志,并查看上面代码片段中记录的集群大小。