Skip to main content

连接到外部 ClickHouse 数据库

ClickHouse 是一款高性能的列式数据库系统,支持数据的快速写入,并针对分析型查询进行了优化。

LangSmith 使用 ClickHouse 作为追踪数据和反馈信息的主要数据存储。默认情况下,自托管的 LangSmith 将使用一个与 LangSmith 实例捆绑的内部 ClickHouse 数据库。该数据库以有状态集(StatefulSet)的形式运行,与 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

要求

  • 您的 LangSmith 应用程序可访问网络的已配置 ClickHouse 实例(参见上文选项)。
  • 拥有 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>
配置参数

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

高可用(HA)复制型 ClickHouse 集群

警告

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

如需为高可用性(HA)使用多节点 ClickHouse 集群,我们支持该配置,但需要额外的必要设置。此配置可使用多个节点组成的 ClickHouse 集群,数据通过 ZooKeeper 或 ClickHouse Keeper 进行复制。有关 ClickHouse 复制的更多信息,请参阅 ClickHouse 数据复制文档

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

  • 您需要配置一个使用Keeper或ZooKeeper进行数据复制并具备相应设置的ClickHouse集群。请参阅ClickHouse复制设置文档
  • 您需要在LangSmith 配置部分中设置集群配置,具体而言,需将 cluster 设置项配置为与您的 ClickHouse 集群名称一致。这样在运行 ClickHouse 迁移时,将使用 Replicated 表引擎。
  • 如果除了高可用性(HA)之外,您还希望在 ClickHouse 节点之间实现负载均衡(以分发读取或写入请求),我们建议使用负载均衡器或 DNS 负载均衡,在您的 ClickHouse 服务器之间进行轮询调度。
  • 注意:首次启动 LangSmith 并运行 ClickHouse 迁移之前,您需要启用 cluster 设置。这是必需的,因为表引擎必须创建为 Replicated 表引擎,而非非复制型引擎类型。

启用 cluster 运行迁移时,该迁移将创建 Replicated 表引擎类型。这意味着数据将在集群中的各服务器之间进行复制。 这是一种主-主(Master-Master)架构,其中任意服务器均可处理读取、写入或合并操作。

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 上.