gpt4 book ai didi

elasticsearch - 如何使用 TransportClient java 代码平衡 Elasticsearch 节点

转载 作者:行者123 更新时间:2023-12-02 22:32:37 26 4
gpt4 key购买 nike

寻求专家的帮助(我是 Elasticsearch 的新手)...有多个 Elasticsearch 节点。

我正在使用 ElasticSearch java lib 来索引 json 文档。想知道如何处理节点平衡,是否可以从客户端处理?

---elasticSearch 传输客户端代码------


public static Client getTransportClient(String host, int port) {
Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "ccw_cat_es")
.put("node.name", "catsrch-pdv1-01")
.build();
return new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(host, port));
}
public static IndexResponse doIndex(Client client, String index, String type, String id, Map<String, Object> data) {
return client
.prepareIndex(index, type, id)
.setSource(data)
.execute()
.actionGet();
}
public static void main(String[] args) {
Client client = getTransportClient("catsrch-pdv1-01", 9200);
String index = "orderstatussearch";
String type = "osapi";
String id = null;
Map<String, Object> data = new HashMap<String, Object>();
data.put("OrderNumber", "444");
data.put("PO", "123");
data.put("WID", "ab234");

id= "444";
IndexResponse result = doIndex(client, index, type, id, data);
}

最佳答案

TransportClient将自动使用循环策略对其连接的节点进行负载平衡。在您的情况下,您只连接到一个节点,因此没有什么需要平衡的。您可以将其他节点添加到列表中,它将适本地平衡它们。

或者,您可以通过应用额外设置连接到其中一个数据节点来自动“嗅出”数据节点:

Settings settings = ImmutableSettings.settingsBuilder()
// ...
.put("client.transport.sniff", true)
// ...
.build()

然后,这将对它在集群状态中找到的所有数据节点进行轮询。

这可能会导致一个问题:为什么这不是默认值?原因是,如果您有独立的客户端节点,那么它们是集群的更好代理,而不是直接与数据节点通信。不过,对于较小的集群,这是一个完全可以接受的策略。

关于elasticsearch - 如何使用 TransportClient java 代码平衡 Elasticsearch 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31078258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com