首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用AWS S3配置XTDB节点上的检查点

如何使用AWS S3配置XTDB节点上的检查点
EN

Stack Overflow用户
提问于 2022-06-27 14:04:49
回答 1查看 76关注 0票数 1

我使用部署在AWS/ECS (Fargate)上的XTDB1.21.0,配置了检查点(频率为30分钟),并存储在S3桶(RocksDB)上。经过几个成功的检查点之后,由于对AWS的HTTP请求中出现了异常,它们似乎经常失败,并发出XTDB警告,如下所示:

这给S3桶留下了不完整的检查点(即包含一组RocksDB文件和其他RocksDB文件的文件夹,而没有相关的EDN文件):

XTDB文档提到了一个可选的S3configurator可以传递给节点配置的事实,在搜索了一下之后,我觉得makeClient应该被覆盖,这样就可以设置connectionAcquisitionTimeout

代码语言:javascript
复制
NettyNioAsyncHttpClient.builder()
.maxConcurrency(200)
.connectionAcquisitionTimeout(Duration.ofMillis(20000))

我对NETTY不太熟悉,所以如果有人能帮我找到正确的咒语,我会很感激的。

此外,我还在从EDN文件中配置XT节点,并且还没有弄清楚如何在EDN文件中编写S3配置器(甚至可能的话)。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2022-07-05 09:06:07

这可能发生在大型数据集上,其中使用的默认S3客户端将为每个对象创建一个新的异步请求(对于这些对象,对象的数量可能非常大,特别是如果使用RockDBs索引)。在内部,它使用connectionAcquisitionTimeout作为一种背压,以确保传入的请求不会无限期地等待来自连接池的连接,但是,在本例中,我们是这些请求的唯一来源,我们肯定希望在启动节点之前完成请求,因此将connectionAcquisitionTimeout设置为非常高的值是合理的(默认情况仅为10秒)。一个很好的限制选择可能类似于您希望等待节点在失败之前启动的最大时间。

这似乎是SDK的一个非可选参数,因为对于来自外部源的请求,我只能假设它是一个合理的默认策略,在我们的示例中,我们本质上希望它表现得像一个同步操作。

在Clojure中用xtdb配置这一点如下所示:

代码语言:javascript
复制
(ns foo.db
  (:require
   [xtdb.api :as xtdb]
   [xtdb.checkpoint]
   [xtdb.rocksdb]
   [xtdb.s3.checkpoint])
  (:import
   (java.time Duration)
   (software.amazon.awssdk.http.nio.netty NettyNioAsyncHttpClient)
   (software.amazon.awssdk.services.s3 S3AsyncClient)
   (xtdb.checkpoint Checkpointer)
   (xtdb.s3 S3Configurator)))

(def s3-configurator
  (reify S3Configurator
    (makeClient [this]
      (.. (S3AsyncClient/builder)
          (httpClientBuilder
           (.. (NettyNioAsyncHttpClient/builder)
               (connectionAcquisitionTimeout
                (Duration/ofSeconds 600)) ;; Set a high limit here

               ;; We can rely on the defaults for maxConcurrency and
               ;; maxPendingConnectionAcquires
               ;; (maxConcurrency (Integer. 200))
               ;; (maxPendingConnectionAcquires (Integer. 10000))

               ))
          (build)))))

(defn start-node!
  []
  (xtdb/start-node
    {:xtdb/index-store
     {:kv-store {:xtdb/module 'xtdb.rocksdb/->kv-store
                 :db-dir "/var/xtdb/idxs"
                 :checkpointer {:xtdb/module 'xtdb.checkpoint/->checkpointer
                                :store {:xtdb/module 'xtdb.s3.checkpoint/->cp-store
                                        :configurator (constantly s3-configurator)
                                        :bucket "checkpoints"}
                                :approx-frequency "PT3H"}}}}))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72773439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档