Akka:Http客户端利用ElasticSearch中的Scroll / Slice API实现流式检索

时间:2019-05-19 21:32:14

标签: scala elasticsearch akka-stream akka-http

ElasticSearch版本:5.1.1

我必须检索包含数百万个文档的单个索引。本质上将必须利用Scroll with Slice。有5个碎片。注意,由于elasticsearch的版本,我们无法利用Alpakka。

  1. 要执行此操作,首先我们需要向ElasticSearch发出http请求
 POST /twitter/tweet/_search?scroll=3m 
     { 
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

但是,我想将滚动条进一步缩小5倍,以获得更高的性能吞吐量。作为其中的一部分,我希望能够启动5个并行的http请求(不同的片ID),如下所示

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 0 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 1 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 2 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 3 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 4 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 4 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }
  1. 上述每个http请求均应返回一个单独的Scroll Id,使用该Scroll Id可以在后续的http请求中对文档进行迭代。
POST /_search/scroll  
{
"scroll" : "1m", 
"scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="  
}

我是AkkaHttp的新手,正在努力从Akka http文档中了解如何发起5个并行请求,因此我有以下问题:

  • 我可以为每个路径考虑一个单独的流程,如下所示。还有其他选择吗?
   1) Source1 -> Flow1 -> Sink1 
   2) Source2 -> Flow2 -> Sink2 
   3) Source3 -> Flow3 -> Sink3 
   4) Source4 -> Flow4 -> Sink4 
   5) Source5 -> Flow5 -> Sink5
  • 在接收器中完成响应后,如何发起后续请求?

0 个答案:

没有答案