ES文档中有句话不太清楚,求英语好的或者用过的帮忙讲一下?

发布于 2022-01-03 06:07:48 字数 2186 浏览 941 评论 4

import org.elasticsearch.action.bulk.BackoffPolicy;
import org.elasticsearch.action.bulk.BulkProcessor;
import org.elasticsearch.common.unit.ByteSizeUnit;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.elasticsearch.common.unit.TimeValue;

BulkProcessor bulkProcessor = BulkProcessor.builder(
        client,  
        new BulkProcessor.Listener() {
            @Override
            public void beforeBulk(long executionId,
                                   BulkRequest request) { ... } 

            @Override
            public void afterBulk(long executionId,
                                  BulkRequest request,
                                  BulkResponse response) { ... } 

            @Override
            public void afterBulk(long executionId,
                                  BulkRequest request,
                                  Throwable failure) { ... } 
        })
        .setBulkActions(10000) 
        .setBulkSize(new ByteSizeValue(5, ByteSizeUnit.MB)) 
        .setFlushInterval(TimeValue.timeValueSeconds(5)) 
        .setConcurrentRequests(1) 
        .setBackoffPolicy(
            BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(100), 3)) 
        .build();

这段是BulkProcessor章节的一段代码,其中倒数第2/3行:

.setBackoffPolicy(
            BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(100), 3)) 

文档中给的解释是:

Set a custom backoff policy which will initially wait for 100ms, increase exponentially and retries up to three times. A retry is attempted whenever one or more bulk item requests have failed with an EsRejectedExecutionException which indicates that there were too little compute resources available for processing the request. To disable backoff, pass BackoffPolicy.noBackoff().

然后我就不太理解了,这里面的 increase exponentially 是什么意思?

然后我注意到文档再往下一点有一个默认的例子是这样的:

sets backoffPolicy to an exponential backoff with 8 retries and a start delay of 50ms. The total wait time is roughly 5.1 seconds.

它说默认情况第一次延迟50ms,一共8次,最后算出来的却是5.1s左右。这个5.1s是怎么算出来的呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

灵芸 2022-01-07 21:13:53

可是不对啊,我去官方提问了,他回复我就是翻倍,第一次50ms,第二次就是100ms,然后是200ms,but....这个5.1是咋来的。。。

裸钻 2022-01-07 07:11:07

还给个个源码中使用的公式 int result = start + 10 * ((int) Math.exp(0.8d * (currentlyConsumed)) - 1);

掩饰不了的爱 2022-01-07 04:14:24

回复
@哎码 : Math.exp() 函数返回 e的x方,x 表示参数。所以不是简单的倍数关系

陌若浮生 2022-01-07 01:01:28

就是重试的初始时间间隔是100ms,如果重试失败的话这个间隔也会随之增长。

第一次重试失败   100ms

第二次重试失败    500ms

第三次重试失败    2s

。。。

超时这东西如果在一段时间内发生的话,你重试多少次都没有用,所以他为了不浪费性能,如果多次尝试都不成功那就延长重试的时间间隔。

 

increase exponentially  : 呈指数增长

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文