连接到外部 ClickHouse 数据库
ClickHouse 是一个高性能的列式数据库系统。它支持数据的高速摄入,并针对分析查询进行了优化。
LangSmith 使用 ClickHouse 作为跟踪和反馈的主要数据存储。默认情况下,自托管的 LangSmith 将使用与 LangSmith 实例捆绑在一起的内部 ClickHouse 数据库。该数据库在 Kubernetes 集群中作为有状态集运行,位于与 LangSmith 应用程序相同的集群中,或者作为 Docker 容器在与 LangSmith 应用程序相同的主机上运行。
然而,您可以配置 LangSmith 使用外部 ClickHouse 数据库,以实现更便捷的管理和扩展。 通过配置外部 ClickHouse 数据库,您可以管理数据库的备份、扩展以及其他运维任务。 尽管 ClickHouse 尚未在 Azure、AWS 或 Google Cloud 上提供原生服务,但您可以通过以下方式在外部 ClickHouse 数据库中运行 LangSmith:
- LangSmith 管理的 ClickHouse
- 配置 ClickHouse Cloud,可以直接进行或通过云提供商市场:
- 在云提供商的虚拟机上
使用前两个选项(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 存储文档 中阅读更多相关内容。
LangSmith 管理的 ClickHouse 安装使用 SharedMerge 引擎,该引擎会自动将它们聚合并将计算与存储分离。
Parameters
\ 您需要为 LangSmith 安装提供多个参数,以配置外部 ClickHouse 数据库。这些参数包括:
- Host: ClickHouse 数据库的主机名或 IP 地址
- HTTP 端口:ClickHouse 数据库监听 HTTP 连接的端口
- 原生端口:ClickHouse 数据库监听原生连接的端口
- 数据库:LangSmith 应使用的 ClickHouse 数据库的名称
- 用户名:用于连接 ClickHouse 数据库的用户名
- 密码:用于连接 ClickHouse 数据库的密码
- 集群(可选):如果使用外部 ClickHouse 集群,此处填写该集群的名称。设置后,LangSmith 将在该集群上运行迁移操作,并在各个实例间复制数据。
集群部署的重要注意事项:
- 集群化设置必须在新的架构上配置——现有的独立 ClickHouse 实例无法转换为集群模式。
- 聚类功能仅支持外部管理的 ClickHouse 部署。它与捆绑安装的 ClickHouse 不兼容,因为后者未包含所需的 ZooKeeper 配置。
- 当使用集群部署时,LangSmith 将自动执行以下操作:
- 在集群的所有节点上运行数据库迁移
- 配置表以实现跨集群的数据复制
请注意,虽然数据在各节点间进行了复制,但 LangSmith 不会配置分布式表或处理查询路由——查询将直接发往指定的主机。如果您需要,必须在基础设施层面自行处理负载均衡或查询分发。
配置
有了这些参数,您可以配置您的 LangSmith 实例以使用已配置的 ClickHouse 数据库。您可以通过修改 LangSmith Helm Chart 安装的 config.yaml 文件或 Docker 安装的 .env 文件来实现这一点。
- Helm
- Docker
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
# In your .env file
CLICKHOUSE_HOST=langchain-clickhouse # Change to your Clickhouse host if using external Clickhouse. Otherwise, leave it as is
CLICKHOUSE_USER=default # Change to your Clickhouse user if needed
CLICKHOUSE_DB=default # Change to your Clickhouse database if needed
CLICKHOUSE_PORT=8123 # Change to your Clickhouse port if needed
CLICKHOUSE_TLS=false # Change to true if you are using TLS to connect to Clickhouse. Otherwise, leave it as is
CLICKHOUSE_PASSWORD=password # Change to your Clickhouse password if needed
CLICKHOUSE_NATIVE_PORT=9000 # Change to your Clickhouse native port if needed
CLICKHOUSE_CLUSTER=my_cluster_name # Optional: Set this if using an external Clickhouse cluster
配置完成后,您应该能够重新安装您的 LangSmith 实例。如果所有配置均正确,您的 LangSmith 实例现在应使用外部 ClickHouse 数据库。