跳到主要内容

连接到外部 ClickHouse 数据库

ClickHouse 是一个高性能、面向列的数据库系统。它支持快速数据摄入,并针对分析查询进行了优化。

LangSmith 使用 ClickHouse 作为跟踪和反馈的主要数据存储。默认情况下,自行托管的 LangSmith 将使用一个内部 ClickHouse 数据库,该数据库与 LangSmith 实例捆绑在一起。它作为有状态集运行在与 LangSmith 应用程序相同的 Kubernetes 集群中,或者作为 Docker 容器运行在与 LangSmith 应用程序相同的主机上。

但是,您可以配置 LangSmith 以使用外部 ClickHouse 数据库,从而更易于管理和扩展。通过配置外部 ClickHouse 数据库,您可以管理数据库的备份、扩展和其他操作任务。虽然 ClickHouse 尚未成为 Azure、AWS 或 Google Cloud 中的原生服务,但您可以通过以下方式运行带有外部 ClickHouse 数据库的 LangSmith:

注意

使用前两种选项(LangSmith 管理的 ClickHouse 或 ClickHouse Cloud)将在您的 VPC 外部预置 ClickHouse 服务。然而,这两种选项都支持私有端点,这意味着您可以将流量导向 ClickHouse 服务,而无需将其暴露给公共互联网(例如,通过 AWS PrivateLink 或 GCP Private Service Connect)。

此外,可以配置敏感信息不存储在 ClickHouse 中。请联系 support@langchain.dev 获取更多信息。

要求

  • 已预置的 ClickHouse 实例,您的 LangSmith 应用程序将有网络访问权限(请参阅上面列出的选项)。
  • 对 ClickHouse 数据库具有管理员访问权限的用户。该用户将用于创建必要的表、索引和视图。
  • 我们支持独立 ClickHouse 和外部管理的集群部署。对于集群部署,请确保所有节点都运行相同版本。请注意,捆绑的 ClickHouse 安装不支持集群设置。
  • 我们仅支持 ClickHouse 版本 >= 23.9。使用 ClickHouse 版本 >= 24.2 需要 LangSmith v0.6 或更高版本。有关更多信息,请参阅 LangSmith 发布说明
  • 我们依赖于 ClickHouse 实例上设置的几个配置参数。详细信息如下:
<profiles>
<default>
<async_insert>1</async_insert> # Turn on async insert
<async_insert_max_data_size>25000000</async_insert_max_data_size> # Flush data to disk after 25MB. You may need to adjust this based on your workload.
<wait_for_async_insert>0</wait_for_async_insert> # Disable waiting for async insert by default
<parallel_view_processing>1</parallel_view_processing> # Enable parallel view processing
<materialize_ttl_after_modify>0</materialize_ttl_after_modify> # Disable TTL materialization after modify
<wait_for_async_insert_timeout>120</wait_for_async_insert_timeout> # Set the timeout for waiting for async insert
<lightweight_deletes_sync>0</lightweight_deletes_sync> # Disable lightweight deletes sync
</default>
</profiles>
配置参数

我们的系统已针对上述配置参数进行了调整。更改这些参数可能会导致意外行为。

高可用复制型 ClickHouse 集群

警告

默认情况下,上述设置过程仅适用于单节点 ClickHouse 集群。

如果您想使用多节点 ClickHouse 集群以实现高可用性 (HA),我们支持此功能,但需要额外的配置。此设置可以使用通过 Zookeeper 或 ClickHouse Keeper 复制数据的多节点 ClickHouse 集群。有关 ClickHouse 复制的更多信息,请参阅 ClickHouse 数据复制文档

为了使用复制型多节点 ClickHouse 设置 LangSmith:

  • 您需要有一个已通过 Keeper 或 Zookeeper 设置数据复制和相应设置的 ClickHouse 集群。请参阅 ClickHouse 复制设置文档
  • 您需要在 LangSmith 配置 部分中设置集群设置,特别是 cluster 设置以匹配您的 ClickHouse 集群名称。这将在运行 ClickHouse 迁移时使用 Replicated 表引擎。
  • 如果除了高可用性之外,您还想在 ClickHouse 节点之间进行负载均衡(以分发读写操作),我们建议使用负载均衡器或 DNS 负载均衡来在您的 ClickHouse 服务器之间进行轮询。
  • 注意:在首次启动 LangSmith 并运行 ClickHouse 迁移之前,您需要启用您的 cluster 设置。这是一个必要条件,因为表引擎需要创建为 Replicated 表引擎类型,而不是非复制的引擎类型。

当在启用 cluster 的情况下运行迁移时,迁移将创建 Replicated 表引擎类型。这意味着数据将在集群中的服务器之间进行复制。这是一个主-主设置,其中任何服务器都可以处理读取、写入或合并操作。

LangSmith 管理的 ClickHouse

  • 如果使用 LangSmith 管理的 ClickHouse,您需要设置 LangSmith VPC 和 ClickHouse VPC 之间的 VPC 对等连接。请联系 support@langchain.dev 获取更多信息。
  • 您还需要设置 Blob 存储。您可以在 Blob 存储文档中阅读更多关于 Blob 存储的信息。
注意

由 LangSmith 管理的 ClickHouse 安装使用 SharedMerge 引擎,该引擎会自动对它们进行集群化,并将计算与存储分离。

参数

您需要为 LangSmith 安装提供几个参数,以配置外部 ClickHouse 数据库。这些参数包括:

  • 主机:ClickHouse 数据库的主机名或 IP 地址
  • HTTP 端口:ClickHouse 数据库用于监听 HTTP 连接的端口
  • 原生端口:ClickHouse 数据库用于监听 原生连接 的端口
  • 数据库:LangSmith 应使用的 ClickHouse 数据库名称
  • 用户名:用于连接 ClickHouse 数据库的用户名
  • 密码:用于连接 ClickHouse 数据库的密码
  • 集群(可选):如果使用外部 ClickHouse 集群,则为 ClickHouse 集群的名称。设置后,LangSmith 将在集群上运行迁移并在实例之间复制数据。
警告

集群部署的重要注意事项

  • 集群设置必须在新模式下配置——现有的独立 ClickHouse 实例无法转换为集群模式。
  • 集群仅支持外部管理的 ClickHouse 部署。它与捆绑的 ClickHouse 安装不兼容,因为这些安装不包括所需的 ZooKeeper 配置。
  • 使用集群部署时,LangSmith 将自动:
    • 在集群中的所有节点上运行数据库迁移
    • 配置表以在集群中复制数据

请注意,虽然数据在节点间复制,但 LangSmith 不会配置分布式表或处理查询路由——查询将直接发送到指定主机。如果需要,您将需要在基础设施层面处理任何负载均衡或查询分发。

配置

有了这些参数,您可以配置您的 LangSmith 实例以使用已预置的 ClickHouse 数据库。您可以通过修改 LangSmith Helm Chart 安装的 config.yaml 文件或 Docker 安装的 .env 文件来完成此操作。


clickhouse:
external:
enabled: true
host: "host"
port: "http port"
nativePort: "native port"
user: "default"
password: "password"
database: "default"
tls: false
cluster: "my_cluster_name" # Optional: Set this if using an external Clickhouse cluster

配置完成后,您应该能够重新安装 LangSmith 实例。如果一切配置正确,您的 LangSmith 实例现在应该正在使用您的外部 ClickHouse 数据库。


此页面有帮助吗?


您可以留下详细反馈 在 GitHub 上.