elasticsearch,Java,Multithreading,elasticsearch" /> elasticsearch,Java,Multithreading,elasticsearch" />

java应用程序到elasticsearch的并发输出

java应用程序到elasticsearch的并发输出,java,multithreading,elasticsearch,Java,Multithreading,elasticsearch,我正在研究是否可以使用传输客户端和批量上传API将多个线程同时输出到elasticsearch。具体地说,我想让多个传输客户端或批量上传api实例在它们自己的线程上运行,并处理elasticsearch的输入。我想这样做的具体原因是,我可以创建一个负载平衡算法来有效地处理大量json消息。我已经在谷歌上搜索了一段时间,找不到关于这类事情的任何文档,也找不到其他人提出类似问题。另外,我对elasticsearch是新手。有没有人对此有什么见解,有哪些文献可以分享,或者有一个好的起点?谢谢。实现这一

我正在研究是否可以使用传输客户端和批量上传API将多个线程同时输出到elasticsearch。具体地说,我想让多个传输客户端或批量上传api实例在它们自己的线程上运行,并处理elasticsearch的输入。我想这样做的具体原因是,我可以创建一个负载平衡算法来有效地处理大量json消息。我已经在谷歌上搜索了一段时间,找不到关于这类事情的任何文档,也找不到其他人提出类似问题。另外,我对elasticsearch是新手。有没有人对此有什么见解,有哪些文献可以分享,或者有一个好的起点?谢谢。

实现这一点的方法是使用一个静态类作为弹性客户端对象的包装器。然后,您可以在使用的任何代码中生成多个线程。ExecutorService包含许多实用程序方法,这些方法在链接中有详细说明,可能有助于您管理处理。然后,这些线程将调用静态类,在处理时获取客户机对象,准备它们的批量请求,然后发送它们

如果你是懒惰的,你可以让循环无限期地执行,并让睡眠调用来帮助防止过载

需要注意的几个注意事项:

1) 请注意Elasticsearch的功能。不要以硬件无法处理的速度向ES提交数据。如果向ES提交数据的速度过快,导致队列过载,则会中止批量请求。除非您需要并且知道您的硬件能够保持并防止过载,否则不要增加大容量队列大小。如果遇到路障,增加队列大小只会延迟不可避免的事情。如果要重载批量,请在代码中包含一种限制请求的方法


2) 按类型/索引对批量请求进行分区。我不是100%确定ES是如何在后台处理批量请求的,但我注意到在一个批量请求中将大量请求推送到不同索引时,队列大小中存在一些不一致的行为。Elasticsearch对请求进行分区以防止大量无用的seq并优化碎片/节点遍历是有道理的,但我注意到,如果混合使用,队列大小会增加得更快。

感谢您提供的信息。我将尝试一下,然后我会发布我的想法。这就是我最终要做的。我会再次张贴,如果我发现这是一个最佳的解决方案。