From e9c957763b990a17ab7d4f2ebe6c2ee002bbe437 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 5 Nov 2025 11:18:06 +0000 Subject: [PATCH] [create-pull-request] automated change --- latest_translation_commit.json | 2 +- tidb-cloud/changefeed-overview.md | 64 +- tidb-cloud/changefeed-sink-to-apache-kafka.md | 179 ++-- tidb-cloud/changefeed-sink-to-mysql.md | 111 ++- ...e-endpoint-connections-on-alibaba-cloud.md | 10 +- ...private-endpoint-connections-serverless.md | 18 +- tidb-cloud/set-up-vpc-peering-connections.md | 36 +- ...-self-hosted-kafka-private-link-service.md | 811 +++++++++++++++--- tidb-cloud/size-your-cluster.md | 120 +-- tidb-cloud/tidb-cloud-billing-ticdc-rcu.md | 35 +- tidb-cloud/tidb-cloud-release-notes.md | 313 +++---- tidb-computing.md | 86 +- 12 files changed, 1231 insertions(+), 554 deletions(-) diff --git a/latest_translation_commit.json b/latest_translation_commit.json index 7c213d21a4305..fd7b5872e2d55 100644 --- a/latest_translation_commit.json +++ b/latest_translation_commit.json @@ -1 +1 @@ -{"target":"release-8.5","sha":"1979c094c880fd7cf92610f1fec88f55fc365355"} \ No newline at end of file +{"target":"release-8.5","sha":"388c97414047d8a777277379570971c1e57008b1"} \ No newline at end of file diff --git a/tidb-cloud/changefeed-overview.md b/tidb-cloud/changefeed-overview.md index c336793700806..f77a8bde08a36 100644 --- a/tidb-cloud/changefeed-overview.md +++ b/tidb-cloud/changefeed-overview.md @@ -9,7 +9,7 @@ TiDB Cloud changefeed 帮助你将数据从 TiDB Cloud 流式传输到其他数 > **Note:** > -> - 目前,TiDB Cloud 每个集群最多只允许创建 100 个 changefeed。 +> - 目前,TiDB Cloud 每个集群实例最多只允许创建 100 个 changefeed。 > - 目前,TiDB Cloud 每个 changefeed 最多只允许配置 100 条表过滤规则。 > - 对于 [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 和 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 集群,changefeed 功能不可用。 @@ -17,13 +17,13 @@ TiDB Cloud changefeed 帮助你将数据从 TiDB Cloud 流式传输到其他数 要访问 changefeed 功能,请按照以下步骤操作: -1. 在 [TiDB Cloud 控制台](https://tidbcloud.com) 中,进入你项目的 [**Clusters**](https://tidbcloud.com/project/clusters) 页面。 +1. 在 [TiDB Cloud 控制台](https://tidbcloud.com),进入你的项目的 [**Clusters**](https://tidbcloud.com/project/clusters) 页面。进入 [**TiDB Instances**](https://tidbcloud.com/tidbs) 页面。 > **Tip:** > > 你可以使用左上角的下拉框在组织、项目和集群之间切换。 -2. 点击目标集群的名称进入其概览页面,然后在左侧导航栏点击 **Data** > **Changefeed**。此时会显示 changefeed 页面。 +2. 点击目标集群实例的名称,进入其概览页面,然后在左侧导航栏点击 **Data** > **Changefeed**。此时会显示 changefeed 页面。 在 **Changefeed** 页面,你可以创建 changefeed,查看已有 changefeed 列表,并对已有 changefeed 进行操作(如扩缩容、暂停、恢复、编辑和删除 changefeed)。 @@ -31,36 +31,60 @@ TiDB Cloud changefeed 帮助你将数据从 TiDB Cloud 流式传输到其他数 要创建 changefeed,请参考以下教程: -- [Sink to Apache Kafka](/tidb-cloud/changefeed-sink-to-apache-kafka.md) -- [Sink to MySQL](/tidb-cloud/changefeed-sink-to-mysql.md) -- [Sink to TiDB Cloud](/tidb-cloud/changefeed-sink-to-tidb-cloud.md) -- [Sink to cloud storage](/tidb-cloud/changefeed-sink-to-cloud-storage.md) +- [同步到 Apache Kafka](/tidb-cloud/changefeed-sink-to-apache-kafka.md) +- [同步到 MySQL](/tidb-cloud/changefeed-sink-to-mysql.md) +- [同步到 TiDB Cloud](/tidb-cloud/changefeed-sink-to-tidb-cloud.md) +- [同步到云存储](/tidb-cloud/changefeed-sink-to-cloud-storage.md) -## 查询 Changefeed RCU +## 查询 changefeed 容量 + + + +对于 TiDB Cloud Dedicated,你可以查询 changefeed 的 TiCDC Replication Capacity Units(RCU)。 1. 进入目标 TiDB 集群的 [**Changefeed**](#view-the-changefeed-page) 页面。 2. 找到你想要查询的 changefeed,在 **Action** 列点击 **...** > **View**。 -3. 你可以在页面的 **Specification** 区域看到当前 TiCDC Replication Capacity Units(RCU)。 +3. 你可以在页面的 **Specification** 区域看到当前的 TiCDC Replication Capacity Units(RCU)。 + + + + +对于 TiDB Cloud Premium,你可以查询 changefeed 的 TiCDC Changefeed Capacity Units(CCU)。 + +1. 进入目标 TiDB 实例的 [**Changefeed**](#view-the-changefeed-page) 页面。 +2. 找到你想要查询的 changefeed,在 **Action** 列点击 **...** > **View**。 +3. 你可以在页面的 **Specification** 区域看到当前的 TiCDC Changefeed Capacity Units(CCU)。 + + ## 扩缩容 changefeed -你可以通过扩容或缩容 changefeed 来更改 TiCDC Replication Capacity Units(RCU)。 + + +你可以通过扩容或缩容 changefeed 来调整其 TiCDC Replication Capacity Units(RCU)。 > **Note:** > -> - 若要为某个集群扩缩容 changefeed,请确保该集群的所有 changefeed 均为 2023 年 3 月 28 日之后创建。 -> - 如果某个集群存在 2023 年 3 月 28 日之前创建的 changefeed,则该集群的现有 changefeed 及新建 changefeed 均不支持扩缩容。 +> - 若要为集群扩缩容 changefeed,请确保该集群的所有 changefeed 均创建于 2023 年 3 月 28 日之后。 +> - 如果集群中存在 2023 年 3 月 28 日之前创建的 changefeed,则该集群的所有 changefeed(包括新建的)均不支持扩缩容。 -1. 进入目标 TiDB 集群的 [**Changefeed**](#view-the-changefeed-page) 页面。 + + + +你可以通过扩容或缩容 changefeed 来调整其 TiCDC Changefeed Capacity Units(CCU)。 + + + +1. 进入目标 TiDB 集群实例的 [**Changefeed**](#view-the-changefeed-page) 页面。 2. 找到你想要扩缩容的 changefeed,在 **Action** 列点击 **...** > **Scale Up/Down**。 3. 选择新的规格。 4. 点击 **Submit**。 -扩缩容过程大约需要 10 分钟(期间 changefeed 正常工作),切换到新规格大约需要几秒钟(期间 changefeed 会自动暂停并恢复)。 +扩缩容过程大约需要 10 分钟(期间 changefeed 可正常工作),切换到新规格只需几秒(切换期间 changefeed 会自动暂停并恢复)。 ## 暂停或恢复 changefeed -1. 进入目标 TiDB 集群的 [**Changefeed**](#view-the-changefeed-page) 页面。 +1. 进入目标 TiDB 集群实例的 [**Changefeed**](#view-the-changefeed-page) 页面。 2. 找到你想要暂停或恢复的 changefeed,在 **Action** 列点击 **...** > **Pause/Resume**。 ## 编辑 changefeed @@ -69,11 +93,11 @@ TiDB Cloud changefeed 帮助你将数据从 TiDB Cloud 流式传输到其他数 > > TiDB Cloud 目前仅支持在暂停状态下编辑 changefeed。 -1. 进入目标 TiDB 集群的 [**Changefeed**](#view-the-changefeed-page) 页面。 +1. 进入目标 TiDB 集群实例的 [**Changefeed**](#view-the-changefeed-page) 页面。 2. 找到你想要暂停的 changefeed,在 **Action** 列点击 **...** > **Pause**。 3. 当 changefeed 状态变为 `Paused` 后,点击 **...** > **Edit** 编辑对应的 changefeed。 - TiDB Cloud 默认会填充 changefeed 配置。你可以修改以下配置项: + TiDB Cloud 会默认填充 changefeed 配置。你可以修改以下配置项: - Apache Kafka sink:所有配置项。 - MySQL sink:**MySQL Connection**、**Table Filter** 和 **Event Filter**。 @@ -84,12 +108,12 @@ TiDB Cloud changefeed 帮助你将数据从 TiDB Cloud 流式传输到其他数 ## 删除 changefeed -1. 进入目标 TiDB 集群的 [**Changefeed**](#view-the-changefeed-page) 页面。 +1. 进入目标 TiDB 集群实例的 [**Changefeed**](#view-the-changefeed-page) 页面。 2. 找到你想要删除的 changefeed,在 **Action** 列点击 **...** > **Delete**。 ## Changefeed 计费 -如需了解 TiDB Cloud 中 changefeed 的计费方式,请参见 [Changefeed billing](/tidb-cloud/tidb-cloud-billing-ticdc-rcu.md)。 +要了解 TiDB Cloud 中 changefeed 的计费方式,请参见 [Changefeed 计费](/tidb-cloud/tidb-cloud-billing-ticdc-rcu.md)。 ## Changefeed 状态 @@ -105,5 +129,5 @@ TiDB Cloud changefeed 帮助你将数据从 TiDB Cloud 流式传输到其他数 - `RESUMING`:复制任务正在恢复中。 - `DELETING`:复制任务正在删除中。 - `DELETED`:复制任务已删除。 -- `WARNING`:复制任务返回警告。由于某些可恢复的错误,复制无法继续。处于该状态的 changefeed 会持续尝试恢复,直到状态变为 `RUNNING`。该状态下的 changefeed 会阻塞 [GC 操作](https://docs.pingcap.com/tidb/stable/garbage-collection-overview)。 +- `WARNING`:复制任务返回警告。由于某些可恢复错误,复制无法继续。处于该状态的 changefeed 会持续尝试恢复,直到状态变为 `RUNNING`。该状态下的 changefeed 会阻塞 [GC 操作](https://docs.pingcap.com/tidb/stable/garbage-collection-overview)。 - `FAILED`:复制任务失败。由于某些错误,复制任务无法恢复且无法自动修复。如果在增量数据的垃圾回收(GC)之前解决了问题,你可以手动恢复失败的 changefeed。增量数据的默认生存时间(TTL)为 24 小时,即 changefeed 中断后 24 小时内 GC 机制不会删除任何数据。 \ No newline at end of file diff --git a/tidb-cloud/changefeed-sink-to-apache-kafka.md b/tidb-cloud/changefeed-sink-to-apache-kafka.md index d741979d3b8b7..681eb2113dca9 100644 --- a/tidb-cloud/changefeed-sink-to-apache-kafka.md +++ b/tidb-cloud/changefeed-sink-to-apache-kafka.md @@ -1,24 +1,38 @@ --- title: Sink to Apache Kafka -summary: 本文档介绍如何创建变更订阅(changefeed),将数据从 TiDB Cloud 流式同步到 Apache Kafka。内容包括限制、前置条件,以及为 Apache Kafka 配置变更订阅的步骤。该过程涉及网络连接设置、为 Kafka ACL 授权添加权限,以及配置变更订阅规范。 +summary: 本文档介绍如何创建变更订阅(changefeed),将数据从 TiDB Cloud 流式同步到 Apache Kafka。内容包括限制、前置条件,以及为 Apache Kafka 配置变更订阅的步骤。该过程涉及网络连接设置、Kafka ACL 授权权限添加,以及变更订阅规范的配置。 --- # Sink to Apache Kafka 本文档介绍如何创建变更订阅(changefeed),将数据从 TiDB Cloud 流式同步到 Apache Kafka。 + + > **Note:** > > - 要使用变更订阅功能,请确保你的 TiDB Cloud Dedicated 集群版本为 v6.1.3 或更高版本。 -> - 对于 [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 和 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 集群,变更订阅功能不可用。 +> - 对于 [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 和 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 集群,不支持变更订阅功能。 + + + + +> **Note:** +> +> 对于 [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 和 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 集群,不支持变更订阅功能。 + + ## 限制 -- 每个 TiDB Cloud 集群最多可创建 100 个变更订阅。 +- 每个 TiDB Cloud 集群实例,最多可以创建 100 个变更订阅。 - 目前,TiDB Cloud 不支持上传自签名 TLS 证书以连接 Kafka broker。 - 由于 TiDB Cloud 使用 TiCDC 建立变更订阅,因此具有与 [TiCDC 相同的限制](https://docs.pingcap.com/tidb/stable/ticdc-overview#unsupported-scenarios)。 -- 如果需要同步的表没有主键或非空唯一索引,在某些重试场景下,由于缺少唯一约束,可能会导致下游插入重复数据。 -- 如果你选择 Private Link 或 Private Service Connect 作为网络连接方式,请确保你的 TiDB 集群版本满足以下要求: +- 如果待同步的表没有主键或非空唯一索引,在某些重试场景下,由于缺少唯一约束,可能会导致下游插入重复数据。 + + + +- 如果你选择 Private Link 或 Private Service Connect 作为网络连接方式,请确保 TiDB 集群版本满足以下要求: - v6.5.x:需为 v6.5.9 或更高版本 - v7.1.x:需为 v7.1.4 或更高版本 @@ -30,63 +44,96 @@ summary: 本文档介绍如何创建变更订阅(changefeed),将数据从 - 如果你希望按主键或索引值分发变更日志到指定索引名的 Kafka 分区,请确保 TiDB 集群版本为 v7.5.0 或更高版本。 - 如果你希望按列值分发变更日志到 Kafka 分区,请确保 TiDB 集群版本为 v7.5.0 或更高版本。 + + ## 前置条件 在创建变更订阅将数据流式同步到 Apache Kafka 之前,你需要完成以下前置条件: - 设置网络连接 -- 为 Kafka ACL 授权添加权限 +- 添加 Kafka ACL 授权权限 ### 网络 -确保你的 TiDB 集群可以连接到 Apache Kafka 服务。你可以选择以下任一连接方式: +确保你的 TiDB 集群实例 能够连接到 Apache Kafka 服务。你可以选择以下任一连接方式: - Private Connect:适用于避免 VPC CIDR 冲突并满足安全合规要求,但会产生额外的 [Private Data Link Cost](/tidb-cloud/tidb-cloud-billing-ticdc-rcu.md#private-data-link-cost)。 -- VPC Peering:作为一种性价比较高的选择,但需要管理潜在的 VPC CIDR 冲突和安全问题。 +- VPC Peering:作为一种性价比较高的选项,但需要管理潜在的 VPC CIDR 冲突和安全问题。 - Public IP:适用于快速搭建场景。 + +
-Private Connect 利用云服务商的 **Private Link** 或 **Private Service Connect** 技术,使你 VPC 中的资源能够通过私有 IP 地址连接到其他 VPC 中的服务,就像这些服务直接托管在你自己的 VPC 中一样。 +Private Connect 利用云服务商的 **Private Link** 或 **Private Service Connect** 技术,使你 VPC 中的资源能够通过私有 IP 地址连接到其他 VPC 中的服务,就像这些服务直接托管在你的 VPC 内一样。 TiDB Cloud 目前仅支持自建 Kafka 的 Private Connect,不支持与 MSK、Confluent Kafka 或其他 Kafka SaaS 服务的直接集成。若需通过 Private Connect 连接这些 Kafka SaaS 服务,你可以部署一个 [kafka-proxy](https://github.com/grepplabs/kafka-proxy) 作为中间层,将 Kafka 服务暴露为自建 Kafka。详细示例可参考 [Set Up Self-Hosted Kafka Private Service Connect by Kafka-proxy in Google Cloud](/tidb-cloud/setup-self-hosted-kafka-private-service-connect.md#set-up-self-hosted-kafka-private-service-connect-by-kafka-proxy)。该方案适用于所有 Kafka SaaS 服务。 -- 如果你的 Apache Kafka 服务部署在 AWS,请按照 [Set Up Self-Hosted Kafka Private Link Service in AWS](/tidb-cloud/setup-aws-self-hosted-kafka-private-link-service.md) 配置网络连接并获取 **Bootstrap Ports** 信息,然后参考 [Set Up Private Endpoint for Changefeeds](/tidb-cloud/set-up-sink-private-endpoint.md) 创建私有端点。 -- 如果你的 Apache Kafka 服务部署在 Google Cloud,请按照 [Set Up Self-Hosted Kafka Private Service Connect in Google Cloud](/tidb-cloud/setup-self-hosted-kafka-private-service-connect.md) 配置网络连接并获取 **Bootstrap Ports** 信息,然后参考 [Set Up Private Endpoint for Changefeeds](/tidb-cloud/set-up-sink-private-endpoint.md) 创建私有端点。 -- 如果你的 Apache Kafka 服务部署在 Azure,请按照 [Set Up Self-Hosted Kafka Private Link Service in Azure](/tidb-cloud/setup-azure-self-hosted-kafka-private-link-service.md) 配置网络连接并获取 **Bootstrap Ports** 信息,然后参考 [Set Up Private Endpoint for Changefeeds](/tidb-cloud/set-up-sink-private-endpoint.md) 创建私有端点。 +- 如果你的 Apache Kafka 服务托管在 AWS,请按照 [Set Up Self-Hosted Kafka Private Link Service in AWS](/tidb-cloud/setup-aws-self-hosted-kafka-private-link-service.md) 配置网络连接并获取 **Bootstrap Ports** 信息,然后按照 [Set Up Private Endpoint for Changefeeds](/tidb-cloud/set-up-sink-private-endpoint.md) 创建私有端点。 +- 如果你的 Apache Kafka 服务托管在 Google Cloud,请按照 [Set Up Self-Hosted Kafka Private Service Connect in Google Cloud](/tidb-cloud/setup-self-hosted-kafka-private-service-connect.md) 配置网络连接并获取 **Bootstrap Ports** 信息,然后按照 [Set Up Private Endpoint for Changefeeds](/tidb-cloud/set-up-sink-private-endpoint.md) 创建私有端点。 +- 如果你的 Apache Kafka 服务托管在 Azure,请按照 [Set Up Self-Hosted Kafka Private Link Service in Azure](/tidb-cloud/setup-azure-self-hosted-kafka-private-link-service.md) 配置网络连接并获取 **Bootstrap Ports** 信息,然后按照 [Set Up Private Endpoint for Changefeeds](/tidb-cloud/set-up-sink-private-endpoint.md) 创建私有端点。
-如果你的 Apache Kafka 服务位于没有互联网访问权限的 AWS VPC,请按以下步骤操作: +如果你的 Apache Kafka 服务位于没有互联网访问的 AWS VPC,请按以下步骤操作: 1. 在 Apache Kafka 服务所在 VPC 与 TiDB 集群之间 [建立 VPC Peering 连接](/tidb-cloud/set-up-vpc-peering-connections.md)。 2. 修改 Apache Kafka 服务关联的安全组的入站规则。 - 你需要将 TiDB Cloud 集群所在区域的 CIDR 添加到入站规则中。该 CIDR 可在 **VPC Peering** 页面找到。这样可以允许来自 TiDB 集群到 Kafka broker 的流量。 + 你需要将 TiDB Cloud 集群所在区域的 CIDR 添加到入站规则中。该 CIDR 可在 **VPC Peering** 页面找到。这样可以允许 TiDB 集群的流量访问 Kafka broker。 3. 如果 Apache Kafka 的 URL 包含主机名,你需要允许 TiDB Cloud 能够解析 Apache Kafka broker 的 DNS 主机名。 1. 按照 [Enable DNS resolution for a VPC peering connection](https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-dns.html) 的步骤操作。 2. 启用 **Accepter DNS resolution** 选项。 -如果你的 Apache Kafka 服务位于没有互联网访问权限的 Google Cloud VPC,请按以下步骤操作: +如果你的 Apache Kafka 服务位于没有互联网访问的 Google Cloud VPC,请按以下步骤操作: 1. 在 Apache Kafka 服务所在 VPC 与 TiDB 集群之间 [建立 VPC Peering 连接](/tidb-cloud/set-up-vpc-peering-connections.md)。 2. 修改 Apache Kafka 所在 VPC 的 ingress 防火墙规则。 - 你需要将 TiDB Cloud 集群所在区域的 CIDR 添加到 ingress 防火墙规则中。该 CIDR 可在 **VPC Peering** 页面找到。这样可以允许来自 TiDB 集群到 Kafka broker 的流量。 + 你需要将 TiDB Cloud 集群所在区域的 CIDR 添加到 ingress 防火墙规则中。该 CIDR 可在 **VPC Peering** 页面找到。这样可以允许 TiDB 集群的流量访问 Kafka broker。
如果你希望通过 Public IP 访问 Apache Kafka 服务,请为所有 Kafka broker 分配 Public IP 地址。 -在生产环境中**不推荐**使用 Public IP。 +**不建议**在生产环境中使用 Public IP。
+
+ + + + +
+ +Private Connect 利用云服务商的 **Private Link** 或 **Private Service Connect** 技术,使你 VPC 中的资源能够通过私有 IP 地址连接到其他 VPC 中的服务,就像这些服务直接托管在你的 VPC 内一样。 + +TiDB Cloud 目前仅支持自建 Kafka 的 Private Connect,不支持与 MSK、Confluent Kafka 或其他 Kafka SaaS 服务的直接集成。若需通过 Private Connect 连接这些 Kafka SaaS 服务,你可以部署一个 [kafka-proxy](https://github.com/grepplabs/kafka-proxy) 作为中间层,将 Kafka 服务暴露为自建 Kafka。 + +如果你的 Apache Kafka 服务托管在 AWS,请按照 [Set Up Self-Hosted Kafka Private Link Service in AWS](/tidb-cloud/setup-aws-self-hosted-kafka-private-link-service.md) 配置网络连接并获取 **Bootstrap Ports** 信息,然后按照 [Set Up Private Endpoint for Changefeeds](/tidb-cloud/premium/set-up-sink-private-endpoint-premium.md) 创建私有端点。 + +
+
+ +如果你希望通过 Public IP 访问 Apache Kafka 服务,请为所有 Kafka broker 分配 Public IP 地址。 + +**不建议**在生产环境中使用 Public IP。 + +
+ +
+ +目前,TiDB Cloud Premium 实例的 VPC Peering 功能仅支持按需申请。若需申请此功能,请点击 [TiDB Cloud 控制台](https://tidbcloud.com) 右下角的 **?**,然后点击 **Request Support**。在 **Description** 字段填写“Apply for VPC Peering for TiDB Cloud Premium instance”,并点击 **Submit**。 + +
+
+
### Kafka ACL 授权 @@ -100,7 +147,7 @@ TiDB Cloud 目前仅支持自建 Kafka 的 Private Connect,不支持与 MSK、 ## 第 1 步:打开 Apache Kafka 的 Changefeed 页面 1. 登录 [TiDB Cloud 控制台](https://tidbcloud.com)。 -2. 进入目标 TiDB 集群的集群概览页面,然后点击左侧导航栏的 **Data** > **Changefeed**。 +2. 进入目标 TiDB 集群实例的概览页面,在左侧导航栏点击 **Data** > **Changefeed**。 3. 点击 **Create Changefeed**,并选择 **Kafka** 作为 **Destination**。 ## 第 2 步:配置变更订阅目标 @@ -110,7 +157,7 @@ TiDB Cloud 目前仅支持自建 Kafka 的 Private Connect,不支持与 MSK、
-1. 在 **Connectivity Method** 中,选择 **VPC Peering** 或 **Public IP**,填写你的 Kafka broker endpoint。多个 endpoint 可用逗号 `,` 分隔。 +1. 在 **Connectivity Method** 选择 **VPC Peering** 或 **Public IP**,填写你的 Kafka broker 端点。多个端点可用英文逗号 `,` 分隔。 2. 根据你的 Kafka 认证配置,选择 **Authentication** 选项。 - 如果 Kafka 不需要认证,保持默认选项 **Disable**。 @@ -124,9 +171,9 @@ TiDB Cloud 目前仅支持自建 Kafka 的 Private Connect,不支持与 MSK、
-1. 在 **Connectivity Method** 中,选择 **Private Link**。 -2. 在 **Private Endpoint** 中,选择你在 [Network](#network) 部分创建的私有端点。确保私有端点的 AZ 与 Kafka 部署的 AZ 匹配。 -3. 填写你在 [Network](#network) 部分获取的 **Bootstrap Ports**。建议每个 AZ 至少设置一个端口。多个端口可用逗号 `,` 分隔。 +1. 在 **Connectivity Method** 选择 **Private Link**。 +2. 在 **Private Endpoint** 选择你在 [网络](#network) 部分创建的私有端点。确保私有端点的 AZ 与 Kafka 部署的 AZ 匹配。 +3. 填写你在 [网络](#network) 部分获取的 **Bootstrap Ports**。建议每个 AZ 至少设置一个端口。多个端口可用英文逗号 `,` 分隔。 4. 根据你的 Kafka 认证配置,选择 **Authentication** 选项。 - 如果 Kafka 不需要认证,保持默认选项 **Disable**。 @@ -140,11 +187,13 @@ TiDB Cloud 目前仅支持自建 Kafka 的 Private Connect,不支持与 MSK、 11. 返回 [TiDB Cloud 控制台](https://tidbcloud.com) 确认你已接受连接请求。TiDB Cloud 会测试连接,测试通过后进入下一页面。
+ +
-1. 在 **Connectivity Method** 中,选择 **Private Service Connect**。 -2. 在 **Private Endpoint** 中,选择你在 [Network](#network) 部分创建的私有端点。 -3. 填写你在 [Network](#network) 部分获取的 **Bootstrap Ports**。建议提供多个端口。多个端口可用逗号 `,` 分隔。 +1. 在 **Connectivity Method** 选择 **Private Service Connect**。 +2. 在 **Private Endpoint** 选择你在 [网络](#network) 部分创建的私有端点。 +3. 填写你在 [网络](#network) 部分获取的 **Bootstrap Ports**。建议填写多个端口。多个端口可用英文逗号 `,` 分隔。 4. 根据你的 Kafka 认证配置,选择 **Authentication** 选项。 - 如果 Kafka 不需要认证,保持默认选项 **Disable**。 @@ -158,11 +207,14 @@ TiDB Cloud 目前仅支持自建 Kafka 的 Private Connect,不支持与 MSK、 11. 返回 [TiDB Cloud 控制台](https://tidbcloud.com) 确认你已接受连接请求。TiDB Cloud 会测试连接,测试通过后进入下一页面。
+
+ +
-1. 在 **Connectivity Method** 中,选择 **Private Link**。 -2. 在 **Private Endpoint** 中,选择你在 [Network](#network) 部分创建的私有端点。 -3. 填写你在 [Network](#network) 部分获取的 **Bootstrap Ports**。建议每个 AZ 至少设置一个端口。多个端口可用逗号 `,` 分隔。 +1. 在 **Connectivity Method** 选择 **Private Link**。 +2. 在 **Private Endpoint** 选择你在 [网络](#network) 部分创建的私有端点。 +3. 填写你在 [网络](#network) 部分获取的 **Bootstrap Ports**。建议每个 AZ 至少设置一个端口。多个端口可用英文逗号 `,` 分隔。 4. 根据你的 Kafka 认证配置,选择 **Authentication** 选项。 - 如果 Kafka 不需要认证,保持默认选项 **Disable**。 @@ -176,108 +228,109 @@ TiDB Cloud 目前仅支持自建 Kafka 的 Private Connect,不支持与 MSK、 11. 返回 [TiDB Cloud 控制台](https://tidbcloud.com) 确认你已接受连接请求。TiDB Cloud 会测试连接,测试通过后进入下一页面。
+
## 第 3 步:设置变更订阅 -1. 自定义 **Table Filter**,筛选你希望同步的表。规则语法可参考 [table filter rules](/table-filter.md)。 +1. 自定义 **Table Filter**,筛选你希望同步的表。规则语法详见 [table filter rules](/table-filter.md)。 - **Case Sensitive**:你可以设置过滤规则中数据库和表名的匹配是否区分大小写。默认情况下,匹配不区分大小写。 - - **Filter Rules**:你可以在此列设置过滤规则。默认有一条规则 `*.*`,表示同步所有表。添加新规则后,TiDB Cloud 会查询 TiDB 中的所有表,并在右侧仅显示匹配规则的表。最多可添加 100 条过滤规则。 - - **Tables with valid keys**:此列显示具有有效键(包括主键或唯一索引)的表。 - - **Tables without valid keys**:此列显示缺少主键或唯一键的表。这些表在同步时存在挑战,因为缺少唯一标识符可能导致下游处理重复事件时数据不一致。为保证数据一致性,建议在同步前为这些表添加唯一键或主键,或者通过添加过滤规则排除这些表。例如,可以通过规则 `"!test.tbl1"` 排除表 `test.tbl1`。 + - **Filter Rules**:你可以在此列设置过滤规则。默认有一条规则 `*.*`,表示同步所有表。添加新规则后,TiDB Cloud 会查询 TiDB 中所有表,并在右侧仅显示匹配规则的表。最多可添加 100 条过滤规则。 + - **Tables with valid keys**:此列显示具有有效键(主键或唯一索引)的表。 + - **Tables without valid keys**:此列显示缺少主键或唯一键的表。这些表在同步时存在挑战,因为缺少唯一标识符可能导致下游处理重复事件时数据不一致。为保证数据一致性,建议在同步前为这些表添加唯一键或主键,或通过过滤规则排除这些表。例如,可以通过规则 `"!test.tbl1"` 排除表 `test.tbl1`。 2. 自定义 **Event Filter**,筛选你希望同步的事件。 - **Tables matching**:你可以设置事件过滤器应用于哪些表。规则语法与前述 **Table Filter** 区域相同。每个变更订阅最多可添加 10 条事件过滤规则。 - - **Event Filter**:你可以使用以下事件过滤器从变更订阅中排除特定事件: + - **Event Filter**:你可以使用以下事件过滤器排除特定事件类型: - **Ignore event**:排除指定类型的事件。 - **Ignore SQL**:排除匹配指定表达式的 DDL 事件。例如,`^drop` 排除以 `DROP` 开头的语句,`add column` 排除包含 `ADD COLUMN` 的语句。 - **Ignore insert value expression**:排除满足特定条件的 `INSERT` 语句。例如,`id >= 100` 排除 `id` 大于等于 100 的 `INSERT` 语句。 - - **Ignore update new value expression**:排除新值满足指定条件的 `UPDATE` 语句。例如,`gender = 'male'` 排除更新后 `gender` 为 `male` 的更新。 - - **Ignore update old value expression**:排除旧值满足指定条件的 `UPDATE` 语句。例如,`age < 18` 排除旧值 `age` 小于 18 的更新。 - - **Ignore delete value expression**:排除满足指定条件的 `DELETE` 语句。例如,`name = 'john'` 排除 `name` 为 `'john'` 的删除。 + - **Ignore update new value expression**:排除新值满足指定条件的 `UPDATE` 语句。例如,`gender = 'male'` 排除更新后 `gender` 为 `male` 的变更。 + - **Ignore update old value expression**:排除旧值满足指定条件的 `UPDATE` 语句。例如,`age < 18` 排除旧值 `age` 小于 18 的变更。 + - **Ignore delete value expression**:排除满足指定条件的 `DELETE` 语句。例如,`name = 'john'` 排除 `name` 为 `'john'` 的删除操作。 3. 自定义 **Column Selector**,选择事件中的列,仅将这些列的数据变更发送到下游。 - **Tables matching**:指定列选择器应用于哪些表。未匹配任何规则的表将发送所有列。 - **Column Selector**:指定匹配表中哪些列会被发送到下游。 - 更多匹配规则信息,参见 [Column selectors](https://docs.pingcap.com/tidb/stable/ticdc-sink-to-kafka/#column-selectors)。 + 更多匹配规则说明,参见 [Column selectors](https://docs.pingcap.com/tidb/stable/ticdc-sink-to-kafka/#column-selectors)。 4. 在 **Data Format** 区域,选择你期望的 Kafka 消息格式。 - - Avro 是一种紧凑、快速、二进制的数据格式,支持丰富的数据结构,广泛应用于各种流式系统。更多信息参见 [Avro data format](https://docs.pingcap.com/tidb/stable/ticdc-avro-protocol)。 - - Canal-JSON 是一种纯 JSON 文本格式,易于解析。更多信息参见 [Canal-JSON data format](https://docs.pingcap.com/tidb/stable/ticdc-canal-json)。 - - Open Protocol 是一种行级数据变更通知协议,为监控、缓存、全文索引、分析引擎以及不同数据库间主从复制提供数据源。更多信息参见 [Open Protocol data format](https://docs.pingcap.com/tidb/stable/ticdc-open-protocol)。 - - Debezium 是一个捕获数据库变更的工具。它将每个捕获到的数据库变更转换为一个称为“事件”的消息,并将这些事件发送到 Kafka。更多信息参见 [Debezium data format](https://docs.pingcap.com/tidb/stable/ticdc-debezium)。 + - Avro 是一种紧凑、高效的二进制数据格式,支持丰富的数据结构,广泛应用于各种流式系统。详见 [Avro data format](https://docs.pingcap.com/tidb/stable/ticdc-avro-protocol)。 + - Canal-JSON 是一种纯 JSON 文本格式,易于解析。详见 [Canal-JSON data format](https://docs.pingcap.com/tidb/stable/ticdc-canal-json)。 + - Open Protocol 是一种行级数据变更通知协议,为监控、缓存、全文索引、分析引擎及不同数据库间主从复制等场景提供数据源。详见 [Open Protocol data format](https://docs.pingcap.com/tidb/stable/ticdc-open-protocol)。 + - Debezium 是一个捕获数据库变更的工具。它将每个捕获到的数据库变更转换为一个称为“事件”的消息,并发送到 Kafka。详见 [Debezium data format](https://docs.pingcap.com/tidb/stable/ticdc-debezium)。 -5. 如果你希望在 Kafka 消息体中添加 TiDB-extension 字段,请启用 **TiDB Extension** 选项。 +5. 如果你希望在 Kafka 消息体中添加 TiDB 扩展字段,请启用 **TiDB Extension** 选项。 - 有关 TiDB-extension 字段的更多信息,参见 [TiDB extension fields in Avro data format](https://docs.pingcap.com/tidb/stable/ticdc-avro-protocol#tidb-extension-fields) 和 [TiDB extension fields in Canal-JSON data format](https://docs.pingcap.com/tidb/stable/ticdc-canal-json#tidb-extension-field)。 + 有关 TiDB 扩展字段的更多信息,参见 [Avro 数据格式中的 TiDB 扩展字段](https://docs.pingcap.com/tidb/stable/ticdc-avro-protocol#tidb-extension-fields) 和 [Canal-JSON 数据格式中的 TiDB 扩展字段](https://docs.pingcap.com/tidb/stable/ticdc-canal-json#tidb-extension-field)。 6. 如果你选择 **Avro** 作为数据格式,页面会显示一些 Avro 专属配置。你可以按如下方式填写: - 在 **Decimal** 和 **Unsigned BigInt** 配置项中,指定 TiDB Cloud 如何在 Kafka 消息中处理 decimal 和 unsigned bigint 数据类型。 - - 在 **Schema Registry** 区域,填写你的 schema registry endpoint。如果启用 **HTTP Authentication**,会显示用户名和密码字段,并自动填入 TiDB 集群 endpoint 和密码。 + - 在 **Schema Registry** 区域,填写你的 schema registry 端点。如果启用 **HTTP Authentication**,会显示用户名和密码字段,并自动填充为 TiDB 集群实例的端点和密码。 -7. 在 **Topic Distribution** 区域,选择一种分发模式,并根据该模式填写 topic 名称配置。 +7. 在 **Topic Distribution** 区域,选择分发模式,并根据模式填写 topic 名称配置。 如果你选择 **Avro** 作为数据格式,则只能在 **Distribution Mode** 下拉列表中选择 **Distribute changelogs by table to Kafka Topics** 模式。 - 分发模式控制变更订阅如何创建 Kafka topic,可以按表、按库,或为所有变更日志创建一个 topic。 + 分发模式控制变更订阅如何创建 Kafka topic,可以按表、按库,或将所有变更日志发送到一个 topic。 - **Distribute changelogs by table to Kafka Topics** - 如果你希望变更订阅为每个表创建一个专用的 Kafka topic,选择此模式。这样,某个表的所有 Kafka 消息都会发送到专用的 Kafka topic。你可以通过设置 topic 前缀、数据库名与表名之间的分隔符以及后缀自定义 topic 名称。例如,分隔符设置为 `_` 时,topic 名称格式为 `_`。 + 如果你希望为每个表创建一个专用的 Kafka topic,选择此模式。这样,某个表的所有 Kafka 消息都会发送到专用 topic。你可以通过设置 topic 前缀、数据库名与表名之间的分隔符和后缀自定义 topic 名称。例如,分隔符设置为 `_` 时,topic 名称格式为 `_`。 - 对于非行级事件(如 Create Schema Event)的变更日志,可以在 **Default Topic Name** 字段指定 topic 名称。变更订阅会相应创建 topic 收集这些变更日志。 + 对于非行级事件(如 Create Schema Event)的变更日志,可以在 **Default Topic Name** 字段指定 topic 名称,变更订阅会相应创建 topic 收集这些变更日志。 - **Distribute changelogs by database to Kafka Topics** - 如果你希望变更订阅为每个数据库创建一个专用的 Kafka topic,选择此模式。这样,某个数据库的所有 Kafka 消息都会发送到专用的 Kafka topic。你可以通过设置 topic 前缀和后缀自定义数据库的 topic 名称。 + 如果你希望为每个数据库创建一个专用的 Kafka topic,选择此模式。这样,某个数据库的所有 Kafka 消息都会发送到专用 topic。你可以通过设置 topic 前缀和后缀自定义数据库的 topic 名称。 - 对于非行级事件(如 Resolved Ts Event)的变更日志,可以在 **Default Topic Name** 字段指定 topic 名称。变更订阅会相应创建 topic 收集这些变更日志。 + 对于非行级事件(如 Resolved Ts Event)的变更日志,可以在 **Default Topic Name** 字段指定 topic 名称,变更订阅会相应创建 topic 收集这些变更日志。 - **Send all changelogs to one specified Kafka Topic** - 如果你希望变更订阅为所有变更日志创建一个 Kafka topic,选择此模式。这样,变更订阅中的所有 Kafka 消息都会发送到同一个 Kafka topic。你可以在 **Topic Name** 字段定义 topic 名称。 + 如果你希望所有变更日志都发送到同一个 Kafka topic,选择此模式。这样,变更订阅中的所有 Kafka 消息都会发送到一个 topic。你可以在 **Topic Name** 字段定义 topic 名称。 -8. 在 **Partition Distribution** 区域,你可以决定 Kafka 消息将被发送到哪个分区。你可以为所有表定义**单一分区分发器**,也可以为不同表定义**不同的分区分发器**。TiDB Cloud 提供四种分发器类型: +8. 在 **Partition Distribution** 区域,你可以决定 Kafka 消息发送到哪个分区。你可以为所有表定义 **单一分区分发器**,也可以为不同表定义 **不同的分区分发器**。TiDB Cloud 提供四种分发器类型: - **Distribute changelogs by primary key or index value to Kafka partition** - 如果你希望变更订阅将某个表的 Kafka 消息发送到不同分区,选择此分发方式。行变更日志的主键或索引值将决定其被发送到哪个分区。该方式能提供更好的分区均衡,并保证行级有序性。 + 如果你希望将某个表的 Kafka 消息分发到不同分区,选择此方式。行变更日志的主键或索引值决定其发送到哪个分区。该方式有助于分区均衡,并保证行级有序。 - **Distribute changelogs by table to Kafka partition** - 如果你希望变更订阅将某个表的 Kafka 消息发送到同一个分区,选择此分发方式。行变更日志的表名将决定其被发送到哪个分区。该方式保证表级有序性,但可能导致分区不均衡。 + 如果你希望将某个表的 Kafka 消息全部发送到同一个分区,选择此方式。行变更日志的表名决定其发送到哪个分区。该方式保证表级有序,但可能导致分区不均衡。 - **Distribute changelogs by timestamp to Kafka partition** - 如果你希望变更订阅将 Kafka 消息随机发送到不同分区,选择此分发方式。行变更日志的 commitTs 将决定其被发送到哪个分区。该方式能提供更好的分区均衡,并保证每个分区内的有序性。但同一数据项的多次变更可能被发送到不同分区,不同消费者的消费进度可能不同,可能导致数据不一致。因此,消费者需要在消费前按 commitTs 对多分区数据进行排序。 + 如果你希望将 Kafka 消息随机分发到不同分区,选择此方式。行变更日志的 commitTs 决定其发送到哪个分区。该方式有助于分区均衡,并保证每个分区内有序。但同一数据项的多次变更可能被发送到不同分区,不同消费者的消费进度可能不同,可能导致数据不一致。因此,消费者需要在消费前按 commitTs 对多分区数据进行排序。 - **Distribute changelogs by column value to Kafka partition** - 如果你希望变更订阅将某个表的 Kafka 消息发送到不同分区,选择此分发方式。行变更日志的指定列值将决定其被发送到哪个分区。该方式保证每个分区内的有序性,并确保相同列值的变更日志被发送到同一分区。 + 如果你希望将某个表的 Kafka 消息分发到不同分区,选择此方式。行变更日志的指定列值决定其发送到哪个分区。该方式保证每个分区内有序,并确保相同列值的变更日志发送到同一分区。 9. 在 **Topic Configuration** 区域,配置以下数值。变更订阅会根据这些数值自动创建 Kafka topic。 - - **Replication Factor**:控制每条 Kafka 消息会被复制到多少台 Kafka 服务器。有效取值范围为 [`min.insync.replicas`](https://kafka.apache.org/33/documentation.html#brokerconfigs_min.insync.replicas) 到 Kafka broker 数量。 - - **Partition Number**:控制每个 topic 的分区数量。有效取值范围为 `[1, 10 * Kafka broker 数量]`。 + - **Replication Factor**:控制每条 Kafka 消息在多少个 Kafka 服务器上进行副本。有效取值范围为 [`min.insync.replicas`](https://kafka.apache.org/33/documentation.html#brokerconfigs_min.insync.replicas) 到 Kafka broker 数量。 + - **Partition Number**:控制 topic 的分区数量。有效取值范围为 `[1, 10 * Kafka broker 数量]`。 -10. 在 **Split Event** 区域,选择是否将 `UPDATE` 事件拆分为独立的 `DELETE` 和 `INSERT` 事件,或保持为原始的 `UPDATE` 事件。更多信息参见 [Split primary or unique key UPDATE events for non-MySQL sinks](https://docs.pingcap.com/tidb/stable/ticdc-split-update-behavior/#split-primary-or-unique-key-update-events-for-non-mysql-sinks)。 +10. 在 **Split Event** 区域,选择是否将 `UPDATE` 事件拆分为独立的 `DELETE` 和 `INSERT` 事件,或保持原始 `UPDATE` 事件。详见 [Split primary or unique key UPDATE events for non-MySQL sinks](https://docs.pingcap.com/tidb/stable/ticdc-split-update-behavior/#split-primary-or-unique-key-update-events-for-non-mysql-sinks)。 11. 点击 **Next**。 ## 第 4 步:配置变更订阅规范 -1. 在 **Changefeed Specification** 区域,指定变更订阅使用的 Replication Capacity Units(RCU)数量。 -2. 在 **Changefeed Name** 区域,为变更订阅指定一个名称。 -3. 点击 **Next** 检查你设置的配置,并进入下一页面。 +1. 在 **Changefeed Specification** 区域,指定本变更订阅使用的 Replication Capacity Units (RCUs)Changefeed Capacity Units (CCUs) 数量。 +2. 在 **Changefeed Name** 区域,指定变更订阅的名称。 +3. 点击 **Next**,检查你设置的配置并进入下一页面。 ## 第 5 步:检查配置 在此页面,你可以检查所有已设置的变更订阅配置。 -如果发现有误,可以返回修改。如果没有错误,勾选底部的复选框,然后点击 **Create** 创建变更订阅。 \ No newline at end of file +如果发现有误,可以返回修改。如果没有问题,勾选底部的复选框,然后点击 **Create** 创建变更订阅。 \ No newline at end of file diff --git a/tidb-cloud/changefeed-sink-to-mysql.md b/tidb-cloud/changefeed-sink-to-mysql.md index 212e85565ac63..c7f74f1e4bdf8 100644 --- a/tidb-cloud/changefeed-sink-to-mysql.md +++ b/tidb-cloud/changefeed-sink-to-mysql.md @@ -1,20 +1,31 @@ --- title: Sink to MySQL -summary: 本文档介绍如何使用 **Sink to MySQL** changefeed 将数据从 TiDB Cloud 实时同步到 MySQL。内容包括限制、前置条件,以及创建 MySQL sink 进行数据同步的步骤。该过程涉及网络连接配置、将已有数据导入 MySQL 以及在 MySQL 中创建目标表。完成前置条件后,用户即可创建 MySQL sink,将数据同步到 MySQL。 +summary: 本文档介绍如何使用 **Sink to MySQL** changefeed 将数据从 TiDB Cloud 流式同步到 MySQL。内容包括限制、前置条件,以及创建用于数据复制的 MySQL sink 的步骤。该过程涉及网络连接设置、将现有数据加载到 MySQL 以及在 MySQL 中创建目标表。完成前置条件后,用户即可创建 MySQL sink,将数据复制到 MySQL。 --- # Sink to MySQL -本文档介绍如何使用 **Sink to MySQL** changefeed,将数据从 TiDB Cloud 实时同步到 MySQL。 +本文档介绍如何使用 **Sink to MySQL** changefeed,将数据从 TiDB Cloud 流式同步到 MySQL。 + + > **注意:** > > - 要使用 changefeed 功能,请确保你的 TiDB Cloud Dedicated 集群版本为 v6.1.3 或更高版本。 > - 对于 [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 和 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 集群,changefeed 功能不可用。 + + + +> **注意:** +> +> 对于 [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 和 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 集群,changefeed 功能不可用。 + + + ## 限制 -- 每个 TiDB Cloud 集群最多可创建 100 个 changefeed。 +- 对于每个 TiDB Cloud 集群实例,最多可以创建 100 个 changefeed。 - 由于 TiDB Cloud 使用 TiCDC 建立 changefeed,因此具有与 [TiCDC 相同的限制](https://docs.pingcap.com/tidb/stable/ticdc-overview#unsupported-scenarios)。 - 如果待同步的表没有主键或非空唯一索引,在某些重试场景下,由于缺少唯一约束,可能会导致下游插入重复数据。 @@ -22,42 +33,44 @@ summary: 本文档介绍如何使用 **Sink to MySQL** changefeed 将数据从 T 在创建 changefeed 之前,你需要完成以下前置条件: -- 配置网络连接 -- 导出并加载已有数据到 MySQL(可选) -- 如果你不加载已有数据,仅希望同步增量数据到 MySQL,则需要在 MySQL 中手动创建对应的目标表 +- 设置网络连接 +- 导出并加载现有数据到 MySQL(可选) +- 如果你不加载现有数据,仅希望将增量数据同步到 MySQL,则需要在 MySQL 中手动创建对应的目标表 ### 网络 -确保你的 TiDB Cloud 集群能够连接到 MySQL 服务。 + + +确保你的 TiDB Cloud 集群可以连接到 MySQL 服务。
如果你的 MySQL 服务位于没有公网访问权限的 AWS VPC 中,请按照以下步骤操作: -1. 在 MySQL 服务所在 VPC 与 TiDB 集群之间 [建立 VPC Peering 连接](/tidb-cloud/set-up-vpc-peering-connections.md)。 +1. 在 MySQL 服务所在 VPC 与 TiDB 集群所在 VPC 之间 [建立 VPC Peering 连接](/tidb-cloud/set-up-vpc-peering-connections.md)。 2. 修改 MySQL 服务关联的安全组的入站规则。 - 你必须将 [TiDB Cloud 集群所在区域的 CIDR](/tidb-cloud/set-up-vpc-peering-connections.md#prerequisite-set-a-cidr-for-a-region) 添加到入站规则中。这样可以允许来自 TiDB 集群的流量访问 MySQL 实例。 + 你必须将 [TiDB Cloud 集群所在区域的 CIDR](/tidb-cloud/set-up-vpc-peering-connections.md#prerequisite-set-a-cidr-for-a-region) 添加到入站规则中。这样可以允许来自 TiDB 集群到 MySQL 实例的流量。 3. 如果 MySQL URL 包含主机名,你需要允许 TiDB Cloud 能够解析 MySQL 服务的 DNS 主机名。 - 1. 按照 [为 VPC Peering 连接启用 DNS 解析](https://docs.aws.amazon.com/vpc/latest/peering/modify-peering-connections.html#vpc-peering-dns) 的步骤操作。 + 1. 按照 [为 VPC Peering 连接启用 DNS 解析](https://docs.aws.amazon.com/vpc/latest/peering/modify-peering-connections.html#vpc-peering-dns) 中的步骤操作。 2. 启用 **Accepter DNS resolution** 选项。 如果你的 MySQL 服务位于没有公网访问权限的 Google Cloud VPC 中,请按照以下步骤操作: 1. 如果你的 MySQL 服务是 Google Cloud SQL,必须在 Google Cloud SQL 实例关联的 VPC 中暴露一个 MySQL 端点。你可能需要使用 Google 提供的 [**Cloud SQL Auth proxy**](https://cloud.google.com/sql/docs/mysql/sql-proxy)。 -2. 在 MySQL 服务所在 VPC 与 TiDB 集群之间 [建立 VPC Peering 连接](/tidb-cloud/set-up-vpc-peering-connections.md)。 -3. 修改 MySQL 所在 VPC 的入站防火墙规则。 +2. 在 MySQL 服务所在 VPC 与 TiDB 集群所在 VPC 之间 [建立 VPC Peering 连接](/tidb-cloud/set-up-vpc-peering-connections.md)。 +3. 修改 MySQL 所在 VPC 的 ingress 防火墙规则。 - 你必须将 [TiDB Cloud 集群所在区域的 CIDR](/tidb-cloud/set-up-vpc-peering-connections.md#prerequisite-set-a-cidr-for-a-region) 添加到入站防火墙规则中。这样可以允许来自 TiDB Cloud 集群的流量访问 MySQL 端点。 + 你必须将 [TiDB Cloud 集群所在区域的 CIDR](/tidb-cloud/set-up-vpc-peering-connections.md#prerequisite-set-a-cidr-for-a-region) 添加到 ingress 防火墙规则中。这样可以允许来自 TiDB Cloud 集群到 MySQL 端点的流量。
-私有端点利用云服务商的 **Private Link** 或 **Private Service Connect** 技术,使你 VPC 中的资源能够通过私有 IP 地址连接到其他 VPC 的服务,就像这些服务直接托管在你的 VPC 内一样。 +私有端点利用云服务商的 **Private Link** 或 **Private Service Connect** 技术,使你 VPC 中的资源能够通过私有 IP 地址连接到其他 VPC 中的服务,就像这些服务直接托管在你的 VPC 内一样。 你可以通过私有端点安全地将 TiDB Cloud 集群连接到 MySQL 服务。如果你的 MySQL 服务尚未启用私有端点,请参考 [Set Up Private Endpoint for Changefeeds](/tidb-cloud/set-up-sink-private-endpoint.md) 创建私有端点。 @@ -65,28 +78,54 @@ summary: 本文档介绍如何使用 **Sink to MySQL** changefeed 将数据从 T -### 加载已有数据(可选) + + + + +确保你的 TiDB Cloud 实例可以连接到 MySQL 服务。 + +> **注意:** +> +> 目前,TiDB Cloud Premium 实例的 VPC Peering 功能仅支持按需申请。若需申请此功能,请在 [TiDB Cloud 控制台](https://tidbcloud.com) 右下角点击 **?**,然后点击 **Request Support**。在 **Description** 字段填写 "Apply for VPC Peering for TiDB Cloud Premium instance",并点击 **Submit**。 + +私有端点利用云服务商的 **Private Link** 或 **Private Service Connect** 技术,使你 VPC 中的资源能够通过私有 IP 地址连接到其他 VPC 中的服务,就像这些服务直接托管在你的 VPC 内一样。 + +你可以通过私有端点安全地将 TiDB Cloud 实例连接到 MySQL 服务。如果你的 MySQL 服务尚未启用私有端点,请参考 [Set Up Private Endpoint for Changefeeds](/tidb-cloud/premium/set-up-sink-private-endpoint-premium.md) 创建私有端点。 + + + +### 加载现有数据(可选) + + + +**Sink to MySQL** 连接器只能将某一时间点之后的增量数据从 TiDB 集群同步到 MySQL。如果你的 TiDB 集群中已经有数据,可以在启用 **Sink to MySQL** 之前,将 TiDB 集群的现有数据导出并加载到 MySQL。 + + + + +**Sink to MySQL** 连接器只能将某一时间点之后的增量数据从 TiDB 实例同步到 MySQL。如果你的 TiDB 实例中已经有数据,可以在启用 **Sink to MySQL** 之前,将 TiDB 实例的现有数据导出并加载到 MySQL。 -**Sink to MySQL** 连接器只能将某一时间戳之后的增量数据从 TiDB 集群同步到 MySQL。如果你的 TiDB 集群中已经有数据,可以在启用 **Sink to MySQL** 之前,将已有数据导出并加载到 MySQL。 + -加载已有数据的步骤如下: +加载现有数据的步骤如下: 1. 将 [tidb_gc_life_time](https://docs.pingcap.com/tidb/stable/system-variables#tidb_gc_life_time-new-in-v50) 设置为大于以下两个操作总耗时的值,以避免这段时间内的历史数据被 TiDB 垃圾回收。 - - 导出和导入已有数据所需的时间 + - 导出和导入现有数据所需的时间 - 创建 **Sink to MySQL** 所需的时间 例如: + ```sql SET GLOBAL tidb_gc_life_time = '720h'; ``` -2. 使用 [Dumpling](https://docs.pingcap.com/tidb/stable/dumpling-overview) 从 TiDB 集群导出数据,然后使用社区工具如 [mydumper/myloader](https://centminmod.com/mydumper.html) 将数据加载到 MySQL 服务。 +2. 使用 [Dumpling](https://docs.pingcap.com/tidb/stable/dumpling-overview) 从 TiDB 集群实例 导出数据,然后使用社区工具如 [mydumper/myloader](https://centminmod.com/mydumper.html) 将数据加载到 MySQL 服务。 3. 从 [Dumpling 导出的文件](https://docs.pingcap.com/tidb/stable/dumpling-overview#format-of-exported-files) 中,获取 MySQL sink 的起始位置(start position),该信息位于 metadata 文件中: - 以下是示例 metadata 文件的一部分。`SHOW MASTER STATUS` 的 `Pos` 即为已有数据的 TSO,也是 MySQL sink 的起始位置。 + 以下是示例 metadata 文件的一部分。`SHOW MASTER STATUS` 的 `Pos` 即为现有数据的 TSO,也是 MySQL sink 的起始位置。 ``` Started dump at: 2020-11-10 10:40:19 @@ -98,13 +137,13 @@ summary: 本文档介绍如何使用 **Sink to MySQL** changefeed 将数据从 T ### 在 MySQL 中创建目标表 -如果你没有加载已有数据,需要在 MySQL 中手动创建对应的目标表,用于存储来自 TiDB 的增量数据。否则,数据将无法同步。 +如果你没有加载现有数据,需要在 MySQL 中手动创建对应的目标表,用于存储来自 TiDB 的增量数据。否则,数据将无法被同步。 ## 创建 MySQL sink 完成前置条件后,你可以将数据同步到 MySQL。 -1. 进入目标 TiDB 集群的集群总览页面,在左侧导航栏点击 **Data** > **Changefeed**。 +1. 进入目标 TiDB 集群实例的概览页面,在左侧导航栏点击 **Data** > **Changefeed**。 2. 点击 **Create Changefeed**,并选择 **MySQL** 作为 **Destination**。 @@ -115,38 +154,38 @@ summary: 本文档介绍如何使用 **Sink to MySQL** changefeed 将数据从 T 4. 在 **Authentication** 中,填写 MySQL 服务的用户名和密码。 -5. 点击 **Next** 测试 TiDB 是否能成功连接到 MySQL: +5. 点击 **Next** 测试 TiDB 是否可以成功连接到 MySQL: - - 如果连接成功,将进入下一步配置。 + - 如果可以连接,将进入下一步配置。 - 如果连接失败,会显示连接错误,你需要排查并解决问题。解决后再次点击 **Next**。 6. 自定义 **Table Filter**,筛选你希望同步的表。规则语法详见 [table filter rules](/table-filter.md)。 - **Case Sensitive**:你可以设置过滤规则中数据库和表名的匹配是否区分大小写。默认情况下,匹配不区分大小写。 - - **Filter Rules**:你可以在此列设置过滤规则。默认有一条规则 `*.*`,表示同步所有表。添加新规则后,TiDB Cloud 会查询 TiDB 中所有表,并在右侧仅显示匹配规则的表。最多可添加 100 条过滤规则。 - - **Tables with valid keys**:此列显示具有有效键(主键或唯一索引)的表。 - - **Tables without valid keys**:此列显示缺少主键或唯一索引的表。这些表在同步时存在风险,因为下游处理重复事件时,缺少唯一标识可能导致数据不一致。为保证数据一致性,建议在同步前为这些表添加唯一索引或主键,或者通过过滤规则排除这些表。例如,可以通过规则 `"!test.tbl1"` 排除表 `test.tbl1`。 + - **Filter Rules**:你可以在此列设置过滤规则。默认有一条规则 `*.*`,表示同步所有表。添加新规则时,TiDB Cloud 会查询 TiDB 中的所有表,并在右侧仅显示匹配规则的表。最多可添加 100 条过滤规则。 + - **Tables with valid keys**:此列显示具有有效键(包括主键或唯一索引)的表。 + - **Tables without valid keys**:此列显示缺少主键或唯一键的表。这些表在同步时存在风险,因为缺少唯一标识可能导致下游处理重复事件时数据不一致。为保证数据一致性,建议在同步前为这些表添加唯一键或主键,或者通过过滤规则排除这些表。例如,可以通过规则 `"!test.tbl1"` 排除表 `test.tbl1`。 7. 自定义 **Event Filter**,筛选你希望同步的事件。 - **Tables matching**:你可以设置事件过滤器应用于哪些表。规则语法与前述 **Table Filter** 区域相同。每个 changefeed 最多可添加 10 条事件过滤规则。 - - **Event Filter**:你可以使用以下事件过滤器,从 changefeed 中排除特定事件: + - **Event Filter**:你可以使用以下事件过滤器排除特定事件类型: - **Ignore event**:排除指定类型的事件。 - **Ignore SQL**:排除匹配指定表达式的 DDL 事件。例如,`^drop` 排除以 `DROP` 开头的语句,`add column` 排除包含 `ADD COLUMN` 的语句。 - **Ignore insert value expression**:排除满足特定条件的 `INSERT` 语句。例如,`id >= 100` 排除 `id` 大于等于 100 的 `INSERT` 语句。 - - **Ignore update new value expression**:排除新值满足指定条件的 `UPDATE` 语句。例如,`gender = 'male'` 排除更新后 `gender` 为 `male` 的操作。 - - **Ignore update old value expression**:排除旧值满足指定条件的 `UPDATE` 语句。例如,`age < 18` 排除旧值 `age` 小于 18 的更新操作。 - - **Ignore delete value expression**:排除满足指定条件的 `DELETE` 语句。例如,`name = 'john'` 排除 `name` 为 `'john'` 的删除操作。 + - **Ignore update new value expression**:排除新值满足指定条件的 `UPDATE` 语句。例如,`gender = 'male'` 排除更新后 `gender` 为 `male` 的更新。 + - **Ignore update old value expression**:排除旧值满足指定条件的 `UPDATE` 语句。例如,`age < 18` 排除旧值 `age` 小于 18 的更新。 + - **Ignore delete value expression**:排除满足指定条件的 `DELETE` 语句。例如,`name = 'john'` 排除 `name` 为 `'john'` 的删除。 8. 在 **Start Replication Position** 中,配置 MySQL sink 的起始同步位置。 - - 如果你已通过 Dumpling [加载了已有数据](#load-existing-data-optional),请选择 **Start replication from a specific TSO**,并填写从 Dumpling 导出 metadata 文件中获取的 TSO。 - - 如果上游 TiDB 集群没有任何数据,选择 **Start replication from now on**。 - - 其他情况下,你可以选择 **Start replication from a specific time**,自定义起始时间点。 + - 如果你已通过 Dumpling [加载了现有数据](#load-existing-data-optional),请选择 **Start replication from a specific TSO**,并填写从 Dumpling 导出 metadata 文件中获取的 TSO。 + - 如果上游 TiDB 集群实例中没有任何数据,选择 **Start replication from now on**。 + - 否则,你可以通过选择 **Start replication from a specific time** 自定义起始时间点。 9. 点击 **Next** 配置 changefeed 规格。 - - 在 **Changefeed Specification** 区域,指定 changefeed 使用的 Replication Capacity Units(RCU)数量。 + - 在 **Changefeed Specification** 区域,指定 changefeed 使用的 Replication Capacity Units (RCUs)Changefeed Capacity Units (CCUs) 数量。 - 在 **Changefeed Name** 区域,指定 changefeed 的名称。 10. 点击 **Next**,检查 changefeed 配置。 @@ -159,7 +198,7 @@ summary: 本文档介绍如何使用 **Sink to MySQL** changefeed 将数据从 T 点击 changefeed 名称,可以查看更多 changefeed 详情,如 checkpoint、同步延迟及其他指标。 -12. 如果你已通过 Dumpling [加载了已有数据](#load-existing-data-optional),在 sink 创建完成后,需要将 GC 时间恢复为原值(默认值为 `10m`): +12. 如果你已通过 Dumpling [加载了现有数据](#load-existing-data-optional),在 sink 创建完成后,需要将 GC 时间恢复为原值(默认值为 `10m`): ```sql SET GLOBAL tidb_gc_life_time = '10m'; diff --git a/tidb-cloud/set-up-private-endpoint-connections-on-alibaba-cloud.md b/tidb-cloud/set-up-private-endpoint-connections-on-alibaba-cloud.md index e58a4f38b8272..667c9b5317e6a 100644 --- a/tidb-cloud/set-up-private-endpoint-connections-on-alibaba-cloud.md +++ b/tidb-cloud/set-up-private-endpoint-connections-on-alibaba-cloud.md @@ -5,18 +5,18 @@ summary: 了解如何通过阿里云私有终端节点连接到你的 TiDB Cloud # 通过阿里云私有终端节点连接 TiDB Cloud Starter 或 Essential -本教程将指导你如何通过阿里云的私有终端节点连接到你的 TiDB Cloud Starter 或 Essential 集群。通过私有终端节点连接,可以在不经过公网的情况下,实现你的服务与 TiDB Cloud 集群之间的安全、私密通信。 +本教程将指导你通过阿里云的私有终端节点连接到你的 TiDB Cloud Starter 或 Essential 集群。通过私有终端节点连接,可以在不经过公网的情况下,实现你的服务与 TiDB Cloud 集群之间的安全、私密通信。 > **Tip:** > -> 如果你想了解如何通过 AWS PrivateLink 连接 TiDB Cloud Starter 或 Essential 集群,请参阅 [Connect to TiDB Cloud via AWS PrivateLink](/tidb-cloud/set-up-private-endpoint-connections-serverless.md)。 +> 如果你想了解如何通过 AWS PrivateLink 连接到 TiDB Cloud Starter 或 Essential 集群,请参见 [Connect to TiDB Cloud via AWS PrivateLink](/tidb-cloud/set-up-private-endpoint-connections-serverless.md)。 ## 限制 - 目前,TiDB Cloud Starter 和 TiDB Cloud Essential 支持在终端节点服务托管于 AWS 或阿里云时使用私有终端节点连接。如果服务托管在其他云服务商,私有终端节点不可用。 - 不支持跨地域的私有终端节点连接。 -## 使用阿里云设置私有终端节点 +## 在阿里云上设置私有终端节点 要通过私有终端节点连接到你的 TiDB Cloud Starter 或 TiDB Cloud Essential 集群,请按照以下步骤操作: @@ -44,8 +44,8 @@ summary: 了解如何通过阿里云私有终端节点连接到你的 TiDB Cloud - **Endpoint Type**:选择 **Interface Endpoint**。 - **Endpoint Service**:选择 **Other Endpoint Services**。 -5. 粘贴你从 TiDB Cloud 复制的 **Endpoint Service Name**。 -6. 点击 **Verify**。如果服务有效,会出现绿色对勾。 +5. 在 **Endpoint Service Name** 字段中,粘贴你从 TiDB Cloud 复制的服务名称。 +6. 点击 **Verify**。如果服务有效,会出现绿色勾选。 7. 选择要用于该终端节点的 **VPC**、**Security Group** 和 **Zone**。 8. 点击 **OK** 创建终端节点。 9. 等待终端节点状态变为 **Active**,连接状态变为 **Connected**。 diff --git a/tidb-cloud/set-up-private-endpoint-connections-serverless.md b/tidb-cloud/set-up-private-endpoint-connections-serverless.md index 1ae56f010124d..d89d59b77cd18 100644 --- a/tidb-cloud/set-up-private-endpoint-connections-serverless.md +++ b/tidb-cloud/set-up-private-endpoint-connections-serverless.md @@ -13,9 +13,9 @@ summary: 了解如何通过私有终端节点连接到你的 TiDB Cloud 集群 > - 如果你想了解如何通过 Azure 私有终端节点连接 TiDB Cloud Dedicated 集群,请参见 [Connect to a TiDB Cloud Dedicated Cluster via Azure Private Link](/tidb-cloud/set-up-private-endpoint-connections-on-azure.md)。 > - 如果你想了解如何通过 Google Cloud 私有终端节点连接 TiDB Cloud Dedicated 集群,请参见 [Connect to a TiDB Cloud Dedicated Cluster via Google Cloud Private Service Connect](/tidb-cloud/set-up-private-endpoint-connections-on-google-cloud.md)。 -TiDB Cloud 支持通过 [AWS PrivateLink](https://aws.amazon.com/privatelink/?privatelink-blogs.sort-by=item.additionalFields.createdDate&privatelink-blogs.sort-order=desc) 实现对托管在 AWS VPC 中的 TiDB Cloud 服务的高度安全、单向访问,就像服务部署在你自己的 VPC 中一样。你的 VPC 中会暴露一个私有终端节点,你可以通过该终端节点并具备相应权限后连接到 TiDB Cloud 服务。 +TiDB Cloud 支持通过 [AWS PrivateLink](https://aws.amazon.com/privatelink/?privatelink-blogs.sort-by=item.additionalFields.createdDate&privatelink-blogs.sort-order=desc) 实现对托管在 AWS VPC 中的 TiDB Cloud 服务的高度安全、单向访问,就像该服务部署在你自己的 VPC 中一样。你的 VPC 中会暴露一个私有终端节点,你可以通过该终端节点并具备相应权限后连接到 TiDB Cloud 服务。 -借助 AWS PrivateLink,终端节点连接是安全且私有的,不会将你的数据暴露在公网上。此外,终端节点连接支持 CIDR 重叠,便于网络管理。 +借助 AWS PrivateLink,终端节点连接安全且私密,不会将你的数据暴露在公网。此外,终端节点连接支持 CIDR 重叠,便于网络管理。 私有终端节点的架构如下所示: @@ -33,7 +33,7 @@ TiDB Cloud 支持通过 [AWS PrivateLink](https://aws.amazon.com/privatelink/?pr ## 前提条件 -请确保在 AWS VPC 设置中已启用 DNS 主机名和 DNS 解析。在 [AWS 管理控制台](https://console.aws.amazon.com/) 创建 VPC 时,这些选项默认是关闭的。 +请确保在 AWS VPC 设置中已启用 DNS 主机名和 DNS 解析。在 [AWS 管理控制台](https://console.aws.amazon.com/) 中创建 VPC 时,这些选项默认是关闭的。 ## 使用 AWS 设置私有终端节点 @@ -71,8 +71,8 @@ TiDB Cloud 支持通过 [AWS PrivateLink](https://aws.amazon.com/privatelink/?pr 3. 选择 **Endpoint services that use NLBs and GWLBs**。 4. 输入你在 [step 1](#step-1-choose-a-tidb-cluster) 中获取的 service name。 5. 点击 **Verify service**。 -6. 在下拉列表中选择你的 VPC。展开 **Additional settings** 并勾选 **Enable DNS name** 复选框。 -7. 在 **Subnets** 区域,选择 TiDB 集群所在的可用区,并选择 Subnet ID。 +6. 在下拉列表中选择你的 VPC。展开 **Additional settings**,勾选 **Enable DNS name** 复选框。 +7. 在 **Subnets** 区域,选择你的 TiDB 集群所在的可用区,并选择 Subnet ID。 8. 在 **Security groups** 区域,正确选择你的安全组。 > **Note:** @@ -109,12 +109,12 @@ aws ec2 create-vpc-endpoint --vpc-id ${your_vpc_id} --region ${region_id} --serv 1. 在 [**Clusters**](https://tidbcloud.com/project/clusters) 页面,点击目标集群名称,进入其概览页面。 2. 点击右上角的 **Connect**。会弹出连接对话框。 3. 在 **Connection Type** 下拉列表中,选择 **Private Endpoint**。 -4. 在 **Connect With** 下拉列表中,选择你偏好的连接方式。对话框底部会显示相应的连接字符串。 +4. 在 **Connect With** 下拉列表中,选择你偏好的连接方式。对话框底部会显示对应的连接字符串。 5. 使用该连接字符串连接到你的集群。 > **Tip:** > -> 如果你无法连接到集群,可能是因为 AWS 中 VPC 终端节点的安全组设置不正确。解决方法请参见 [此 FAQ](#troubleshooting)。 +> 如果你无法连接到集群,可能是 AWS 中 VPC 终端节点的安全组设置不正确。解决方法请参见 [此 FAQ](#troubleshooting)。 > > 如果在创建 VPC 终端节点时遇到错误 `private-dns-enabled cannot be set because there is already a conflicting DNS domain for gatewayXX-privatelink.XX.prod.aws.tidbcloud.com in the VPC vpc-XXXXX`,说明已经创建过私有终端节点,无需重复创建。 @@ -122,6 +122,6 @@ aws ec2 create-vpc-endpoint --vpc-id ${your_vpc_id} --region ${region_id} --serv ### 启用私有 DNS 后,无法通过私有终端节点连接 TiDB 集群,为什么? -你可能需要在 AWS 管理控制台中为 VPC 终端节点正确设置安全组。进入 **VPC** > **Endpoints**,右键你的 VPC 终端节点,选择合适的 **Manage security groups**。在你的 VPC 内选择允许 EC2 实例通过 4000 端口或自定义端口入站访问的安全组。 +你可能需要在 AWS 管理控制台中正确设置 VPC 终端节点的安全组。进入 **VPC** > **Endpoints**,右键你的 VPC 终端节点,选择合适的 **Manage security groups**。在你的 VPC 内选择允许 EC2 实例通过 4000 端口或自定义端口入站访问的安全组。 -![Manage security groups](/media/tidb-cloud/private-endpoint/manage-security-groups.png) \ No newline at end of file +![Manage security groups](/media/tidb-cloud/private-endpoint/manage-security-groups.png) diff --git a/tidb-cloud/set-up-vpc-peering-connections.md b/tidb-cloud/set-up-vpc-peering-connections.md index 0a6bd06bd65ae..87c4d2fd65329 100644 --- a/tidb-cloud/set-up-vpc-peering-connections.md +++ b/tidb-cloud/set-up-vpc-peering-connections.md @@ -7,17 +7,17 @@ summary: 了解如何通过 VPC Peering 连接 TiDB Cloud Dedicated。 > **Note:** > -> VPC Peering 连接仅适用于托管在 AWS 和 Google Cloud 上的 TiDB Cloud Dedicated 集群。你无法使用 VPC Peering 连接托管在 Azure 上的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群以及 [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#tidb-cloud-serverless) 集群。 +> VPC Peering 连接仅适用于托管在 AWS 和 Google Cloud 上的 TiDB Cloud Dedicated 集群。 要通过 VPC Peering 将你的应用程序连接到 TiDB Cloud,你需要与 TiDB Cloud 建立 [VPC Peering](/tidb-cloud/tidb-cloud-glossary.md#vpc-peering)。本文档将指导你在 [AWS 上设置 VPC Peering](#set-up-vpc-peering-on-aws) 和 [Google Cloud 上设置 VPC Peering](#set-up-vpc-peering-on-google-cloud),并通过 VPC Peering 连接到 TiDB Cloud。 VPC Peering 连接是两个 VPC 之间的网络连接,使你能够使用私有 IP 地址在它们之间路由流量。任一 VPC 中的实例都可以像在同一网络中一样相互通信。 -目前,同一项目同一区域下的 TiDB 集群会创建在同一个 VPC 中。因此,一旦在某个项目的某个区域设置了 VPC Peering,该项目在同一区域内创建的所有 TiDB 集群都可以通过你的 VPC 进行连接。不同云服务商的 VPC Peering 设置方式有所不同。 +目前,同一项目下同一区域的 TiDB 集群会创建在同一个 VPC 中。因此,一旦在某个项目的某个区域设置了 VPC Peering,该项目在同一区域内创建的所有 TiDB 集群都可以通过你的 VPC 进行连接。不同云服务商的 VPC Peering 设置方式不同。 > **Tip:** > -> 你也可以通过与 TiDB Cloud 建立 [私有终端节点连接](/tidb-cloud/set-up-private-endpoint-connections.md) 来连接你的应用程序到 TiDB Cloud,该方式安全且私密,不会将你的数据暴露在公网。推荐优先使用私有终端节点而不是 VPC Peering 连接。 +> 你也可以通过与 TiDB Cloud 建立 [Private Endpoint 连接](/tidb-cloud/set-up-private-endpoint-connections.md) 来连接你的应用程序到 TiDB Cloud,这种方式安全且私有,不会将你的数据暴露在公网上。推荐优先使用 Private Endpoint 连接而不是 VPC Peering 连接。 ## 前置条件:为区域设置 CIDR @@ -36,16 +36,16 @@ CIDR(无类域间路由)是用于为 TiDB Cloud Dedicated 集群创建 VPC > **Note:** > - > - 为避免与你应用程序所在 VPC 的 CIDR 冲突,你需要在此字段设置不同的项目 CIDR。 + > - 为避免与你应用程序所在 VPC 的 CIDR 冲突,你需要在此字段中设置不同的项目 CIDR。 > - 对于 AWS 区域,建议配置 `/16` 到 `/23` 之间的 IP 范围。支持的网络地址包括: > - 10.250.0.0 - 10.251.255.255 > - 172.16.0.0 - 172.31.255.255 > - 192.168.0.0 - 192.168.255.255 - > - 对于 Google Cloud 区域,建议配置 `/19` 到 `/20` 之间的 IP 范围。如果你希望配置 `/16` 到 `/18` 之间的 IP 范围,请联系 [TiDB Cloud Support](/tidb-cloud/tidb-cloud-support.md)。支持的网络地址包括: + > - 对于 Google Cloud 区域,建议配置 `/19` 到 `/20` 之间的 IP 范围。支持的网络地址包括: > - 10.250.0.0 - 10.251.255.255 > - 172.16.0.0 - 172.17.255.255 > - 172.30.0.0 - 172.31.255.255 - > - TiDB Cloud 会根据区域 CIDR 块的大小限制该项目在该区域内的 TiDB Cloud 节点数量。 + > - TiDB Cloud 会根据区域的 CIDR 块大小限制该项目在该区域内的 TiDB Cloud 节点数量。 5. 查看云服务商及具体区域的 CIDR。 @@ -57,7 +57,7 @@ CIDR(无类域间路由)是用于为 TiDB Cloud Dedicated 集群创建 VPC 本节介绍如何在 AWS 上设置 VPC Peering 连接。关于 Google Cloud,请参见 [在 Google Cloud 上设置 VPC Peering](#set-up-vpc-peering-on-google-cloud)。 -### 步骤 1. 添加 VPC Peering 请求 +### 第 1 步:添加 VPC Peering 请求 你可以在 TiDB Cloud 控制台的项目级 **Network Access** 页面或集群级 **Networking** 页面添加 VPC Peering 请求。 @@ -118,7 +118,7 @@ CIDR(无类域间路由)是用于为 TiDB Cloud Dedicated 集群创建 VPC
-### 步骤 2. 审批并配置 VPC Peering +### 第 2 步:审批并配置 VPC Peering 你可以使用 AWS CLI 或 AWS 控制台来审批并配置 VPC Peering 连接。 @@ -182,7 +182,7 @@ CIDR(无类域间路由)是用于为 TiDB Cloud Dedicated 集群创建 VPC > **Note:** > - > 有时即使路由表规则已成功创建,你仍可能收到 `An error occurred (MissingParameter) when calling the CreateRoute operation: The request must contain the parameter routeTableId` 错误。此时你可以检查已创建的规则并忽略该错误。 + > 有时,即使路由表规则已成功创建,你仍可能收到 `An error occurred (MissingParameter) when calling the CreateRoute operation: The request must contain the parameter routeTableId` 错误。此时你可以检查已创建的规则并忽略该错误。 ```bash @@ -206,7 +206,7 @@ CIDR(无类域间路由)是用于为 TiDB Cloud Dedicated 集群创建 VPC 2. 在左侧导航栏,打开 **Peering Connections** 页面。在 **Create Peering Connection** 标签页下,Peering 连接状态为 **Pending Acceptance**。 - 3. 确认请求方所有者和请求方 VPC 与 [TiDB Cloud 控制台](https://tidbcloud.com) 的 **VPC Peering Details** 页面上的 **TiDB Cloud AWS Account ID** 和 **TiDB Cloud VPC ID** 匹配。右键点击该 Peering 连接,选择 **Accept Request**,在 **Accept VPC peering connection request** 对话框中接受请求。 + 3. 确认请求方所有者和请求方 VPC 与 [TiDB Cloud 控制台](https://tidbcloud.com) **VPC Peering Details** 页面上的 **TiDB Cloud AWS Account ID** 和 **TiDB Cloud VPC ID** 匹配。右键点击该 Peering 连接,选择 **Accept Request**,在 **Accept VPC peering connection request** 对话框中接受请求。 ![AWS VPC peering requests](/media/tidb-cloud/vpc-peering/aws-vpc-guide-3.png) @@ -214,7 +214,7 @@ CIDR(无类域间路由)是用于为 TiDB Cloud Dedicated 集群创建 VPC 1. 在左侧导航栏,打开 **Route Tables** 页面。 - 2. 搜索属于你应用程序 VPC 的所有路由表。 + 2. 搜索属于你的应用程序 VPC 的所有路由表。 ![Search all route tables related to VPC](/media/tidb-cloud/vpc-peering/aws-vpc-guide-4.png) @@ -230,9 +230,9 @@ CIDR(无类域间路由)是用于为 TiDB Cloud Dedicated 集群创建 VPC 3. 右键点击所选 VPC,显示设置下拉列表。 - 4. 在设置下拉列表中,点击 **Edit DNS hostnames**,启用 DNS hostnames 并点击 **Save**。 + 4. 在设置下拉列表中,点击 **Edit DNS hostnames**。启用 DNS hostnames 并点击 **Save**。 - 5. 在设置下拉列表中,点击 **Edit DNS resolution**,启用 DNS resolution 并点击 **Save**。 + 5. 在设置下拉列表中,点击 **Edit DNS resolution**。启用 DNS resolution 并点击 **Save**。 现在你已成功设置 VPC Peering 连接。接下来,[通过 VPC Peering 连接到 TiDB 集群](#connect-to-the-tidb-cluster)。 @@ -241,7 +241,7 @@ CIDR(无类域间路由)是用于为 TiDB Cloud Dedicated 集群创建 VPC ## 在 Google Cloud 上设置 VPC Peering -### 步骤 1. 添加 VPC Peering 请求 +### 第 1 步:添加 VPC Peering 请求 你可以在 TiDB Cloud 控制台的项目级 **Network Access** 页面或集群级 **Networking** 页面添加 VPC Peering 请求。 @@ -258,7 +258,7 @@ CIDR(无类域间路由)是用于为 TiDB Cloud Dedicated 集群创建 VPC > **Tip:** > - > 你可以按照 **Google Cloud Project ID** 和 **VPC Network Name** 字段旁的指引查找项目 ID 和 VPC 网络名称。 + > 你可以按照 **Google Cloud Project ID** 和 **VPC Network Name** 字段旁的说明查找项目 ID 和 VPC 网络名称。 - Google Cloud Project ID - VPC Network Name @@ -287,7 +287,7 @@ CIDR(无类域间路由)是用于为 TiDB Cloud Dedicated 集群创建 VPC > **Tip:** > - > 你可以按照 **Google Cloud Project ID** 和 **VPC Network Name** 字段旁的指引查找项目 ID 和 VPC 网络名称。 + > 你可以按照 **Google Cloud Project ID** 和 **VPC Network Name** 字段旁的说明查找项目 ID 和 VPC 网络名称。 - Google Cloud Project ID - VPC Network Name @@ -300,7 +300,7 @@ CIDR(无类域间路由)是用于为 TiDB Cloud Dedicated 集群创建 VPC -### 步骤 2. 审批 VPC Peering +### 第 2 步:审批 VPC Peering 执行以下命令完成 VPC Peering 的设置: @@ -322,6 +322,6 @@ gcloud beta compute networks peerings create --project + +1. 确保你拥有在自己的 AWS 账号中搭建 Kafka Private Link 服务的以下权限: - 管理 EC2 节点 - 管理 VPC @@ -31,228 +33,765 @@ aliases: ['/tidbcloud/setup-self-hosted-kafka-private-link-service'] - 管理安全组 - 管理负载均衡器 - 管理端点服务 - - 连接到 EC2 节点以配置 Kafka 节点 + - 连接 EC2 节点以配置 Kafka 节点 -2. 如果你还没有 TiDB Cloud Dedicated 集群,请[创建一个](/tidb-cloud/create-tidb-cluster.md)。 +2. 如果你还没有 TiDB Cloud Dedicated 集群,请[创建 TiDB Cloud Dedicated 集群](/tidb-cloud/create-tidb-cluster.md)。 3. 从你的 TiDB Cloud Dedicated 集群获取 Kafka 部署信息。 - 1. 在 [TiDB Cloud 控制台](https://tidbcloud.com)中,导航到 TiDB 集群的概览页面,然后在左侧导航栏中点击**数据** > **Changefeed**。 - 2. 在概览页面上,找到 TiDB 集群的区域。确保你的 Kafka 集群将部署在相同的区域。 - 3. 点击**创建 Changefeed**。 - 1. 在**目标**中,选择 **Kafka**。 - 2. 在**连接方式**中,选择 **Private Link**。 - 4. 记下**继续前的提醒**中的 TiDB Cloud AWS 账户信息。你将使用它来授权 TiDB Cloud 为 Kafka Private Link 服务创建端点。 - 5. 选择**可用区数量**。在本示例中,选择 **3 个可用区**。记下你想要部署 Kafka 集群的可用区的 ID。如果你想知道可用区名称和可用区 ID 之间的关系,请参见 [AWS 资源的可用区 ID](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html) 查找。 - 6. 为你的 Kafka Private Link 服务输入唯一的 **Kafka 广播监听器模式**。 - 1. 输入一个唯一的随机字符串。它只能包含数字或小写字母。你稍后将使用它来生成 **Kafka 广播监听器模式**。 - 2. 点击**检查使用情况并生成**以检查随机字符串是否唯一,并生成将用于组装 Kafka broker 的 EXTERNAL 广播监听器的 **Kafka 广播监听器模式**。 + 1. 在 [TiDB Cloud 控制台](https://tidbcloud.com)中,进入 TiDB 集群的集群总览页面,然后点击左侧导航栏的 **Data** > **Changefeed**。 + 2. 在总览页面,找到 TiDB 集群所在的 region。确保你的 Kafka 集群也部署在同一区域。 + 3. 点击 **Create Changefeed**。 + 1. 在 **Destination** 选择 **Kafka**。 + 2. 在 **Connectivity Method** 选择 **Private Link**。 + 4. 记下 **Reminders before proceeding** 中 TiDB Cloud AWS 账号的信息。你需要用它来授权 TiDB Cloud 创建 Kafka Private Link 服务的端点。 + 5. 选择 **Number of AZs**。本例选择 **3 AZs**。记下你希望部署 Kafka 集群的 AZ ID。如果你想了解 AZ 名称与 AZ ID 的对应关系,请参见 [Availability Zone IDs for your AWS resources](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html)。 + 6. 为你的 Kafka Private Link 服务输入唯一的 **Kafka Advertised Listener Pattern**。 + 1. 输入一个唯一的随机字符串,只能包含数字或小写字母。你将用它来生成 **Kafka Advertised Listener Pattern**。 + 2. 点击 **Check usage and generate** 检查该随机字符串是否唯一,并生成用于组装 Kafka broker EXTERNAL advertised listener 的 **Kafka Advertised Listener Pattern**。 + +
+ + +1. 确保你拥有在自己的 AWS 账号中搭建 Kafka Private Link 服务的以下权限: + + - 管理 EC2 节点 + - 管理 VPC + - 管理子网 + - 管理安全组 + - 管理负载均衡器 + - 管理端点服务 + - 连接 EC2 节点以配置 Kafka 节点 + +2. 如果你还没有 TiDB Cloud Premium 实例,请[创建 TiDB Cloud Premium 实例](/tidb-cloud/premium/create-tidb-instance-premium.md)。 + +3. 从你的 TiDB Cloud Premium 实例获取 Kafka 部署信息。 -记下所有部署信息。你稍后需要使用它来配置你的 Kafka Private Link 服务。 + 1. 在 [TiDB Cloud 控制台](https://tidbcloud.com)中,进入 TiDB 实例的实例总览页面,然后点击左侧导航栏的 **Data** > **Changefeed**。 + 2. 在总览页面,找到 TiDB 实例所在的 region。确保你的 Kafka 集群也部署在同一区域。 + 3. 如需创建 changefeed,请参考以下教程: -下表显示了部署信息的示例。 + - [Sink to Apache Kafka](/tidb-cloud/changefeed-sink-to-apache-kafka.md) -| 信息 | 值 | 注意 | + + +请记下所有部署信息,后续配置 Kafka Private Link 服务时需要用到。 + +下表为部署信息示例。 + +| 信息 | 值 | 备注 | |--------|-----------------|---------------------------| -| 区域 | Oregon (`us-west-2`) | 不适用 | -| TiDB Cloud AWS 账户的主体 | `arn:aws:iam:::root` | 不适用 | -| 可用区 ID |
  • `usw2-az1`
  • `usw2-az2`
  • `usw2-az3`
| 将可用区 ID 与你的 AWS 账户中的可用区名称对齐。
示例:
  • `usw2-az1` => `us-west-2a`
  • `usw2-az2` => `us-west-2c`
  • `usw2-az3` => `us-west-2b`
| -| Kafka 广播监听器模式 | 唯一随机字符串:`abc`
为可用区生成的模式:
  • `usw2-az1` => <broker_id>.usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
  • `usw2-az2` => <broker_id>.usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
  • `usw2-az3` => <broker_id>.usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
| 将可用区名称映射到可用区指定的模式。确保稍后将正确的模式配置到特定可用区中的 broker。
  • `us-west-2a` => <broker_id>.usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
  • `us-west-2c` => <broker_id>.usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
  • `us-west-2b` => <broker_id>.usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
| -## 步骤 1. 设置 Kafka 集群 +| Region | Oregon (`us-west-2`) | N/A | +| Principal of TiDB Cloud AWS Account | `arn:aws:iam:::root` | N/A | +| AZ IDs |
  • `usw2-az1`
  • `usw2-az2`
  • `usw2-az3`
| 将 AZ ID 与 AWS 账号中的 AZ 名称对应。
示例:
  • `usw2-az1` => `us-west-2a`
  • `usw2-az2` => `us-west-2c`
  • `usw2-az3` => `us-west-2b`
| +| Kafka Advertised Listener Pattern | 唯一随机字符串:`abc`
为各 AZ 生成的 pattern:
  • `usw2-az1` => <broker_id>.usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
  • `usw2-az2` => <broker_id>.usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
  • `usw2-az3` => <broker_id>.usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
| 将 AZ 名称映射到 AZ 专属 pattern。确保后续在特定 AZ 的 broker 上配置正确的 pattern。
  • `us-west-2a` => <broker_id>.usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
  • `us-west-2c` => <broker_id>.usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
  • `us-west-2b` => <broker_id>.usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:<port>
| -如果你需要部署新集群,请按照[部署新的 Kafka 集群](#部署新的-kafka-集群)中的说明操作。 +## 步骤 1. 搭建 Kafka 集群 -如果你需要暴露现有集群,请按照[重新配置运行中的 Kafka 集群](#重新配置运行中的-kafka-集群)中的说明操作。 +如果你需要部署新集群,请参考 [部署新 Kafka 集群](#deploy-a-new-kafka-cluster)。 -### 部署新的 Kafka 集群 +如果你需要暴露已有集群,请参考 [重配置运行中的 Kafka 集群](#reconfigure-a-running-kafka-cluster)。 -#### 1. 设置 Kafka VPC +### 部署新 Kafka 集群 -Kafka VPC 需要以下内容: +#### 1. 搭建 Kafka VPC -- 三个用于 broker 的私有子网,每个可用区一个。 -- 任意可用区中的一个公共子网,其中有一个堡垒节点,可以连接到互联网和三个私有子网,这使得设置 Kafka 集群变得容易。在生产环境中,你可能有自己的堡垒节点可以连接到 Kafka VPC。 +Kafka VPC 需要满足以下要求: -在创建子网之前,根据可用区 ID 和可用区名称的映射在可用区中创建子网。以下面的映射为例。 +- 为每个 AZ 分别创建三个 broker 专用私有子网。 +- 在任意 AZ 创建一个带有堡垒机节点的公有子网,该节点可连接互联网和三个私有子网,便于搭建 Kafka 集群。生产环境下你可以有自己的堡垒机节点连接 Kafka VPC。 + +在创建子网前,请根据 AZ ID 与 AZ 名称的映射关系创建子网。以如下映射为例: - `usw2-az1` => `us-west-2a` - `usw2-az2` => `us-west-2c` - `usw2-az3` => `us-west-2b` -在以下可用区中创建私有子网: +在以下 AZ 创建私有子网: - `us-west-2a` - `us-west-2c` - `us-west-2b` -按照以下步骤创建 Kafka VPC。 +按以下步骤创建 Kafka VPC。 **1.1. 创建 Kafka VPC** -1. 转到 [AWS 控制台 > VPC 仪表板](https://console.aws.amazon.com/vpcconsole/home?#vpcs:),并切换到要部署 Kafka 的区域。 +1. 进入 [AWS 控制台 > VPC 控制面板](https://console.aws.amazon.com/vpcconsole/home?#vpcs:),切换到你希望部署 Kafka 的 region。 -2. 点击**创建 VPC**。在 **VPC 设置**页面上填写以下信息。 +2. 点击 **Create VPC**,在 **VPC settings** 页面填写如下信息: - 1. 选择**仅 VPC**。 - 2. 在**名称标签**中输入标签,例如 `Kafka VPC`。 - 3. 选择 **IPv4 CIDR 手动输入**,并输入 IPv4 CIDR,例如 `10.0.0.0/16`。 - 4. 其他选项使用默认值。点击**创建 VPC**。 - 5. 在 VPC 详细信息页面上,记下 VPC ID,例如 `vpc-01f50b790fa01dffa`。 + 1. 选择 **VPC only**。 + 2. 在 **Name tag** 输入标签,例如 `Kafka VPC`。 + 3. 选择 **IPv4 CIDR manual input**,输入 IPv4 CIDR,例如 `10.0.0.0/16`。 + 4. 其他选项保持默认,点击 **Create VPC**。 + 5. 在 VPC 详情页记下 VPC ID,例如 `vpc-01f50b790fa01dffa`。 **1.2. 在 Kafka VPC 中创建私有子网** -1. 转到[子网列表页面](https://console.aws.amazon.com/vpcconsole/home?#subnets:)。 -2. 点击**创建子网**。 -3. 选择之前记下的 **VPC ID**(在本例中为 `vpc-01f50b790fa01dffa`)。 -4. 使用以下信息添加三个子网。建议在子网名称中加入可用区 ID,以便稍后配置 broker 更容易,因为 TiDB Cloud 要求在 broker 的 `advertised.listener` 配置中编码可用区 ID。 +1. 进入 [Subnets 列表页面](https://console.aws.amazon.com/vpcconsole/home?#subnets:)。 +2. 点击 **Create subnet**。 +3. 选择之前记下的 **VPC ID**(本例为 `vpc-01f50b790fa01dffa`)。 +4. 添加三个子网,建议在子网名称中包含 AZ ID,便于后续配置 broker,因为 TiDB Cloud 要求在 broker 的 `advertised.listener` 配置中编码 AZ ID。 - - 在 `us-west-2a` 中的子网 1 - - **子网名称**:`broker-usw2-az1` - - **可用区**:`us-west-2a` - - **IPv4 子网 CIDR 块**:`10.0.0.0/18` + - `us-west-2a` 的子网 + - **Subnet name**: `broker-usw2-az1` + - **Availability Zone**: `us-west-2a` + - **IPv4 subnet CIDR block**: `10.0.0.0/18` - - 在 `us-west-2c` 中的子网 2 - - **子网名称**:`broker-usw2-az2` - - **可用区**:`us-west-2c` - - **IPv4 子网 CIDR 块**:`10.0.64.0/18` + - `us-west-2c` 的子网 + - **Subnet name**: `broker-usw2-az2` + - **Availability Zone**: `us-west-2c` + - **IPv4 subnet CIDR block**: `10.0.64.0/18` - - 在 `us-west-2b` 中的子网 3 - - **子网名称**:`broker-usw2-az3` - - **可用区**:`us-west-2b` - - **IPv4 子网 CIDR 块**:`10.0.128.0/18` + - `us-west-2b` 的子网 + - **Subnet name**: `broker-usw2-az3` + - **Availability Zone**: `us-west-2b` + - **IPv4 subnet CIDR block**: `10.0.128.0/18` -5. 点击**创建子网**。显示**子网列表**页面。 +5. 点击 **Create subnet**,进入 **Subnets Listing** 页面。 -**1.3. 在 Kafka VPC 中创建公共子网** +**1.3. 在 Kafka VPC 中创建公有子网** -1. 点击**创建子网**。 -2. 选择之前记下的 **VPC ID**(在本例中为 `vpc-01f50b790fa01dffa`)。 -3. 使用以下信息在任意可用区中添加公共子网: +1. 点击 **Create subnet**。 +2. 选择之前记下的 **VPC ID**(本例为 `vpc-01f50b790fa01dffa`)。 +3. 在任意 AZ 添加公有子网,填写如下信息: - - **子网名称**:`bastion` - - **IPv4 子网 CIDR 块**:`10.0.192.0/18` + - **Subnet name**: `bastion` + - **IPv4 subnet CIDR block**: `10.0.192.0/18` -4. 将堡垒子网配置为公共子网。 +4. 将 bastion 子网配置为公有子网。 - 1. 转到 [VPC 仪表板 > 互联网网关](https://console.aws.amazon.com/vpcconsole/home#igws:)。创建一个名为 `kafka-vpc-igw` 的互联网网关。 - 2. 在**互联网网关详细信息**页面上,在**操作**中,点击**连接到 VPC** 将互联网网关连接到 Kafka VPC。 - 3. 转到 [VPC 仪表板 > 路由表](https://console.aws.amazon.com/vpcconsole/home#CreateRouteTable:)。在 Kafka VPC 中创建一个到互联网网关的路由表,并添加一个具有以下信息的新路由: + 1. 进入 [VPC 控制台 > Internet gateways](https://console.aws.amazon.com/vpcconsole/home#igws:),创建名为 `kafka-vpc-igw` 的 Internet Gateway。 + 2. 在 **Internet gateways Detail** 页面,点击 **Actions** 下的 **Attach to VPC**,将 Internet Gateway 绑定到 Kafka VPC。 + 3. 进入 [VPC 控制台 > Route tables](https://console.aws.amazon.com/vpcconsole/home#CreateRouteTable:),在 Kafka VPC 中创建路由表并添加如下路由: - - **名称**:`kafka-vpc-igw-route-table` - - **VPC**:`Kafka VPC` - - **路由**: - - **目标**:`0.0.0.0/0` - - **目标**:`互联网网关`,`kafka-vpc-igw` + - **Name**: `kafka-vpc-igw-route-table` + - **VPC**: `Kafka VPC` + - **Route**: + - **Destination**: `0.0.0.0/0` + - **Target**: `Internet Gateway`, `kafka-vpc-igw` - 4. 将路由表附加到堡垒子网。在路由表的**详细信息**页面上,点击**子网关联** > **编辑子网关联**以添加堡垒子网并保存更改。 + 4. 将路由表关联到 bastion 子网。在路由表详情页点击 **Subnet associations > Edit subnet associations**,添加 bastion 子网并保存。 -#### 2. 设置 Kafka broker +#### 2. 搭建 Kafka broker -**2.1. 创建堡垒节点** +**2.1. 创建堡垒机节点** -转到 [EC2 列表页面](https://console.aws.amazon.com/ec2/home#Instances:)。在堡垒子网中创建堡垒节点。 +进入 [EC2 列表页面](https://console.aws.amazon.com/ec2/home#Instances:),在 bastion 子网中创建堡垒机节点。 -- **名称**:`bastion-node` -- **Amazon 机器映像**:`Amazon linux` -- **实例类型**:`t2.small` -- **密钥对**:`kafka-vpc-key-pair`。创建一个名为 `kafka-vpc-key-pair` 的新密钥对。将 **kafka-vpc-key-pair.pem** 下载到本地以供稍后配置。 +- **Name**: `bastion-node` +- **Amazon Machine Image**: `Amazon linux` +- **Instance Type**: `t2.small` +- **Key pair**: `kafka-vpc-key-pair`。新建名为 `kafka-vpc-key-pair` 的密钥对,并下载 **kafka-vpc-key-pair.pem** 以便后续配置。 - 网络设置 - - **VPC**:`Kafka VPC` - - **子网**:`bastion` - - **自动分配公共 IP**:`启用` - - **安全组**:创建一个新的安全组,允许从任何地方进行 SSH 登录。在生产环境中,你可以为了安全起见缩小规则范围。 + - **VPC**: `Kafka VPC` + - **Subnet**: `bastion` + - **Auto-assign public IP**: `Enable` + - **Security Group**: 新建安全组,允许任意来源 SSH 登录。生产环境下可收紧规则以提升安全性。 **2.2. 创建 broker 节点** -转到 [EC2 列表页面](https://console.aws.amazon.com/ec2/home#Instances:)。在 broker 子网中创建三个 broker 节点,每个可用区一个。 +进入 [EC2 列表页面](https://console.aws.amazon.com/ec2/home#Instances:),在各 broker 子网中分别创建三个 broker 节点,每个 AZ 一个。 -- 在子网 `broker-usw2-az1` 中的 Broker 1 +- `broker-usw2-az1` 子网的 Broker 1 - - **名称**:`broker-node1` - - **Amazon 机器映像**:`Amazon linux` - - **实例类型**:`t2.large` - - **密钥对**:重用 `kafka-vpc-key-pair` + - **Name**: `broker-node1` + - **Amazon Machine Image**: `Amazon linux` + - **Instance Type**: `t2.large` + - **Key pair**: 复用 `kafka-vpc-key-pair` - 网络设置 - - **VPC**:`Kafka VPC` - - **子网**:`broker-usw2-az1` - - **自动分配公共 IP**:`禁用` - - **安全组**:创建一个新的安全组,允许来自 Kafka VPC 的所有 TCP。在生产环境中,你可以为了安全起见缩小规则范围。 - - **协议**:`TCP` - - **端口范围**:`0 - 65535` - - **源**:`10.0.0.0/16` + - **VPC**: `Kafka VPC` + - **Subnet**: `broker-usw2-az1` + - **Auto-assign public IP**: `Disable` + - **Security Group**: 新建安全组,允许来自 Kafka VPC 的所有 TCP。生产环境下可收紧规则。 + - **Protocol**: `TCP` + - **Port range**: `0 - 65535` + - **Source**: `10.0.0.0/16` -- 在子网 `broker-usw2-az2` 中的 Broker 2 +- `broker-usw2-az2` 子网的 Broker 2 - - **名称**:`broker-node2` - - **Amazon 机器映像**:`Amazon linux` - - **实例类型**:`t2.large` - - **密钥对**:重用 `kafka-vpc-key-pair` + - **Name**: `broker-node2` + - **Amazon Machine Image**: `Amazon linux` + - **Instance Type**: `t2.large` + - **Key pair**: 复用 `kafka-vpc-key-pair` - 网络设置 - - **VPC**:`Kafka VPC` - - **子网**:`broker-usw2-az2` - - **自动分配公共 IP**:`禁用` - - **安全组**:创建一个新的安全组,允许来自 Kafka VPC 的所有 TCP。在生产环境中,你可以为了安全起见缩小规则范围。 - - **协议**:`TCP` - - **端口范围**:`0 - 65535` - - **源**:`10.0.0.0/16` + - **VPC**: `Kafka VPC` + - **Subnet**: `broker-usw2-az2` + - **Auto-assign public IP**: `Disable` + - **Security Group**: 新建安全组,允许来自 Kafka VPC 的所有 TCP。生产环境下可收紧规则。 + - **Protocol**: `TCP` + - **Port range**: `0 - 65535` + - **Source**: `10.0.0.0/16` -- 在子网 `broker-usw2-az3` 中的 Broker 3 +- `broker-usw2-az3` 子网的 Broker 3 - - **名称**:`broker-node3` - - **Amazon 机器映像**:`Amazon linux` - - **实例类型**:`t2.large` - - **密钥对**:重用 `kafka-vpc-key-pair` + - **Name**: `broker-node3` + - **Amazon Machine Image**: `Amazon linux` + - **Instance Type**: `t2.large` + - **Key pair**: 复用 `kafka-vpc-key-pair` - 网络设置 - - **VPC**:`Kafka VPC` - - **子网**:`broker-usw2-az3` - - **自动分配公共 IP**:`禁用` - - **安全组**:创建一个新的安全组,允许来自 Kafka VPC 的所有 TCP。在生产环境中,你可以为了安全起见缩小规则范围。 - - **协议**:`TCP` - - **端口范围**:`0 - 65535` - - **源**:`10.0.0.0/16` + - **VPC**: `Kafka VPC` + - **Subnet**: `broker-usw2-az3` + - **Auto-assign public IP**: `Disable` + - **Security Group**: 新建安全组,允许来自 Kafka VPC 的所有 TCP。生产环境下可收紧规则。 + - **Protocol**: `TCP` + - **Port range**: `0 - 65535` + - **Source**: `10.0.0.0/16` **2.3. 准备 Kafka 运行时二进制文件** -1. 转到堡垒节点的详细信息页面。获取**公共 IPv4 地址**。使用之前下载的 `kafka-vpc-key-pair.pem` 通过 SSH 登录到节点。 +1. 进入堡垒机节点详情页,获取 **Public IPv4 address**。使用 SSH 登录该节点,并用之前下载的 `kafka-vpc-key-pair.pem`。 ```shell chmod 400 kafka-vpc-key-pair.pem - ssh -i "kafka-vpc-key-pair.pem" ec2-user@{bastion_public_ip} # 将 {bastion_public_ip} 替换为你的堡垒节点的 IP 地址,例如 54.186.149.187 + ssh -i "kafka-vpc-key-pair.pem" ec2-user@{bastion_public_ip} # 将 {bastion_public_ip} 替换为你的堡垒机节点 IP,例如 54.186.149.187 scp -i "kafka-vpc-key-pair.pem" kafka-vpc-key-pair.pem ec2-user@{bastion_public_ip}:~/ ``` 2. 下载二进制文件。 ```shell - # 下载 Kafka 和 OpenJDK,然后解压文件。你可以根据自己的偏好选择二进制版本。 + # 下载 Kafka 和 OpenJDK 并解压。你可以根据需要选择二进制版本。 wget https://archive.apache.org/dist/kafka/3.7.1/kafka_2.13-3.7.1.tgz tar -zxf kafka_2.13-3.7.1.tgz wget https://download.java.net/java/GA/jdk22.0.2/c9ecb94cd31b495da20a27d4581645e8/9/GPL/openjdk-22.0.2_linux-x64_bin.tar.gz tar -zxf openjdk-22.0.2_linux-x64_bin.tar.gz ``` -3. 将二进制文件复制到每个 broker 节点。 +3. 将二进制文件拷贝到每个 broker 节点。 ```shell - # 将 {broker-node1-ip} 替换为你的 broker-node1 IP 地址 + # 将 {broker-node1-ip} 替换为你的 broker-node1 IP scp -i "kafka-vpc-key-pair.pem" kafka_2.13-3.7.1.tgz ec2-user@{broker-node1-ip}:~/ ssh -i "kafka-vpc-key-pair.pem" ec2-user@{broker-node1-ip} "tar -zxf kafka_2.13-3.7.1.tgz" scp -i "kafka-vpc-key-pair.pem" openjdk-22.0.2_linux-x64_bin.tar.gz ec2-user@{broker-node1-ip}:~/ ssh -i "kafka-vpc-key-pair.pem" ec2-user@{broker-node1-ip} "tar -zxf openjdk-22.0.2_linux-x64_bin.tar.gz" - # 将 {broker-node2-ip} 替换为你的 broker-node2 IP 地址 + # 将 {broker-node2-ip} 替换为你的 broker-node2 IP scp -i "kafka-vpc-key-pair.pem" kafka_2.13-3.7.1.tgz ec2-user@{broker-node2-ip}:~/ ssh -i "kafka-vpc-key-pair.pem" ec2-user@{broker-node2-ip} "tar -zxf kafka_2.13-3.7.1.tgz" scp -i "kafka-vpc-key-pair.pem" openjdk-22.0.2_linux-x64_bin.tar.gz ec2-user@{broker-node2-ip}:~/ ssh -i "kafka-vpc-key-pair.pem" ec2-user@{broker-node2-ip} "tar -zxf openjdk-22.0.2_linux-x64_bin.tar.gz" - # 将 {broker-node3-ip} 替换为你的 broker-node3 IP 地址 + # 将 {broker-node3-ip} 替换为你的 broker-node3 IP scp -i "kafka-vpc-key-pair.pem" kafka_2.13-3.7.1.tgz ec2-user@{broker-node3-ip}:~/ ssh -i "kafka-vpc-key-pair.pem" ec2-user@{broker-node3-ip} "tar -zxf kafka_2.13-3.7.1.tgz" scp -i "kafka-vpc-key-pair.pem" openjdk-22.0.2_linux-x64_bin.tar.gz ec2-user@{broker-node3-ip}:~/ ssh -i "kafka-vpc-key-pair.pem" ec2-user@{broker-node3-ip} "tar -zxf openjdk-22.0.2_linux-x64_bin.tar.gz" ``` + +**2.4. 在每个 broker 节点上搭建 Kafka 节点** + +**2.4.1 搭建三节点 KRaft Kafka 集群** + +每个节点同时作为 broker 和 controller。对每个 broker 执行以下操作: + +1. 对于 `listeners` 配置项,所有三个 broker 都相同,均作为 broker 和 controller 角色: + + 1. 对所有 **controller** 角色节点配置相同的 CONTROLLER listener。如果只添加 **broker** 角色节点,则无需在 `server.properties` 中配置 CONTROLLER listener。 + 2. 配置两个 **broker** listener,`INTERNAL` 用于内部访问,`EXTERNAL` 用于 TiDB Cloud 的外部访问。 + +2. 对于 `advertised.listeners` 配置项,操作如下: + + 1. 为每个 broker 配置 INTERNAL advertised listener,使用 broker 节点的内网 IP。内部 Kafka 客户端通过该地址访问 broker。 + 2. 为每个 broker 节点配置基于 TiDB Cloud 获取的 **Kafka Advertised Listener Pattern** 的 EXTERNAL advertised listener,帮助 TiDB Cloud 区分不同 broker。不同的 EXTERNAL advertised listener 使 TiDB Cloud 的 Kafka 客户端能够路由到正确的 broker。 + + - `` 用于区分来自 Kafka Private Link Service 访问点的不同 broker。为所有 broker 的 EXTERNAL advertised listener 规划一个端口区间。这些端口不必是 broker 实际监听的端口,而是 Private Link Service 负载均衡器监听的端口,会转发到不同 broker。 + - **Kafka Advertised Listener Pattern** 中的 `AZ ID` 表示 broker 部署的可用区。TiDB Cloud 会根据 AZ ID 路由到不同的端点 DNS 名称。 + + 建议为不同 broker 配置不同的 broker ID,便于排查问题。 + +3. 规划值如下: + + - **CONTROLLER 端口**:`29092` + - **INTERNAL 端口**:`9092` + - **EXTERNAL**:`39092` + - **EXTERNAL advertised listener 端口区间**:`9093~9095` + +**2.4.2. 创建配置文件** + +使用 SSH 登录每个 broker 节点,创建配置文件 `~/config/server.properties`,内容如下。 + +```properties +# brokers in usw2-az1 + +# broker-node1 ~/config/server.properties +# 1. 将 {broker-node1-ip}, {broker-node2-ip}, {broker-node3-ip} 替换为实际 IP。 +# 2. 按 "前置条件" 部分的 "Kafka Advertised Listener Pattern" 配置 "advertised.listeners" 中的 EXTERNAL。 +# 2.1 AZ(ID: usw2-az1) 的 pattern 是 ".usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:"。 +# 2.2 所以 EXTERNAL 可以为 "b1.usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:9093"。 用 "b" 前缀加 "node.id", 用 EXTERNAL advertised listener 端口区间内唯一端口(9093)。 +# 2.3 如果同一 AZ 有更多 broker 角色节点,也可同样配置。 +process.roles=broker,controller +node.id=1 +controller.quorum.voters=1@{broker-node1-ip}:29092,2@{broker-node2-ip}:29092,3@{broker-node3-ip}:29092 +listeners=INTERNAL://0.0.0.0:9092,CONTROLLER://0.0.0.0:29092,EXTERNAL://0.0.0.0:39092 +inter.broker.listener.name=INTERNAL +advertised.listeners=INTERNAL://{broker-node1-ip}:9092,EXTERNAL://b1.usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:9093 +controller.listener.names=CONTROLLER +listener.security.protocol.map=INTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL +log.dirs=./data +``` + +```properties +# brokers in usw2-az2 + +# broker-node2 ~/config/server.properties +# 1. 将 {broker-node1-ip}, {broker-node2-ip}, {broker-node3-ip} 替换为实际 IP。 +# 2. 按 "前置条件" 部分的 "Kafka Advertised Listener Pattern" 配置 "advertised.listeners" 中的 EXTERNAL。 +# 2.1 AZ(ID: usw2-az2) 的 pattern 是 ".usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:"。 +# 2.2 所以 EXTERNAL 可以为 "b2.usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:9094"。 用 "b" 前缀加 "node.id", 用 EXTERNAL advertised listener 端口区间内唯一端口(9094)。 +# 2.3 如果同一 AZ 有更多 broker 角色节点,也可同样配置。 +process.roles=broker,controller +node.id=2 +controller.quorum.voters=1@{broker-node1-ip}:29092,2@{broker-node2-ip}:29092,3@{broker-node3-ip}:29092 +listeners=INTERNAL://0.0.0.0:9092,CONTROLLER://0.0.0.0:29092,EXTERNAL://0.0.0.0:39092 +inter.broker.listener.name=INTERNAL +advertised.listeners=INTERNAL://{broker-node2-ip}:9092,EXTERNAL://b2.usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:9094 +controller.listener.names=CONTROLLER +listener.security.protocol.map=INTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL +log.dirs=./data +``` + +```properties +# brokers in usw2-az3 + +# broker-node3 ~/config/server.properties +# 1. 将 {broker-node1-ip}, {broker-node2-ip}, {broker-node3-ip} 替换为实际 IP。 +# 2. 按 "前置条件" 部分的 "Kafka Advertised Listener Pattern" 配置 "advertised.listeners" 中的 EXTERNAL。 +# 2.1 AZ(ID: usw2-az3) 的 pattern 是 ".usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:"。 +# 2.2 所以 EXTERNAL 可以为 "b3.usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:9095"。 用 "b" 前缀加 "node.id", 用 EXTERNAL advertised listener 端口区间内唯一端口(9095)。 +# 2.3 如果同一 AZ 有更多 broker 角色节点,也可同样配置。 +process.roles=broker,controller +node.id=3 +controller.quorum.voters=1@{broker-node1-ip}:29092,2@{broker-node2-ip}:29092,3@{broker-node3-ip}:29092 +listeners=INTERNAL://0.0.0.0:9092,CONTROLLER://0.0.0.0:29092,EXTERNAL://0.0.0.0:39092 +inter.broker.listener.name=INTERNAL +advertised.listeners=INTERNAL://{broker-node3-ip}:9092,EXTERNAL://b3.usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:9095 +controller.listener.names=CONTROLLER +listener.security.protocol.map=INTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL +log.dirs=./data +``` + +**2.4.3 启动 Kafka broker** + +创建脚本并在每个 broker 节点执行以启动 Kafka broker。 + +```shell +#!/bin/bash + +# 获取当前脚本目录 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +# 设置 JAVA_HOME +export JAVA_HOME="$SCRIPT_DIR/jdk-22.0.2" +# 定义变量 +KAFKA_DIR="$SCRIPT_DIR/kafka_2.13-3.7.1/bin" +KAFKA_STORAGE_CMD=$KAFKA_DIR/kafka-storage.sh +KAFKA_START_CMD=$KAFKA_DIR/kafka-server-start.sh +KAFKA_DATA_DIR=$SCRIPT_DIR/data +KAFKA_LOG_DIR=$SCRIPT_DIR/log +KAFKA_CONFIG_DIR=$SCRIPT_DIR/config + +# 清理步骤,便于多次实验 +# 查找所有 Kafka 进程 +KAFKA_PIDS=$(ps aux | grep 'kafka.Kafka' | grep -v grep | awk '{print $2}') +if [ -z "$KAFKA_PIDS" ]; then + echo "No Kafka processes are running." +else + # 杀死每个 Kafka 进程 + echo "Killing Kafka processes with PIDs: $KAFKA_PIDS" + for PID in $KAFKA_PIDS; do + kill -9 $PID + echo "Killed Kafka process with PID: $PID" + done + echo "All Kafka processes have been killed." +fi + +rm -rf $KAFKA_DATA_DIR +mkdir -p $KAFKA_DATA_DIR +rm -rf $KAFKA_LOG_DIR +mkdir -p $KAFKA_LOG_DIR + +# Magic id: BRl69zcmTFmiPaoaANybiw, 你可以自定义 +$KAFKA_STORAGE_CMD format -t "BRl69zcmTFmiPaoaANybiw" -c "$KAFKA_CONFIG_DIR/server.properties" > $KAFKA_LOG_DIR/server_format.log +LOG_DIR=$KAFKA_LOG_DIR nohup $KAFKA_START_CMD "$KAFKA_CONFIG_DIR/server.properties" & +``` + +**2.5. 在堡垒机节点测试集群设置** + +1. 测试 Kafka bootstrap。 + + ```shell + export JAVA_HOME=/home/ec2-user/jdk-22.0.2 + + # 从 INTERNAL listener 启动 + ./kafka_2.13-3.7.1/bin/kafka-broker-api-versions.sh --bootstrap-server {one_of_broker_ip}:9092 | grep 9092 + # 期望输出(实际顺序可能不同) + {broker-node1-ip}:9092 (id: 1 rack: null) -> ( + {broker-node2-ip}:9092 (id: 2 rack: null) -> ( + {broker-node3-ip}:9092 (id: 3 rack: null) -> ( + + # 从 EXTERNAL listener 启动 + ./kafka_2.13-3.7.1/bin/kafka-broker-api-versions.sh --bootstrap-server {one_of_broker_ip}:39092 + # 最后 3 行期望输出(实际顺序可能不同) + # 与 "从 INTERNAL listener 启动" 的区别在于,因 advertised listener 在 Kafka VPC 内无法解析,可能出现异常或错误。 + # 我们会在 TiDB Cloud 侧使其可解析,并在你通过 Private Link 创建 changefeed 连接该 Kafka 集群时路由到正确的 broker。 + b1.usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:9093 (id: 1 rack: null) -> ERROR: org.apache.kafka.common.errors.DisconnectException + b2.usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:9094 (id: 2 rack: null) -> ERROR: org.apache.kafka.common.errors.DisconnectException + b3.usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:9095 (id: 3 rack: null) -> ERROR: org.apache.kafka.common.errors.DisconnectException + ``` + +2. 在堡垒机节点创建生产者脚本 `produce.sh`。 + + ```shell + #!/bin/bash + BROKER_LIST=$1 # "{broker_address1},{broker_address2}..." + + # 获取当前脚本目录 + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + # 设置 JAVA_HOME + export JAVA_HOME="$SCRIPT_DIR/jdk-22.0.2" + # 定义 Kafka 目录 + KAFKA_DIR="$SCRIPT_DIR/kafka_2.13-3.7.1/bin" + TOPIC="test-topic" + + # 如果不存在则创建 topic + create_topic() { + echo "Creating topic if it does not exist..." + $KAFKA_DIR/kafka-topics.sh --create --topic $TOPIC --bootstrap-server $BROKER_LIST --if-not-exists --partitions 3 --replication-factor 3 + } + + # 向 topic 生产消息 + produce_messages() { + echo "Producing messages to the topic..." + for ((chrono=1; chrono <= 10; chrono++)); do + message="Test message "$chrono + echo "Create "$message + echo $message | $KAFKA_DIR/kafka-console-producer.sh --broker-list $BROKER_LIST --topic $TOPIC + done + } + create_topic + produce_messages + ``` + +3. 在堡垒机节点创建消费者脚本 `consume.sh`。 + + ```shell + #!/bin/bash + + BROKER_LIST=$1 # "{broker_address1},{broker_address2}..." + + # 获取当前脚本目录 + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + # 设置 JAVA_HOME + export JAVA_HOME="$SCRIPT_DIR/jdk-22.0.2" + # 定义 Kafka 目录 + KAFKA_DIR="$SCRIPT_DIR/kafka_2.13-3.7.1/bin" + TOPIC="test-topic" + CONSUMER_GROUP="test-group" + # 从 topic 消费消息 + consume_messages() { + echo "Consuming messages from the topic..." + $KAFKA_DIR/kafka-console-consumer.sh --bootstrap-server $BROKER_LIST --topic $TOPIC --from-beginning --timeout-ms 5000 --consumer-property group.id=$CONSUMER_GROUP + } + consume_messages + ``` + +4. 执行 `produce.sh` 和 `consume.sh` 验证 Kafka 集群运行正常。这些脚本也会用于后续网络连通性测试。脚本会用 `--partitions 3 --replication-factor 3` 创建 topic,确保三台 broker 都有数据。确保脚本会连接所有三台 broker,以保证网络连通性被测试到。 + + ```shell + # 测试写消息 + ./produce.sh {one_of_broker_ip}:9092 + ``` + + ```shell + # 期望输出 + Creating topic if it does not exist... + + Producing messages to the topic... + Create Test message 1 + >>Create Test message 2 + >>Create Test message 3 + >>Create Test message 4 + >>Create Test message 5 + >>Create Test message 6 + >>Create Test message 7 + >>Create Test message 8 + >>Create Test message 9 + >>Create Test message 10 + ``` + + ```shell + # 测试读消息 + ./consume.sh {one_of_broker_ip}:9092 + ``` + + ```shell + # 期望输出示例(实际消息顺序可能不同) + Consuming messages from the topic... + Test message 3 + Test message 4 + Test message 5 + Test message 9 + Test message 10 + Test message 6 + Test message 8 + Test message 1 + Test message 2 + Test message 7 + [2024-11-01 08:54:27,547] ERROR Error processing message, terminating consumer process: (kafka.tools.ConsoleConsumer$) + org.apache.kafka.common.errors.TimeoutException + Processed a total of 10 messages + ``` + +### 重配置运行中的 Kafka 集群 + + + +确保你的 Kafka 集群部署在与 TiDB 集群相同的 region 和 AZ。如果有 broker 在不同 AZ,请将其迁移到正确的 AZ。 + + + + +确保你的 Kafka 集群部署在与 TiDB 实例相同的 region 和 AZ。如果有 broker 在不同 AZ,请将其迁移到正确的 AZ。 + + + +#### 1. 为 broker 配置 EXTERNAL listener + +以下配置适用于 Kafka KRaft 集群。ZK 模式配置类似。 + +1. 规划配置变更。 + + 1. 为每个 broker 配置 EXTERNAL **listener**,用于 TiDB Cloud 的外部访问。选择唯一端口作为 EXTERNAL 端口,例如 `39092`。 + 2. 为每个 broker 节点配置基于 TiDB Cloud 获取的 **Kafka Advertised Listener Pattern** 的 EXTERNAL **advertised listener**,帮助 TiDB Cloud 区分不同 broker。不同的 EXTERNAL advertised listener 使 TiDB Cloud 的 Kafka 客户端能够路由到正确的 broker。 + + - `` 用于区分来自 Kafka Private Link Service 访问点的不同 broker。为所有 broker 的 EXTERNAL advertised listener 规划一个端口区间,例如从 `9093` 开始。这些端口不必是 broker 实际监听的端口,而是 Private Link Service 负载均衡器监听的端口,会转发到不同 broker。 + - **Kafka Advertised Listener Pattern** 中的 `AZ ID` 表示 broker 部署的可用区。TiDB Cloud 会根据 AZ ID 路由到不同的端点 DNS 名称。 + + 建议为不同 broker 配置不同的 broker ID,便于排查问题。 + +2. 使用 SSH 登录每个 broker 节点,修改每个 broker 的配置文件如下: + + ```properties + # brokers in usw2-az1 + + # 添加 EXTERNAL listener + listeners=INTERNAL:...,EXTERNAL://0.0.0.0:39092 + + # 按 "前置条件" 部分的 "Kafka Advertised Listener Pattern" 添加 EXTERNAL advertised listeners + # 1. AZ(ID: usw2-az1) 的 pattern 是 ".usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:" + # 2. 所以 EXTERNAL 可以为 "b1.usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:9093", 用 "b" 前缀加 "node.id", 用 EXTERNAL advertised listener 端口区间内唯一端口(9093) + advertised.listeners=...,EXTERNAL://b1.usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:9093 + + # 配置 EXTERNAL map + listener.security.protocol.map=...,EXTERNAL:PLAINTEXT + ``` + + ```properties + # brokers in usw2-az2 + + # 添加 EXTERNAL listener + listeners=INTERNAL:...,EXTERNAL://0.0.0.0:39092 + + # 按 "前置条件" 部分的 "Kafka Advertised Listener Pattern" 添加 EXTERNAL advertised listeners + # 1. AZ(ID: usw2-az2) 的 pattern 是 ".usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:" + # 2. 所以 EXTERNAL 可以为 "b2.usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:9094", 用 "b" 前缀加 "node.id", 用 EXTERNAL advertised listener 端口区间内唯一端口(9094) + advertised.listeners=...,EXTERNAL://b2.usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:9094 + + # 配置 EXTERNAL map + listener.security.protocol.map=...,EXTERNAL:PLAINTEXT + ``` + + ```properties + # brokers in usw2-az3 + + # 添加 EXTERNAL listener + listeners=INTERNAL:...,EXTERNAL://0.0.0.0:39092 + + # 按 "前置条件" 部分的 "Kafka Advertised Listener Pattern" 添加 EXTERNAL advertised listeners + # 1. AZ(ID: usw2-az3) 的 pattern 是 ".usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:" + # 2. 所以 EXTERNAL 可以为 "b2.usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:9095", 用 "b" 前缀加 "node.id", 用 EXTERNAL advertised listener 端口区间内唯一端口(9095) + advertised.listeners=...,EXTERNAL://b3.usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:9095 + + # 配置 EXTERNAL map + listener.security.protocol.map=...,EXTERNAL:PLAINTEXT + ``` + +3. 重新配置所有 broker 后,依次重启你的 Kafka broker。 + +#### 2. 在内网测试 EXTERNAL listener 设置 + +你可以在 Kafka 客户端节点下载 Kafka 和 OpenJDK。 + +```shell +# 下载 Kafka 和 OpenJDK 并解压。你可以根据需要选择二进制版本。 +wget https://archive.apache.org/dist/kafka/3.7.1/kafka_2.13-3.7.1.tgz +tar -zxf kafka_2.13-3.7.1.tgz +wget https://download.java.net/java/GA/jdk22.0.2/c9ecb94cd31b495da20a27d4581645e8/9/GPL/openjdk-22.0.2_linux-x64_bin.tar.gz +tar -zxf openjdk-22.0.2_linux-x64_bin.tar.gz +``` + +执行以下脚本测试 bootstrap 是否正常。 + +```shell +export JAVA_HOME=/home/ec2-user/jdk-22.0.2 + +# 从 EXTERNAL listener 启动 +./kafka_2.13-3.7.1/bin/kafka-broker-api-versions.sh --bootstrap-server {one_of_broker_ip}:39092 + +# 最后 3 行期望输出(实际顺序可能不同) +# 因为 advertised listener 在你的 Kafka 网络内无法解析,会有一些异常或错误。 +# 我们会在 TiDB Cloud 侧使其可解析,并在你通过 Private Link 创建 changefeed 连接该 Kafka 集群时路由到正确的 broker。 +b1.usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:9093 (id: 1 rack: null) -> ERROR: org.apache.kafka.common.errors.DisconnectException +b2.usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:9094 (id: 2 rack: null) -> ERROR: org.apache.kafka.common.errors.DisconnectException +b3.usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:9095 (id: 3 rack: null) -> ERROR: org.apache.kafka.common.errors.DisconnectException +``` + +## 步骤 2. 将 Kafka 集群暴露为 Private Link 服务 + +### 1. 搭建负载均衡器 + +创建一个网络负载均衡器(NLB),包含四个不同端口的目标组。一个目标组用于 bootstrap,其他分别映射到不同 broker。 + +1. bootstrap 目标组 => 9092 => broker-node1:39092,broker-node2:39092,broker-node3:39092 +2. broker 目标组 1 => 9093 => broker-node1:39092 +3. broker 目标组 2 => 9094 => broker-node2:39092 +4. broker 目标组 3 => 9095 => broker-node3:39092 + +如果有更多 broker 角色节点,需要添加更多映射。确保 bootstrap 目标组至少有一个节点,建议每个 AZ 各加一个节点以提升可用性。 + +按以下步骤搭建负载均衡器: + +1. 进入 [Target groups](https://console.aws.amazon.com/ec2/home#CreateTargetGroup:) 创建四个目标组。 + + - Bootstrap 目标组 + + - **Target type**: `Instances` + - **Target group name**: `bootstrap-target-group` + - **Protocol**: `TCP` + - **Port**: `9092` + - **IP address type**: `IPv4` + - **VPC**: `Kafka VPC` + - **Health check protocol**: `TCP` + - **Register targets**: `broker-node1:39092`, `broker-node2:39092`, `broker-node3:39092` + + - Broker 目标组 1 + + - **Target type**: `Instances` + - **Target group name**: `broker-target-group-1` + - **Protocol**: `TCP` + - **Port**: `9093` + - **IP address type**: `IPv4` + - **VPC**: `Kafka VPC` + - **Health check protocol**: `TCP` + - **Register targets**: `broker-node1:39092` + + - Broker 目标组 2 + + - **Target type**: `Instances` + - **Target group name**: `broker-target-group-2` + - **Protocol**: `TCP` + - **Port**: `9094` + - **IP address type**: `IPv4` + - **VPC**: `Kafka VPC` + - **Health check protocol**: `TCP` + - **Register targets**: `broker-node2:39092` + + - Broker 目标组 3 + + - **Target type**: `Instances` + - **Target group name**: `broker-target-group-3` + - **Protocol**: `TCP` + - **Port**: `9095` + - **IP address type**: `IPv4` + - **VPC**: `Kafka VPC` + - **Health check protocol**: `TCP` + - **Register targets**: `broker-node3:39092` + +2. 进入 [Load balancers](https://console.aws.amazon.com/ec2/home#LoadBalancers:) 创建网络负载均衡器。 + + - **Load balancer name**: `kafka-lb` + - **Schema**: `Internal` + - **Load balancer IP address type**: `IPv4` + - **VPC**: `Kafka VPC` + - **Availability Zones**: + - `usw2-az1` 绑定 `broker-usw2-az1 subnet` + - `usw2-az2` 绑定 `broker-usw2-az2 subnet` + - `usw2-az3` 绑定 `broker-usw2-az3 subnet` + - **Security groups**: 新建安全组,规则如下: + - 入站规则允许来自 Kafka VPC 的所有 TCP:Type - `{ports of target groups}`,如 `9092-9095`;Source - `{TiDB Cloud 的 CIDR}`。获取 region 内 TiDB Cloud 的 CIDR,请在 [TiDB Cloud 控制台](https://tidbcloud.com) 左上角切换到目标项目,点击 **Project Settings** > **Network Access**,再点击 **Project CIDR** > **AWS**。 + - 出站规则允许所有 TCP 到 Kafka VPC:Type - `All TCP`;Destination - `Anywhere-IPv4` + - 监听器与路由: + - Protocol: `TCP`; Port: `9092`; Forward to: `bootstrap-target-group` + - Protocol: `TCP`; Port: `9093`; Forward to: `broker-target-group-1` + - Protocol: `TCP`; Port: `9094`; Forward to: `broker-target-group-2` + - Protocol: `TCP`; Port: `9095`; Forward to: `broker-target-group-3` + +3. 在堡垒机节点测试负载均衡器。本例只测试 Kafka bootstrap。由于负载均衡器监听的是 Kafka EXTERNAL listener,EXTERNAL advertised listener 的地址在堡垒机节点无法解析。记下负载均衡器详情页的 `kafka-lb` DNS 名称,例如 `kafka-lb-77405fa57191adcb.elb.us-west-2.amazonaws.com`。在堡垒机节点执行脚本。 + + ```shell + # 将 {lb_dns_name} 替换为实际值 + export JAVA_HOME=/home/ec2-user/jdk-22.0.2 + ./kafka_2.13-3.7.1/bin/kafka-broker-api-versions.sh --bootstrap-server {lb_dns_name}:9092 + + # 最后 3 行期望输出(实际顺序可能不同) + b1.usw2-az1.abc.us-west-2.aws.3199015.tidbcloud.com:9093 (id: 1 rack: null) -> ERROR: org.apache.kafka.common.errors.DisconnectException + b2.usw2-az2.abc.us-west-2.aws.3199015.tidbcloud.com:9094 (id: 2 rack: null) -> ERROR: org.apache.kafka.common.errors.DisconnectException + b3.usw2-az3.abc.us-west-2.aws.3199015.tidbcloud.com:9095 (id: 3 rack: null) -> ERROR: org.apache.kafka.common.errors.DisconnectException + + # 你也可以尝试在 9093/9094/9095 端口 bootstrap。由于 AWS 的 NLB 默认将 LB DNS 解析到任意可用区的 IP 并禁用跨区负载均衡,因此有概率成功。 + # 如果你在 LB 启用跨区负载均衡,则会成功,但这通常不需要,且可能带来额外的跨 AZ 流量。 + ``` + +### 2. 搭建 Private Link 服务 + +1. 进入 [Endpoint service](https://console.aws.amazon.com/vpcconsole/home#EndpointServices:),点击 **Create endpoint service**,为 Kafka 负载均衡器创建 Private Link 服务。 + + - **Name**: `kafka-pl-service` + - **Load balancer type**: `Network` + - **Load balancers**: `kafka-lb` + - **Included Availability Zones**: `usw2-az1`,`usw2-az2`, `usw2-az3` + - **Require acceptance for endpoint**: `Acceptance required` + - **Enable private DNS name**: `No` + +2. 记下 **Service name**,你需要将其提供给 TiDB Cloud,例如 `com.amazonaws.vpce.us-west-2.vpce-svc-0f49e37e1f022cd45`。 + +3. 在 kafka-pl-service 详情页,点击 **Allow principals** 标签页,允许 TiDB Cloud 的 AWS 账号创建端点。你可以在 [前置条件](#prerequisites) 获取 TiDB Cloud 的 AWS 账号,例如 `arn:aws:iam:::root`。 + +## 步骤 3. 从 TiDB Cloud 连接 + +1. 回到 [TiDB Cloud 控制台](https://tidbcloud.com),为 集群实例 创建 changefeed,通过 **Private Link** 连接到 Kafka 集群。详细信息参见 [Sink to Apache Kafka](/tidb-cloud/changefeed-sink-to-apache-kafka.md)。 + +2. 当你进行 **Configure the changefeed target > Connectivity Method > Private Link** 时,按需填写以下字段及其他字段: + + - **Kafka Type**: `3 AZs`。确保你的 Kafka 集群部署在同样的三个 AZ。 + - **Kafka Advertised Listener Pattern**: `abc`。与 [前置条件](#prerequisites) 中用于生成 **Kafka Advertised Listener Pattern** 的唯一随机字符串一致。 + - **Endpoint Service Name**: Kafka 服务名。 + - **Bootstrap Ports**: `9092`。单端口即可,因为你已在其后配置了专用的 bootstrap 目标组。 + +3. 按照 [Sink to Apache Kafka](/tidb-cloud/changefeed-sink-to-apache-kafka.md) 的步骤继续操作。 + +现在你已成功完成该任务。 + +## FAQ + +### 如何从两个不同的 TiDB Cloud 项目连接同一个 Kafka Private Link 服务? + +如果你已按本文档成功完成第一个项目的连接,可以按如下方式让第二个项目也连接同一个 Kafka Private Link 服务: + +1. 按本文档从头操作。 + +2. 当你进行 [步骤 1. 搭建 Kafka 集群](#step-1-set-up-a-kafka-cluster) 时,参考 [重配置运行中的 Kafka 集群](#reconfigure-a-running-kafka-cluster) 新增一组 EXTERNAL listener 和 advertised listener,可以命名为 **EXTERNAL2**。注意 **EXTERNAL2** 的端口区间不能与 **EXTERNAL** 重叠。 + +3. 重新配置 broker 后,在负载均衡器中新增一组目标组,包括 bootstrap 和 broker 目标组。 + +4. 配置 TiDB Cloud 连接时填写以下信息: + + - 新的 Bootstrap 端口 + - 新的 Kafka Advertised Listener Group + - 相同的 Endpoint Service diff --git a/tidb-cloud/size-your-cluster.md b/tidb-cloud/size-your-cluster.md index e864befae9f4f..775dc5ef76098 100644 --- a/tidb-cloud/size-your-cluster.md +++ b/tidb-cloud/size-your-cluster.md @@ -5,17 +5,17 @@ summary: 了解如何确定你的 TiDB Cloud 集群规模。 # 确定你的 TiDB 规模 -本文档介绍如何确定 TiDB Cloud Dedicated 集群的规模。 +本文档介绍如何确定 TiDB Cloud 专属集群的规模。 > **Note:** > -> 你无法更改 [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#tidb-cloud-serverless) 集群的规模。 +> 你无法更改 TiDB Cloud Starter 或 TiDB Cloud Essential 集群的规模。 -## TiDB 规模配置 +## 规划 TiDB 规模 TiDB 仅用于计算,不存储数据,并且支持水平扩展。 -你可以为 TiDB 配置节点数量、vCPU 和内存(RAM)。 +你可以为 TiDB 配置节点数、vCPU 和内存(RAM)。 如需了解不同集群规模的性能测试结果,请参见 [TiDB Cloud 性能参考](/tidb-cloud/tidb-cloud-performance-reference.md)。 @@ -23,7 +23,7 @@ TiDB 仅用于计算,不存储数据,并且支持水平扩展。 支持的 vCPU 和内存规格如下: -| 标准规格 | 高内存规格 | +| 标准规格 | 高内存规格 | |:---------:|:----------------:| | 4 vCPU, 16 GiB | N/A | | 8 vCPU, 16 GiB | 8 vCPU, 32 GiB | @@ -36,20 +36,22 @@ TiDB 仅用于计算,不存储数据,并且支持水平扩展。 > > 如果 TiDB 的 vCPU 和内存规格设置为 **4 vCPU, 16 GiB**,请注意以下限制: > -> - TiDB 的节点数量只能设置为 1 或 2,TiKV 的节点数量固定为 3。 +> - TiDB 的节点数只能设置为 1 或 2,TiKV 的节点数固定为 3。 > - 4 vCPU 的 TiDB 只能与 4 vCPU 的 TiKV 搭配使用。 > - TiFlash 不可用。 +> +> **4 vCPU, 16 GiB** 规格的 TiDB 设计用于学习、测试和试用场景,适用于预生产环境或小型、非关键性负载。但由于性能有限,**不**推荐用于大规模生产环境。如果你需要更低的成本和生产环境的 SLA 保证,请考虑使用 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 集群方案。 -### TiDB 节点数量 +### TiDB 节点数 为了高可用,建议你为每个 TiDB Cloud 集群至少配置两个 TiDB 节点。 -通常情况下,TiDB 的性能会随着 TiDB 节点数量的增加而线性提升。但当 TiDB 节点数量超过 8 时,性能提升略低于线性增长。每增加 8 个节点,性能偏差系数约为 5%。 +通常,TiDB 的性能会随着 TiDB 节点数的增加而线性提升。但当 TiDB 节点数超过 8 时,性能提升略低于线性增长。每增加 8 个节点,性能偏差系数约为 5%。 例如: -- 当有 9 个 TiDB 节点时,性能偏差系数约为 5%,因此 TiDB 的性能约为 `9 * (1 - 5%) = 8.55` 倍单节点 TiDB 的性能。 -- 当有 16 个 TiDB 节点时,性能偏差系数约为 10%,因此 TiDB 的性能为 `16 * (1 - 10%) = 14.4` 倍单节点 TiDB 的性能。 +- 当有 9 个 TiDB 节点时,性能偏差系数约为 5%,因此 TiDB 的性能约为 `9 * (1 - 5%) = 8.55` 倍单个 TiDB 节点的性能。 +- 当有 16 个 TiDB 节点时,性能偏差系数约为 10%,因此 TiDB 的性能为 `16 * (1 - 10%) = 14.4` 倍单个 TiDB 节点的性能。 对于指定延迟的 TiDB 节点,TiDB 的性能会根据不同的读写比例有所不同。 @@ -61,15 +63,15 @@ TiDB 仅用于计算,不存储数据,并且支持水平扩展。 | 混合 | 15,500 | 7,750 | 5,200 | | 写 | 18,000 | 9,000 | 6,000 | -如果 TiDB 节点数量小于 8,性能偏差系数几乎为 0%,因此 16 vCPU, 32 GiB TiDB 节点的性能大约是 8 vCPU, 16 GiB TiDB 节点的两倍。如果 TiDB 节点数量超过 8,建议选择 16 vCPU, 32 GiB TiDB 节点,这样所需节点更少,性能偏差系数也更小。 +如果 TiDB 节点数小于 8,性能偏差系数几乎为 0%,因此 16 vCPU, 32 GiB TiDB 节点的性能大约是 8 vCPU, 16 GiB TiDB 节点的两倍。如果 TiDB 节点数超过 8,建议选择 16 vCPU, 32 GiB TiDB 节点,这样所需节点数更少,性能偏差系数也更小。 -在规划集群规模时,你可以根据你的负载类型、整体期望性能(QPS)以及单个 TiDB 节点对应负载类型的性能,使用以下公式估算 TiDB 节点数量: +在规划集群规模时,你可以根据你的负载类型、整体期望性能(QPS)以及单个 TiDB 节点在该负载类型下的性能,使用以下公式估算 TiDB 节点数: `node count = ceil(overall expected performance ÷ performance per node * (1 - performance deviation coefficient))` -在公式中,你需要先计算 `node count = ceil(overall expected performance ÷ performance per node)` 得到一个大致的节点数量,然后再结合对应的性能偏差系数得到最终节点数量。 +在公式中,你需要先计算 `node count = ceil(overall expected performance ÷ performance per node)` 得到一个大致的节点数,然后再结合对应的性能偏差系数,得到最终的节点数。 -例如,你的整体期望性能为 110,000 QPS,负载为混合型,P95 延迟约为 100 ms,并且希望使用 8 vCPU, 16 GiB 的 TiDB 节点。你可以从上表获取 8 vCPU, 16 GiB TiDB 节点的估算性能(即 `15,500`),并按如下方式计算大致的 TiDB 节点数量: +例如,你的整体期望性能为 110,000 QPS,负载类型为混合,P95 延迟约为 100 ms,且希望使用 8 vCPU, 16 GiB TiDB 节点。你可以从上表获取 8 vCPU, 16 GiB TiDB 节点的估算性能(即 `15,500`),并按如下方式计算大致的 TiDB 节点数: `node count = ceil(110,000 ÷ 15,500) = 8` @@ -77,11 +79,11 @@ TiDB 仅用于计算,不存储数据,并且支持水平扩展。 因此,推荐你使用 8 个 TiDB 节点(8 vCPU, 16 GiB)。 -## TiKV 规模配置 +## 规划 TiKV 规模 TiKV 负责存储数据,并支持水平扩展。 -你可以为 TiKV 配置节点数量、vCPU 和内存,以及存储容量。 +你可以为 TiKV 配置节点数、vCPU 和内存,以及存储容量。 如需了解不同集群规模的性能测试结果,请参见 [TiDB Cloud 性能参考](/tidb-cloud/tidb-cloud-performance-reference.md)。 @@ -89,7 +91,7 @@ TiKV 负责存储数据,并支持水平扩展。 支持的 vCPU 和内存规格如下: -| 标准规格 | 高内存规格 | +| 标准规格 | 高内存规格 | |:---------:|:----------------:| | 4 vCPU, 16 GiB | N/A | | 8 vCPU, 32 GiB | 8 vCPU, 64 GiB | @@ -100,44 +102,46 @@ TiKV 负责存储数据,并支持水平扩展。 > > 如果 TiKV 的 vCPU 和内存规格设置为 **4 vCPU, 16 GiB**,请注意以下限制: > -> - TiDB 的节点数量只能设置为 1 或 2,TiKV 的节点数量固定为 3。 +> - TiDB 的节点数只能设置为 1 或 2,TiKV 的节点数固定为 3。 > - 4 vCPU 的 TiKV 只能与 4 vCPU 的 TiDB 搭配使用。 > - TiFlash 不可用。 +> +> **4 vCPU, 16 GiB** 规格的 TiKV 设计用于学习、测试和试用场景,适用于预生产环境或小型、非关键性负载。但由于性能有限,**不**推荐用于大规模生产环境。如果你需要更低的成本和生产环境的 SLA 保证,请考虑使用 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 集群方案。 -### TiKV 节点数量 +### TiKV 节点数 -TiKV 节点数量应为 **至少 1 组(3 个节点,分布在 3 个不同的可用区)**。 +TiKV 节点数应为 **至少 1 组(3 个节点,分布在 3 个不同的可用区)**。 -TiDB Cloud 会将 TiKV 节点均匀部署到你选择的区域内所有可用区(至少 3 个)以实现数据持久性和高可用。在典型的 3 副本设置下,你的数据会在所有可用区的 TiKV 节点之间均匀分布,并持久化到每个 TiKV 节点的磁盘上。 +TiDB Cloud 会将 TiKV 节点均匀部署到你选择的区域内所有可用区(至少 3 个),以实现数据的持久性和高可用性。在典型的 3 副本设置下,你的数据会在所有可用区的 TiKV 节点间均匀分布,并持久化到每个 TiKV 节点的磁盘上。 > **Note:** > -> 当你扩缩 TiDB 集群时,3 个可用区的节点会同时增加或减少。关于如何根据需求扩容或缩容 TiDB 集群,请参见 [扩缩 TiDB 集群](/tidb-cloud/scale-tidb-cluster.md)。 +> 当你扩缩 TiDB 集群时,3 个可用区的节点会同时增加或减少。如何根据需求扩容或缩容 TiDB 集群,请参见 [扩缩 TiDB 集群](/tidb-cloud/scale-tidb-cluster.md)。 -虽然 TiKV 主要用于数据存储,但 TiKV 节点的性能也会根据不同负载类型有所不同。因此,在规划 TiKV 节点数量时,你需要根据 [**数据量**](#estimate-tikv-node-count-according-to-data-volume) 和 [期望性能](#estimate-tikv-node-count-according-to-expected-performance) 两方面进行估算,并取两者中较大的值作为推荐节点数量。 +虽然 TiKV 主要用于数据存储,但 TiKV 节点的性能也会根据不同负载类型有所不同。因此,在规划 TiKV 节点数时,你需要根据 [**数据量**](#estimate-tikv-node-count-according-to-data-volume) 和 [期望性能](#estimate-tikv-node-count-according-to-expected-performance) 两方面进行估算,并取两者中较大的值作为推荐节点数。 -#### 根据数据量估算 TiKV 节点数量 +#### 按数据量估算 TiKV 节点数 -你可以根据数据量按如下方式计算推荐的 TiKV 节点数量: +你可以根据数据量按如下方式计算推荐的 TiKV 节点数: `node count = ceil(size of your data * TiKV compression ratio * the number of replicas ÷ TiKV storage usage ratio ÷ one TiKV capacity ÷ 3) * 3` -通常建议 TiKV 存储使用率保持在 80% 以下。TiDB Cloud 默认副本数为 3。8 vCPU, 64 GiB TiKV 节点的最大存储容量为 4096 GiB。 +通常建议 TiKV 存储的使用率保持在 80% 以下。TiDB Cloud 默认副本数为 3。8 vCPU, 64 GiB TiKV 节点的最大存储容量为 4096 GiB。 根据历史数据,TiKV 的平均压缩比约为 40%。 -假设你的 MySQL dump 文件大小为 20 TB,TiKV 压缩比为 40%。则可以按如下方式根据数据量计算推荐的 TiKV 节点数量: +假设你的 MySQL dump 文件大小为 20 TB,TiKV 压缩比为 40%。则可按如下方式计算推荐的 TiKV 节点数: `node count = ceil(20 TB * 40% * 3 ÷ 0.8 ÷ 4096 GiB ÷ 3) * 3 = 9` -#### 根据期望性能估算 TiKV 节点数量 +#### 按期望性能估算 TiKV 节点数 -与 TiDB 性能类似,TiKV 的性能会随着 TiKV 节点数量的增加而线性提升。但当 TiKV 节点数量超过 8 时,性能提升略低于线性增长。每增加 8 个节点,性能偏差系数约为 5%。 +与 TiDB 性能类似,TiKV 的性能会随着 TiKV 节点数的增加而线性提升。但当 TiKV 节点数超过 8 时,性能提升略低于线性增长。每增加 8 个节点,性能偏差系数约为 5%。 例如: -- 当有 9 个 TiKV 节点时,性能偏差系数约为 5%,因此 TiKV 的性能约为 `9 * (1 - 5%) = 8.55` 倍单节点 TiKV 的性能。 -- 当有 18 个 TiKV 节点时,性能偏差系数约为 10%,因此 TiKV 的性能为 `18 * (1 - 10%) = 16.2` 倍单节点 TiKV 的性能。 +- 当有 9 个 TiKV 节点时,性能偏差系数约为 5%,因此 TiKV 的性能约为 `9 * (1 - 5%) = 8.55` 倍单个 TiKV 节点的性能。 +- 当有 18 个 TiKV 节点时,性能偏差系数约为 10%,因此 TiKV 的性能为 `18 * (1 - 10%) = 16.2` 倍单个 TiKV 节点的性能。 对于指定延迟的 TiKV 节点,TiKV 的性能会根据不同的读写比例有所不同。 @@ -149,15 +153,15 @@ TiDB Cloud 会将 TiKV 节点均匀部署到你选择的区域内所有可用区 | 混合 | 17,800 | 8,900 | 4,450 | | 写 | 14,500 | 7,250 | 3,625 | -如果 TiKV 节点数量小于 8,性能偏差系数几乎为 0%,因此 16 vCPU, 64 GiB TiKV 节点的性能大约是 8 vCPU, 32 GiB TiKV 节点的两倍。如果 TiKV 节点数量超过 8,建议选择 16 vCPU, 64 GiB TiKV 节点,这样所需节点更少,性能偏差系数也更小。 +如果 TiKV 节点数小于 8,性能偏差系数几乎为 0%,因此 16 vCPU, 64 GiB TiKV 节点的性能大约是 8 vCPU, 32 GiB TiKV 节点的两倍。如果 TiKV 节点数超过 8,建议选择 16 vCPU, 64 GiB TiKV 节点,这样所需节点数更少,性能偏差系数也更小。 -在规划集群规模时,你可以根据你的负载类型、整体期望性能(QPS)以及单个 TiKV 节点对应负载类型的性能,使用以下公式估算 TiKV 节点数量: +在规划集群规模时,你可以根据你的负载类型、整体期望性能(QPS)以及单个 TiKV 节点在该负载类型下的性能,使用以下公式估算 TiKV 节点数: `node count = ceil(overall expected performance ÷ performance per node * (1 - performance deviation coefficient))` -在公式中,你需要先计算 `node count = ceil(overall expected performance ÷ performance per node)` 得到一个大致的节点数量,然后再结合对应的性能偏差系数得到最终节点数量。 +在公式中,你需要先计算 `node count = ceil(overall expected performance ÷ performance per node)` 得到一个大致的节点数,然后再结合对应的性能偏差系数,得到最终的节点数。 -例如,你的整体期望性能为 110,000 QPS,负载为混合型,P95 延迟约为 100 ms,并且希望使用 8 vCPU, 32 GiB 的 TiKV 节点。你可以从上表获取 8 vCPU, 32 GiB TiKV 节点的估算性能(即 `17,800`),并按如下方式计算大致的 TiKV 节点数量: +例如,你的整体期望性能为 110,000 QPS,负载类型为混合,P95 延迟约为 100 ms,且希望使用 8 vCPU, 32 GiB TiKV 节点。你可以从上表获取 8 vCPU, 32 GiB TiKV 节点的估算性能(即 `17,800`),并按如下方式计算大致的 TiKV 节点数: `node count = ceil(110,000 / 17,800 ) = 7` @@ -165,18 +169,18 @@ TiDB Cloud 会将 TiKV 节点均匀部署到你选择的区域内所有可用区 因此,推荐你根据期望性能使用 7 个 TiKV 节点(8 vCPU, 32 GiB)。 -接下来,你可以将根据数据量计算的 TiKV 节点数量与根据期望性能计算的节点数量进行比较,取较大的值作为推荐的 TiKV 节点数量。 +接下来,你可以将按数据量计算的 TiKV 节点数与按期望性能计算的节点数进行比较,取较大的值作为推荐的 TiKV 节点数。 ### TiKV 节点存储容量 不同 TiKV vCPU 支持的节点存储容量如下: | TiKV vCPU | 最小节点存储 | 最大节点存储 | 默认节点存储 | -|:---------:|:------------:|:------------:|:------------:| -| 4 vCPU | 200 GiB | 2048 GiB | 500 GiB | -| 8 vCPU | 200 GiB | 4096 GiB | 500 GiB | -| 16 vCPU | 200 GiB | 4096 GiB | 500 GiB | -| 32 vCPU | 200 GiB | 4096 GiB | 500 GiB | +|:---------:|:----------------:|:----------------:|:--------------------:| +| 4 vCPU | 200 GiB | 2048 GiB | 500 GiB | +| 8 vCPU | 200 GiB | 4096 GiB | 500 GiB | +| 16 vCPU | 200 GiB | 4096 GiB | 500 GiB | +| 32 vCPU | 200 GiB | 4096 GiB | 500 GiB | > **Note:** > @@ -184,7 +188,7 @@ TiDB Cloud 会将 TiKV 节点均匀部署到你选择的区域内所有可用区 ### TiKV 节点存储类型 -TiDB Cloud 为托管在 AWS 上的 [TiDB Cloud 专属](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群提供以下 TiKV 存储类型: +TiDB Cloud 为托管在 AWS 上的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群提供以下 TiKV 存储类型: - [基础存储](#basic-storage) - [标准存储](#standard-storage) @@ -201,19 +205,19 @@ TiDB Cloud 为托管在 AWS 上的 [TiDB Cloud 专属](/tidb-cloud/select-cluste #### 标准存储 -标准存储适用于大多数负载,在性能和成本之间实现平衡。与基础存储相比,标准存储为 Raft 日志预留了充足的磁盘资源,从而提升了性能。这样可以减少 Raft I/O 对数据盘 I/O 的影响,提高 TiKV 的读写性能。 +标准存储适用于大多数负载,在性能和成本之间实现平衡。与基础存储相比,标准存储为 Raft 日志预留了充足的磁盘资源,从而提升了性能,减少了 Raft I/O 对数据盘 I/O 的影响,提高了 TiKV 的读写性能。 -标准存储类型会自动应用于使用 TiDB v7.5.5、v8.1.2、v8.5.0 或更高版本创建的新 AWS 集群。 +标准存储类型会自动应用于托管在 AWS 上且使用 TiDB v7.5.5、v8.1.2、v8.5.0 或更高版本创建的新集群。 #### 高性能与 Plus 存储 -高性能与 Plus 存储提供更高的性能和稳定性,价格也相应更高。目前,这两种存储类型仅可按需为部署在 AWS 上的集群申请。如需申请高性能或 Plus 存储,请点击 [TiDB Cloud 控制台](https://tidbcloud.com) 右下角的 **?**,然后点击 **Request Support**。在 **Description** 字段填写 "Apply for TiKV storage type",并点击 **Submit**。 +高性能与 Plus 存储提供更高的性能和稳定性,价格也会相应提升。目前,这两种存储类型仅可按需为部署在 AWS 上的集群申请。如需申请高性能或 Plus 存储,请点击 [TiDB Cloud 控制台](https://tidbcloud.com) 右下角的 **?**,然后点击 **Request Support**。在 **Description** 字段填写 "Apply for TiKV storage type",并点击 **Submit**。 -## TiFlash 规模配置 +## 规划 TiFlash 规模 -TiFlash 实时同步 TiKV 的数据,开箱即用地支持实时分析型负载,并支持水平扩展。 +TiFlash 实时从 TiKV 同步数据,开箱即用地支持实时分析型负载,并支持水平扩展。 -你可以为 TiFlash 配置节点数量、vCPU 和内存,以及存储容量。 +你可以为 TiFlash 配置节点数、vCPU 和内存,以及存储容量。 ### TiFlash vCPU 和内存 @@ -224,17 +228,17 @@ TiFlash 实时同步 TiKV 的数据,开箱即用地支持实时分析型负载 - 32 vCPU, 128 GiB - 32 vCPU, 256 GiB -注意,当 TiDB 或 TiKV 的 vCPU 和内存规格设置为 **4 vCPU, 16 GiB** 时,TiFlash 不可用。 +注意:当 TiDB 或 TiKV 的 vCPU 和内存规格设置为 **4 vCPU, 16 GiB** 时,TiFlash 不可用。 -### TiFlash 节点数量 +### TiFlash 节点数 -TiDB Cloud 会将 TiFlash 节点均匀部署到一个区域内的不同可用区。建议你为每个 TiDB Cloud 集群至少配置两个 TiFlash 节点,并为生产环境中的数据创建至少两个副本以实现高可用。 +TiDB Cloud 会将 TiFlash 节点均匀部署到一个区域内的不同可用区。建议你为每个 TiDB Cloud 集群至少配置两个 TiFlash 节点,并为生产环境中的数据创建至少两个副本,以实现高可用。 TiFlash 节点的最小数量取决于特定表的 TiFlash 副本数: TiFlash 节点最小数量:`min((compressed size of table A * replicas for table A + compressed size of table B * replicas for table B) / size of each TiFlash capacity, max(replicas for table A, replicas for table B))` -例如,如果你在 AWS 上为每个 TiFlash 节点配置 1024 GiB 存储,并为表 A 设置 2 个副本(压缩后大小为 800 GiB),为表 B 设置 1 个副本(压缩后大小为 100 GiB),则所需 TiFlash 节点数量如下: +例如,如果你在 AWS 上为每个 TiFlash 节点配置的节点存储为 1024 GiB,且为表 A 设置 2 个副本(压缩后大小为 800 GiB),为表 B 设置 1 个副本(压缩后大小为 100 GiB),则所需的 TiFlash 节点数如下: TiFlash 节点最小数量:`min((800 GiB * 2 + 100 GiB * 1) / 1024 GiB, max(2, 1)) ≈ 2` @@ -243,10 +247,10 @@ TiFlash 节点最小数量:`min((800 GiB * 2 + 100 GiB * 1) / 1024 GiB, max(2, 不同 TiFlash vCPU 支持的节点存储容量如下: | TiFlash vCPU | 最小节点存储 | 最大节点存储 | 默认节点存储 | -|:---------:|:------------:|:------------:|:------------:| -| 8 vCPU | 200 GiB | 4096 GiB | 500 GiB | -| 16 vCPU | 200 GiB | 4096 GiB | 500 GiB | -| 32 vCPU | 200 GiB | 8192 GiB | 500 GiB | +|:---------:|:----------------:|:----------------:|:--------------------:| +| 8 vCPU | 200 GiB | 4096 GiB | 500 GiB | +| 16 vCPU | 200 GiB | 4096 GiB | 500 GiB | +| 32 vCPU | 200 GiB | 8192 GiB | 500 GiB | > **Note:** > @@ -254,7 +258,7 @@ TiFlash 节点最小数量:`min((800 GiB * 2 + 100 GiB * 1) / 1024 GiB, max(2, ### TiFlash 节点存储类型 -TiDB Cloud 为托管在 AWS 上的 [TiDB Cloud 专属](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群提供以下 TiFlash 存储类型: +TiDB Cloud 为托管在 AWS 上的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群提供以下 TiFlash 存储类型: - [基础存储](#basic-storage-1) - [Plus 存储](#plus-storage) @@ -265,4 +269,4 @@ TiDB Cloud 为托管在 AWS 上的 [TiDB Cloud 专属](/tidb-cloud/select-cluste #### Plus 存储 -Plus 存储提供更高的性能和稳定性,价格也相应更高。目前,该存储类型仅可按需为部署在 AWS 上的集群申请。如需申请,请点击 [TiDB Cloud 控制台](https://tidbcloud.com) 右下角的 **?**,然后点击 **Request Support**。在 **Description** 字段填写 "Apply for TiFlash storage type",并点击 **Submit**。 \ No newline at end of file +Plus 存储提供更高的性能和稳定性,价格也会相应提升。目前,该存储类型仅可按需为部署在 AWS 上的集群申请。如需申请,请点击 [TiDB Cloud 控制台](https://tidbcloud.com) 右下角的 **?**,然后点击 **Request Support**。在 **Description** 字段填写 "Apply for TiFlash storage type",并点击 **Submit**。 \ No newline at end of file diff --git a/tidb-cloud/tidb-cloud-billing-ticdc-rcu.md b/tidb-cloud/tidb-cloud-billing-ticdc-rcu.md index 7c3ba71544c45..ffeb4c42d1ee2 100644 --- a/tidb-cloud/tidb-cloud-billing-ticdc-rcu.md +++ b/tidb-cloud/tidb-cloud-billing-ticdc-rcu.md @@ -1,32 +1,41 @@ --- -title: Changefeed 计费 +title: TiDB Cloud 专属版 Changefeed 计费 summary: 了解 TiDB Cloud 中 changefeed 的计费方式。 aliases: ['/tidbcloud/tidb-cloud-billing-tcu'] --- -# Changefeed 计费 +# TiDB Cloud 专属版 Changefeed 计费 + +本文档介绍了 TiDB Cloud 专属版中 changefeed 的计费详情。 ## RCU 成本 -TiDB Cloud 以 TiCDC 复制能力单位(Replication Capacity Units,RCUs)来衡量 [changefeed](/tidb-cloud/changefeed-overview.md) 的容量。当你为集群 [创建 changefeed](/tidb-cloud/changefeed-overview.md#create-a-changefeed) 时,可以选择合适的规格。RCU 越高,复制性能越好。你需要为这些 TiCDC changefeed 的 RCU 支付费用。 +TiDB Cloud 专属版通过 TiCDC 复制能力单位(RCU,Replication Capacity Units)来衡量 [changefeed](/tidb-cloud/changefeed-overview.md) 的容量。当你为集群 [创建 changefeed](/tidb-cloud/changefeed-overview.md#create-a-changefeed) 时,可以选择合适的规格。RCU 越高,复制性能越好。你需要为这些 TiCDC changefeed RCU 支付费用。 ### TiCDC RCU 数量 下表列出了 changefeed 的规格及其对应的最大复制性能: -| 规格 | 最大复制性能 | -|--------------|---------------------| -| 2 RCUs | 5,000 行/秒 | -| 4 RCUs | 10,000 行/秒 | -| 8 RCUs | 20,000 行/秒 | -| 16 RCUs | 40,000 行/秒 | -| 24 RCUs | 60,000 行/秒 | -| 32 RCUs | 80,000 行/秒 | -| 40 RCUs | 100,000 行/秒 | +| 规格 | 最大复制性能 | +|--------------|-----------------------| +| 2 RCUs | 5,000 行/秒 | +| 4 RCUs | 10,000 行/秒 | +| 8 RCUs | 20,000 行/秒 | +| 16 RCUs | 40,000 行/秒 | +| 24 RCUs | 60,000 行/秒 | +| 32 RCUs | 80,000 行/秒 | +| 40 RCUs | 100,000 行/秒 | +| 64 RCUs | 160,000 行/秒 | +| 96 RCUs | 240,000 行/秒 | +| 128 RCUs | 320,000 行/秒 | +| 192 RCUs | 480,000 行/秒 | +| 256 RCUs | 640,000 行/秒 | +| 320 RCUs | 800,000 行/秒 | +| 384 RCUs | 960,000 行/秒 | > **Note:** > -> 上述性能数据仅供参考,实际场景中可能会有所不同。强烈建议你在生产环境中使用 changefeed 功能前,先进行真实负载测试。如需进一步协助,请联系 [TiDB Cloud support](/tidb-cloud/tidb-cloud-support.md)。 +> 上述性能数据仅供参考,实际场景下可能有所不同。强烈建议你在生产环境中使用 changefeed 功能前,先进行真实负载测试。如需进一步协助,请联系 [TiDB Cloud support](/tidb-cloud/tidb-cloud-support.md)。 ### 价格 diff --git a/tidb-cloud/tidb-cloud-release-notes.md b/tidb-cloud/tidb-cloud-release-notes.md index b263201bc833d..ea8dcabd8e5ae 100644 --- a/tidb-cloud/tidb-cloud-release-notes.md +++ b/tidb-cloud/tidb-cloud-release-notes.md @@ -8,27 +8,41 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] 本页面列出了 [TiDB Cloud](https://www.pingcap.com/tidb-cloud/) 在 2025 年的发布说明。 +## 2025 年 11 月 4 日 + +**通用变更** + +- **TiDB Cloud Dedicated** + + - 当你通过 VPC Peering 连接托管在 Google Cloud 上的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群时,现在可以直接在 [TiDB Cloud 控制台](https://tidbcloud.com/) 配置 `/16` 到 `/18` 之间的 IP 范围大小,无需再联系 TiDB Cloud 支持进行此项配置。 + + 了解更多信息,参见 [通过 VPC Peering 连接 TiDB Cloud Dedicated](/tidb-cloud/set-up-vpc-peering-connections.md)。 + + - TiDB Cloud Dedicated 现在为 4 vCPU 节点规格提供了更清晰的指引和提示。该节点规格仅适用于测试、学习和在非生产环境中探索 TiDB Cloud 功能。 + + 了解更多信息,参见 [确定你的 TiDB 规格](/tidb-cloud/size-your-cluster.md)。 + ## 2025 年 10 月 28 日 **通用变更** - **TiDB Cloud Starter 和 TiDB Cloud Essential** - 为了提升连接的稳定性并防止在 TiDB 服务器重启或维护期间出现意外断连,建议你将数据库连接的最大生命周期设置为小于 30 分钟。 + 为提升连接稳定性并防止在 TiDB 服务器重启或维护期间出现意外断开,建议你将数据库连接的最大生命周期设置为小于 30 分钟。 - 详情请参见 [配置连接的生命周期](/develop/dev-guide-connection-parameters.md#configure-the-lifetime-of-connections)。 + 了解更多信息,参见 [配置连接的生命周期](/develop/dev-guide-connection-parameters.md#configure-the-lifetime-of-connections)。 **API 变更** - **TiDB Cloud Dedicated** - 引入以下用于管理第三方监控集成的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) API 端点: + 新增以下用于管理第三方监控集成的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) API 端点: - 列出集成 - 创建集成 - 删除集成 - 详情请参见 [TiDB Cloud Dedicated API](https://docs.pingcap.com/tidbcloud/api/v1beta1/dedicated/)。 + 了解更多信息,参见 [TiDB Cloud Dedicated API](https://docs.pingcap.com/tidbcloud/api/v1beta1/dedicated/)。 ## 2025 年 10 月 21 日 @@ -36,19 +50,19 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - **TiDB Cloud Dedicated** - - [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 增强了 [Changefeeds](/tidb-cloud/changefeed-overview.md) 的私有端点功能,简化配置、提升安全性,并为数据下游提供更高的灵活性。 + - [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 增强了 [Changefeeds](/tidb-cloud/changefeed-overview.md) 的私有端点功能,简化配置、提升安全性,并为数据下游提供更大灵活性。 - - **简化配置**:私有端点的创建现已与 changefeed 创建解耦,同一项目下的多个 changefeed 可共享一个私有端点,从而减少冗余配置。 + - **简化配置**:私有端点的创建现在与 changefeed 的创建解耦,同一项目下的多个 changefeed 可共享一个私有端点,从而减少冗余配置。 - **MySQL 的私有链路下游**:为数据下沉到 MySQL 提供更安全的方式,并支持通过私有链路直接下沉到另一个 TiDB Cloud Dedicated 集群。 - - **自定义域名支持**:使用自建 Kafka 服务时,可为数据下游配置自定义域名,提升安全性,并可灵活更新 advertised listener,无需重启服务器。 + - **自定义域名支持**:在使用自建 Kafka 服务时,你可以为数据下游配置自定义域名,提升安全性,并在无需重启服务器的情况下灵活更新 advertised listener。 - 详情请参见 [为 Changefeeds 设置私有端点](/tidb-cloud/set-up-sink-private-endpoint.md)。 + 了解更多信息,参见 [为 Changefeeds 配置私有端点](/tidb-cloud/set-up-sink-private-endpoint.md)。 - - [Prometheus 集成(预览版)](/tidb-cloud/monitor-prometheus-and-grafana-integration.md) 现已适用于 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群。 + - [Prometheus 集成(预览)](/tidb-cloud/monitor-prometheus-and-grafana-integration.md) 现已支持 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群。 - TiDB Cloud 现以集群为粒度管理 Prometheus 集成,提供更细致的控制和配置。该功能可让你将 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群的监控指标无缝推送到 Prometheus,实现统一平台下的高级告警。 + TiDB Cloud 现在在集群级别管理 Prometheus 集成,提供更细粒度的控制和配置。该功能可让你将 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群的监控指标无缝推送到 Prometheus,实现统一平台下的高级告警。 - 详情请参见 [集成 TiDB Cloud 与 Prometheus 和 Grafana](/tidb-cloud/monitor-prometheus-and-grafana-integration.md)。 + 了解更多信息,参见 [集成 TiDB Cloud 与 Prometheus 和 Grafana](/tidb-cloud/monitor-prometheus-and-grafana-integration.md)。 ## 2025 年 10 月 14 日 @@ -58,13 +72,13 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 不再支持数据库审计日志。 - 目前,仅 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 和 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 支持数据库审计日志。当前已启用数据库审计日志的现有 TiDB Cloud Starter 集群不受影响。 + 目前,仅 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 和 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 支持数据库审计日志。当前已启用数据库审计日志的 TiDB Cloud Starter 集群不受影响。 - - [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 移除了原地恢复功能,即你无法再将备份直接恢复到同一集群。此变更有助于防止误覆盖生产数据和潜在数据丢失。 + - [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 移除了原地恢复功能,即你无法再将备份直接恢复到同一集群。此变更有助于防止生产数据被意外覆盖及潜在数据丢失。 - 若需恢复数据,你可以 [将备份恢复到新集群](/tidb-cloud/backup-and-restore-serverless.md#perform-the-restore)。验证恢复数据后,将应用切换到新集群。已在现有集群中恢复的数据不会受影响,除非你执行新的恢复操作。 + 若需恢复数据,你可以 [将备份恢复到新集群](/tidb-cloud/backup-and-restore-serverless.md#perform-the-restore)。在验证恢复数据后,将应用切换到新集群。已存在集群中之前恢复的数据不会受影响,除非你执行新的恢复操作。 - 若需更安全、可控且灵活的数据恢复和迁移流程,建议使用 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential)。 + 若需更安全、可控且灵活的恢复和迁移流程,建议使用 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential)。 - [**Metrics**](/tidb-cloud/built-in-monitoring.md#view-the-metrics-page) 页面为 [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 新增以下指标,便于更快诊断和容量规划: @@ -73,35 +87,35 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - **TiDB Cloud Essential** - - [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 在 AWS 和阿里云 上公测。 + - [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 在 AWS 和阿里云 公测。 对于业务负载持续增长、需要实时扩展的应用,TiDB Cloud Essential 提供了灵活性和性能,助力业务发展。 - 详情请参见 [TiDB Cloud Essential 现已在 AWS 和阿里云公测](https://www.pingcap.com/blog/tidb-cloud-essential-now-available-public-preview-aws-alibaba-cloud/)。 + 了解更多信息,参见 [TiDB Cloud Essential 现已在 AWS 和阿里云公测](https://www.pingcap.com/blog/tidb-cloud-essential-now-available-public-preview-aws-alibaba-cloud/)。 - - TiDB Cloud Essential 现已在 [TiDB Cloud 控制台](https://tidbcloud.com) 支持数据库审计日志,并可自定义轮转设置。 + - [TiDB Cloud 控制台](https://tidbcloud.com) 现已支持 TiDB Cloud Essential 的数据库审计日志,并支持自定义轮转设置。 你可以将数据库审计日志存储在 TiDB Cloud、Amazon S3、Google Cloud Storage、Azure Blob Storage 或阿里云 OSS。 - 目前该功能为 beta 版。详情请参见 [TiDB Cloud Essential 数据库审计日志](/tidb-cloud/essential-database-audit-logging.md)。 + 目前该功能处于 beta 阶段。了解更多信息,参见 [TiDB Cloud Essential 的数据库审计日志](/tidb-cloud/essential-database-audit-logging.md)。 - - TiDB Cloud Essential 新增事件 `ResourceLimitation`,当集群的 Request Capacity Units(RCUs)消耗在一小时内多次达到配置上限时通知你。 + - TiDB Cloud Essential 新增事件 `ResourceLimitation`,当集群的 Request Capacity Units (RCUs) 消耗在一小时内多次达到配置上限时通知你。 超出限制的用量可能会被限流。为避免服务受影响,建议提升最大 RCU。 - 事件详情请参见 [TiDB Cloud 集群事件](/tidb-cloud/tidb-cloud-events.md)。 + 了解更多事件信息,参见 [TiDB Cloud 集群事件](/tidb-cloud/tidb-cloud-events.md)。 - [**Metrics**](/tidb-cloud/built-in-monitoring.md#view-the-metrics-page) 页面为 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 新增以下指标,便于更快诊断和容量规划: - - `Capacity vs Usage (RU/s)`:可视化已配置的 Request Unit(RU)容量与实际 RU 消耗,便于发现冗余空间和优化自动扩缩容。 + - `Capacity vs Usage (RU/s)`:可视化配置的 Request Unit (RU) 容量与实际 RU 消耗,便于发现冗余空间和优化自动扩缩容。 - `Lock-wait (P95/P99)`:监控锁等待时间分位数,定位争用热点。 - `Idle Connection Duration (P99 incl. not/in txn)`:识别事务内外的长时间空闲连接,便于调整连接池限制和超时设置。 - 详情请参见 [TiDB Cloud 内置监控指标](/tidb-cloud/built-in-monitoring.md)。 + 了解更多信息,参见 [TiDB Cloud 内置监控指标](/tidb-cloud/built-in-monitoring.md)。 ## 2025 年 9 月 30 日 @@ -111,11 +125,11 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - Datadog 和 New Relic 集成现已正式发布(GA),适用于 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群。 - TiDB Cloud 现以集群为粒度管理 Datadog 和 New Relic 集成,提供更细致的控制和配置。该功能可让你将 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群的监控指标无缝推送到 Datadog 或 New Relic,实现统一平台下的高级告警。 + TiDB Cloud 现在在集群级别管理 Datadog 和 New Relic 集成,提供更细粒度的控制和配置。该功能可让你将 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群的监控指标无缝推送到 Datadog 或 New Relic,实现统一平台下的高级告警。 - 集成步骤请参见 [集成 TiDB Cloud 与 Datadog](/tidb-cloud/monitor-datadog-integration.md) 和 [集成 TiDB Cloud 与 New Relic](/tidb-cloud/monitor-new-relic-integration.md)。 + 集成步骤参见 [集成 TiDB Cloud 与 Datadog](/tidb-cloud/monitor-datadog-integration.md) 和 [集成 TiDB Cloud 与 New Relic](/tidb-cloud/monitor-new-relic-integration.md)。 - 若需将现有 Datadog 和 New Relic 集成迁移到集群级别,请参见 [迁移 Datadog 和 New Relic 集成](/tidb-cloud/migrate-metrics-integrations.md)。 + 若需将现有 Datadog 和 New Relic 集成迁移到集群级别,参见 [迁移 Datadog 和 New Relic 集成](/tidb-cloud/migrate-metrics-integrations.md)。 ## 2025 年 9 月 23 日 @@ -125,11 +139,11 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - 支持在 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) changefeed 中由用户控制 `UPDATE` 事件的拆分。 - 在 TiDB Cloud Dedicated 集群中,你可以配置是否将 `UPDATE` 事件保留为原始事件,或拆分为单独的 `DELETE` 和 `INSERT` 事件。该功能为高级同步场景提供更高的灵活性。 + 在 TiDB Cloud Dedicated 集群中,你可以配置是否将 `UPDATE` 事件保留为原始事件,或拆分为单独的 `DELETE` 和 `INSERT` 事件。该功能为高级同步场景提供更大灵活性。 - 该功能仅支持非 SQL 下游,如 Apache Kafka 和 Amazon S3。详情请参见 [下沉到 Apache Kafka](/tidb-cloud/changefeed-sink-to-apache-kafka.md)、[下沉到 Apache Pulsar](/tidb-cloud/changefeed-sink-to-apache-pulsar.md) 和 [下沉到云存储](/tidb-cloud/changefeed-sink-to-cloud-storage.md)。 + 该功能仅支持非 SQL 下游,如 Apache Kafka 和 Amazon S3。了解更多信息,参见 [下沉到 Apache Kafka](/tidb-cloud/changefeed-sink-to-apache-kafka.md)、[下沉到 Apache Pulsar](/tidb-cloud/changefeed-sink-to-apache-pulsar.md) 和 [下沉到云存储](/tidb-cloud/changefeed-sink-to-cloud-storage.md)。 - 拆分行为详情请参见 [为非 MySQL 下游拆分主键或唯一键 `UPDATE` 事件](https://docs.pingcap.com/tidb/stable/ticdc-split-update-behavior/#split-primary-or-unique-key-update-events-for-non-mysql-sinks)。 + 关于拆分行为的更多信息,参见 [为非 MySQL 下游拆分主键或唯一键 `UPDATE` 事件](https://docs.pingcap.com/tidb/stable/ticdc-split-update-behavior/#split-primary-or-unique-key-update-events-for-non-mysql-sinks)。 - 为托管在 Google Cloud 上的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群提供新的节点规格:`32 vCPU, 64 GiB`。 @@ -155,7 +169,7 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] 2. 完成该项目的 CMEK 配置。 3. 在与 CMEK 配置相同的区域创建托管在 Azure 上的 TiDB Cloud Dedicated 集群。 - 详情请参见 [在 Azure 上使用客户自管加密密钥进行静态加密](/tidb-cloud/tidb-cloud-encrypt-cmek-azure.md)。 + 了解更多信息,参见 [在 Azure 上使用客户自管加密密钥进行静态加密](/tidb-cloud/tidb-cloud-encrypt-cmek-azure.md)。 ## 2025 年 9 月 9 日 @@ -163,16 +177,16 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - **TiDB Cloud Starter** - - 新创建的 [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 集群仅启用可用区级高可用性,且不可配置。 - - 2025 年 9 月 9 日前已启用区域级高可用性的现有 TiDB Cloud Starter 集群,区域级高可用性仍受支持且不受影响。 + - 新创建的 [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 集群仅启用分区高可用性,且不可配置。 + - 2025 年 9 月 9 日前已启用区域高可用性的现有 TiDB Cloud Starter 集群,区域高可用性仍受支持且不受影响。 - **TiDB Cloud Essential** - - 新创建的 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 集群默认启用区域级高可用性,你可在集群创建时根据需要切换为可用区级高可用性。 + - 新创建的 [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 集群默认启用区域高可用性,你可在集群创建时根据需要切换为分区高可用性。 - 详情请参见 [TiDB Cloud Starter 和 Essential 的高可用性](/tidb-cloud/serverless-high-availability.md)。 + 了解更多信息,参见 [TiDB Cloud Starter 和 Essential 的高可用性](/tidb-cloud/serverless-high-availability.md)。 @@ -206,25 +220,25 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - **TiDB Cloud Starter** - - 在 [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 引入 Auto Embedding(Beta),让你无需额外配置即可将文本转为向量。该功能可加速在 TiDB Cloud 上开发语义搜索、RAG、重排序和分类等场景,减少集成成本。 + - [TiDB Cloud Starter](/tidb-cloud/select-cluster-tier.md#starter) 引入 Auto Embedding(Beta),让你无需额外配置即可轻松将文本转换为向量。该功能可加速在 TiDB Cloud 中开发语义搜索、RAG、重排序和分类等场景,减少集成成本。 - **与主流 LLM 提供商的自动嵌入**:Amazon Titan、OpenAI、Cohere、Gemini、Jina AI、Hugging Face 和 NVIDIA NIM。 - **与 AWS Bedrock 的原生集成**:托管嵌入模型并提供免费额度,包括 AWS Bedrock 的 Amazon Titan 和 Cohere 文本嵌入模型。 - **支持 SQL 和 Python**,并提供创建、存储和查询嵌入的代码示例。 - 详情请参见 [Auto Embedding](https://docs.pingcap.com/tidbcloud/vector-search-auto-embedding-overview/?plan=starter)。 + 了解更多信息,参见 [Auto Embedding](https://docs.pingcap.com/tidbcloud/vector-search-auto-embedding-overview/?plan=starter)。 - **TiDB Cloud Dedicated** - [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 不再支持 Index Insight(beta)功能。 - 建议你改用 [Index Advisor](/index-advisor.md),该功能适用于 TiDB v8.5.0 及以上版本。Index Advisor 引入了 `RECOMMEND INDEX` SQL 语句,可根据查询性能推荐索引,优化你的工作负载。 + 建议你使用 [Index Advisor](/index-advisor.md),该功能适用于 TiDB v8.5.0 及以上版本。Index Advisor 引入了 `RECOMMEND INDEX` SQL 语句,帮助你通过推荐索引优化查询性能。 - 你现在可以在启用每周备份的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群上手动禁用时间点恢复(Point-in-time Restore)功能。 该优化有助于降低不需要高 RPO 保护的集群的成本。 - 详情请参见 [备份与恢复 TiDB Cloud Dedicated 数据](/tidb-cloud/backup-and-restore.md)。 + 了解更多信息,参见 [备份与恢复 TiDB Cloud Dedicated 数据](/tidb-cloud/backup-and-restore.md)。 ## 2025 年 8 月 12 日 @@ -236,39 +250,39 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - 将 “TiDB Cloud Serverless” 重命名为 “TiDB Cloud Starter”。 - 自动扩缩容入门方案现称为 “TiDB Cloud Starter”,更好地体现其为新用户提供的角色。所有功能、定价和免费额度保持不变。 + 自动扩缩容入门方案现更名为 “TiDB Cloud Starter”,以更好地体现其为新用户提供的定位。所有功能、定价及免费额度保持不变。 自 2025 年 8 月 12 日(PDT)起,你现有的 Serverless 集群将在 [TiDB Cloud 控制台](https://tidbcloud.com) 中显示为 Starter。你的连接字符串、端点和数据均保持不变,无需修改代码或安排停机。 - - TiDB Cloud Starter 在阿里云上公测。 + - TiDB Cloud Starter 在阿里云公测。 - **TiDB Cloud Essential** - [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 在阿里云上公测。 + [TiDB Cloud Essential](/tidb-cloud/select-cluster-tier.md#essential) 在阿里云公测。 - TiDB Cloud Essential 在阿里云自 2025 年 5 月起已进行有限公测。本次是 Essential 首次正式纳入发布说明。目前,Essential 在阿里云新加坡区域提供,与 Starter 功能集保持一致。 + TiDB Cloud Essential 在阿里云自 2025 年 5 月起已进行有限公测,这是首次在发布说明中正式列出。当前阶段,Essential 在阿里云新加坡区域提供与 Starter 一致的功能集。 - 体验方式: + 试用方法: - 在 [TiDB Cloud 控制台](https://tidbcloud.com/) 创建集群时选择阿里云作为云服务商,即可看到 Essential 选项。 - - 你也可以通过 [阿里云 Marketplace 上的 Essential 产品页](https://www.alibabacloud.com/en/marketplace/tidb?_p_lc=1) 访问。 + - 你也可以通过 [阿里云 Marketplace 上的 Essential 列表](https://www.alibabacloud.com/en/marketplace/tidb?_p_lc=1) 访问。 - 后续计划将扩展阿里云区域覆盖,并增加对 AWS 的支持。 + 下一步计划扩展阿里云区域覆盖并增加 AWS 支持。 - 若你在公测期间体验 Essential on 阿里云,可通过 Web 控制台反馈,或加入我们的 [Slack 社区](https://tidbcommunity.slack.com/archives/CH7TTLL7P) 或 [Discord 社区](https://discord.gg/ukhXbn69Nx)。 + 在公测期间试用 Essential on Alibaba Cloud 后,你可以通过 Web 控制台反馈,也可加入 [Slack](https://tidbcommunity.slack.com/archives/CH7TTLL7P) 或 [Discord](https://discord.gg/ukhXbn69Nx) 社区交流。 - **TiDB Cloud Dedicated** - - [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 在 Google Cloud 上通过优化 NAT 子网分配策略,现支持每区域超过 8 个 Google Private Service Connect(PSC)连接。 + - [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 在 Google Cloud 上通过优化 NAT 子网分配策略,现支持每区域超过 8 个 Google Private Service Connect (PSC) 连接。 - 详情请参见 [通过 Google Cloud Private Service Connect 连接 TiDB Cloud Dedicated 集群](/tidb-cloud/set-up-private-endpoint-connections-on-google-cloud.md#restrictions)。 + 了解更多信息,参见 [通过 Google Cloud Private Service Connect 连接 TiDB Cloud Dedicated 集群](/tidb-cloud/set-up-private-endpoint-connections-on-google-cloud.md#restrictions)。 - 优化 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 监控指标: - 在 [**Advanced**](/tidb-cloud/built-in-monitoring.md#advanced) 分类下,新增 **Affected Rows**、**Leader Count** 和 **Region Count** 指标,提升诊断能力。 - 在 [**Server**](/tidb-cloud/built-in-monitoring.md#server) 分类下,优化 **TiKV IO Bps** 指标,提升准确性和一致性。 - 详情请参见 [TiDB Cloud 内置监控指标](/tidb-cloud/built-in-monitoring.md)。 + 了解更多信息,参见 [TiDB Cloud 内置监控指标](/tidb-cloud/built-in-monitoring.md)。 @@ -278,22 +292,22 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] 将 “TiDB Cloud Serverless” 重命名为 “TiDB Cloud Starter”。 - 自动扩缩容入门方案现称为 “TiDB Cloud Starter”,更好地体现其为新用户提供的角色。所有功能、定价和免费额度保持不变。 + 自动扩缩容入门方案现更名为 “TiDB Cloud Starter”,以更好地体现其为新用户提供的定位。所有功能、定价及免费额度保持不变。 自 2025 年 8 月 12 日(PDT)起,你现有的 Serverless 集群将在 [TiDB Cloud 控制台](https://tidbcloud.com) 中显示为 Starter。你的连接字符串、端点和数据均保持不变,无需修改代码或安排停机。 - **TiDB Cloud Dedicated** - - [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 在 Google Cloud 上通过优化 NAT 子网分配策略,现支持每区域超过 8 个 Google Private Service Connect(PSC)连接。 + - [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 在 Google Cloud 上通过优化 NAT 子网分配策略,现支持每区域超过 8 个 Google Private Service Connect (PSC) 连接。 - 详情请参见 [通过 Google Cloud Private Service Connect 连接 TiDB Cloud Dedicated 集群](/tidb-cloud/set-up-private-endpoint-connections-on-google-cloud.md#restrictions)。 + 了解更多信息,参见 [通过 Google Cloud Private Service Connect 连接 TiDB Cloud Dedicated 集群](/tidb-cloud/set-up-private-endpoint-connections-on-google-cloud.md#restrictions)。 - 优化 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 监控指标: - 在 [**Advanced**](/tidb-cloud/built-in-monitoring.md#advanced) 分类下,新增 **Affected Rows**、**Leader Count** 和 **Region Count** 指标,提升诊断能力。 - 在 [**Server**](/tidb-cloud/built-in-monitoring.md#server) 分类下,优化 **TiKV IO Bps** 指标,提升准确性和一致性。 - 详情请参见 [TiDB Cloud 内置监控指标](/tidb-cloud/built-in-monitoring.md)。 + 了解更多信息,参见 [TiDB Cloud 内置监控指标](/tidb-cloud/built-in-monitoring.md)。 @@ -303,10 +317,10 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - **Cluster**:更灵活地管理你的 TiDB Cloud Dedicated 集群。 - **Region**:展示可部署 TiDB Cloud Dedicated 集群的所有云区域。 - - **Private endpoint connection**:为集群设置安全的私有连接。 + - **Private endpoint connection**:为集群配置安全私有连接。 - **Import**:管理集群的数据导入任务。 - 详情请参见 [TiDB Cloud Dedicated API](https://docs.pingcap.com/tidbcloud/api/v1beta1/dedicated/)。 + 了解更多信息,参见 [TiDB Cloud Dedicated API](https://docs.pingcap.com/tidbcloud/api/v1beta1/dedicated/)。 - 引入 TiDB Cloud Starter 和 Essential API(v1beta1),可自动高效地管理以下资源: @@ -315,13 +329,13 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - **Export**:管理集群的数据导出任务。 - **Import**:管理集群的数据导入任务。 - 详情请参见 [TiDB Cloud Starter 和 Essential API](https://docs.pingcap.com/tidbcloud/api/v1beta1/serverless/)。 + 了解更多信息,参见 [TiDB Cloud Starter 和 Essential API](https://docs.pingcap.com/tidbcloud/api/v1beta1/serverless/)。 -- TiDB Cloud IAM API(v1beta1)支持 API 密钥管理的基于角色的访问控制(RBAC),适用于组织和项目级别。 +- TiDB Cloud IAM API(v1beta1)支持 API 密钥管理的基于角色的访问控制(RBAC),可在组织和项目级别设置。 - 你可以在组织级或项目级设置 API 密钥角色,提升安全性和访问控制。 + 你可以在组织级或项目级设置 API 密钥角色,以提升安全性和访问控制。 - 详情请参见 [TiDB Cloud IAM API](https://docs.pingcap.com/tidbcloud/api/v1beta1/iam/)。 + 了解更多信息,参见 [TiDB Cloud IAM API](https://docs.pingcap.com/tidbcloud/api/v1beta1/iam/)。 ## 2025 年 7 月 31 日 @@ -331,17 +345,17 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] 主要增强点: - - 采用优化的隔离架构重构集成后端,最小化监控指标丢失。 + - 重构集成后端,采用优化的隔离架构,最小化监控指标丢失。 - 根据用户需求新增更多监控指标。 - 优化指标规则,提升一致性。 - 这些增强带来更准确的监控和更可靠的 Datadog、New Relic 集成。 + 这些增强带来更准确的监控,并提升 Datadog 和 New Relic 集成的可靠性。 发布计划: 该预览版现已面向未集成 Datadog 或 New Relic 的组织开放。对于已集成的组织,我们将在下月主动联系你,协商合适的迁移方案和时间表。 - 详情请参见 [集成 TiDB Cloud 与 Datadog(预览版)](/tidb-cloud/monitor-datadog-integration.md) 和 [集成 TiDB Cloud 与 New Relic(预览版)](/tidb-cloud/monitor-new-relic-integration.md)。 + 了解更多信息,参见 [集成 TiDB Cloud 与 Datadog(预览)](/tidb-cloud/monitor-datadog-integration.md) 和 [集成 TiDB Cloud 与 New Relic(预览)](/tidb-cloud/monitor-new-relic-integration.md)。 ## 2025 年 7 月 22 日 @@ -349,24 +363,24 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - 为托管在 Google Cloud 上的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群提供新的节点规格:`32 vCPU, 128 GiB`。 - 该节点规格适用于 TiDB、TiKV 和 TiFlash 节点。 + 该规格适用于 TiDB、TiKV 和 TiFlash 节点。 - 优化 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 中 TiKV 的扩缩容流程,提升集群稳定性。 当你 [更改 TiKV 节点的 vCPU 和内存规格](/tidb-cloud/scale-tidb-cluster.md#change-vcpu-and-ram) 时,TiDB Cloud 会自动检查集群内部服务是否需要扩容以支持新配置。 - 若需扩容,TiDB Cloud 会在操作前提示你确认。 - - 若当前内部服务容量已大于扩容后所需,TiDB Cloud 会保留现有配置,避免不必要的变更影响集群稳定性。 + - 若扩容后内部服务容量已大于所需,TiDB Cloud 会保留现有配置,避免不必要的变更影响集群稳定性。 **控制台变更** - 优化 [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 集群的云存储数据导入体验。 - 导入流程现已简化为 3 步向导,并配备智能预检查。新向导将引导你完成连接设置、文件映射和存储桶扫描。通过扫描,TiDB Cloud 会在导入前准确展示将被导入的文件及其目标位置,大幅降低配置复杂度并防止导入失败。 + 导入流程现简化为 3 步向导,并带有智能预检查。新向导引导你完成连接设置、文件映射和存储桶扫描。通过扫描,TiDB Cloud 会在导入前准确展示将被导入的文件及其目标位置,大幅降低配置复杂度并防止导入失败。 - 详情请参见以下文档: + 了解更多信息,参见以下文档: - - [导入示例数据到 TiDB Cloud Serverless](/tidb-cloud/import-sample-data-serverless.md) + - [将示例数据导入 TiDB Cloud Serverless](/tidb-cloud/import-sample-data-serverless.md) - [从云存储导入 CSV 文件到 TiDB Cloud Serverless](/tidb-cloud/import-csv-files-serverless.md) - [从云存储导入 Apache Parquet 文件到 TiDB Cloud Serverless](/tidb-cloud/import-parquet-files-serverless.md) @@ -382,13 +396,13 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] 该增强可记录备份完成活动,满足安全与合规要求。 - 详情请参见 [控制台审计日志](/tidb-cloud/tidb-cloud-console-auditing.md)。 + 了解更多信息,参见 [控制台审计日志](/tidb-cloud/tidb-cloud-console-auditing.md)。 - 支持在 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) changefeed 中按列值过滤。 - 你现在可以在 changefeed 中使用表达式过滤特定列值,从源头排除无关数据。该功能实现 DML 事件的细粒度过滤,有助于降低资源消耗并提升性能。 + 你现在可以在 changefeed 中使用表达式过滤特定列值,从源头排除无关数据,实现 DML 事件的细粒度过滤,帮助降低资源消耗并提升性能。 - 详情请参见 [Changefeed](/tidb-cloud/changefeed-overview.md)。 + 了解更多信息,参见 [Changefeed](/tidb-cloud/changefeed-overview.md)。 ## 2025 年 6 月 24 日 @@ -396,19 +410,19 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 数据库审计日志(beta)现可按需申请。该功能可记录用户访问详情(如执行的 SQL 语句)历史。 - 申请方式:在 [TiDB Cloud 控制台](https://tidbcloud.com) 右下角点击 **?**,选择 **Request Support**,在 Description 字段填写 “Apply for TiDB Cloud Serverless database audit logging”,然后点击 **Submit**。 + 申请方法:在 [TiDB Cloud 控制台](https://tidbcloud.com) 右下角点击 **?**,选择 **Request Support**,在 Description 字段填写 “Apply for TiDB Cloud Serverless database audit logging”,然后点击 **Submit**。 - [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 支持用户自主管理日志脱敏。 你现在可以为 TiDB Cloud Dedicated 集群启用或禁用日志脱敏,自主管理集群日志的脱敏状态。 - 详情请参见 [用户自主管理日志脱敏](/tidb-cloud/tidb-cloud-log-redaction.md)。 + 了解更多信息,参见 [用户自主管理日志脱敏](/tidb-cloud/tidb-cloud-log-redaction.md)。 -- 托管在 AWS 上的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群现已正式支持使用客户自管加密密钥(CMEK)进行静态加密。 +- 托管在 AWS 上的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群现已正式支持(GA)使用客户自管加密密钥(CMEK)进行静态加密。 - 该功能允许你通过 Key Management Service(KMS)管理的对称加密密钥保护静态数据。 + 该功能允许你通过 Key Management Service (KMS) 管理的对称加密密钥保护静态数据。 - 详情请参见 [在 AWS 上使用客户自管加密密钥进行静态加密](/tidb-cloud/tidb-cloud-encrypt-cmek-aws.md)。 + 了解更多信息,参见 [在 AWS 上使用客户自管加密密钥进行静态加密](/tidb-cloud/tidb-cloud-encrypt-cmek-aws.md)。 ## 2025 年 6 月 17 日 @@ -416,47 +430,47 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - 对于 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群,16 vCPU 和 32 vCPU 的 TiKV 节点最大存储容量由 **6144 GiB** 调整为 **4096 GiB**。 - 详情请参见 [TiKV 节点存储容量](/tidb-cloud/size-your-cluster.md#tikv-node-storage-size)。 + 了解更多信息,参见 [TiKV 节点存储容量](/tidb-cloud/size-your-cluster.md#tikv-node-storage-size)。 **控制台变更** - 重构左侧导航栏,提升整体导航体验。 - 左上角新增 图标,可随时隐藏或显示左侧导航栏。 - - 左上角新增组合框,可一站式快速切换组织、项目和集群。 + - 左上角新增组合框,可快速在组织、项目和集群间切换,集中管理。 - 左侧导航栏的入口会根据组合框当前选择动态调整,帮助你聚焦最相关功能。 - - **Support**、**Notification** 和账号入口现始终固定在左侧导航栏底部,便于快速访问。 + - **Support**、**Notification** 和账户入口现始终固定在左侧导航栏底部,便于快速访问。 ## 2025 年 6 月 4 日 **通用变更** -- [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 在 Microsoft Azure 上现已公测。 +- [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 现已在 Microsoft Azure 公测。 - 至此,TiDB Cloud 已支持三大主流公有云平台 —— AWS、Google Cloud 和 Azure,助你根据业务需求和云战略灵活部署 TiDB Cloud Dedicated 集群。 + 随着本次发布,TiDB Cloud 现已支持三大主流公有云平台 —— AWS、Google Cloud 和 Azure,助你根据业务需求和云战略灵活部署 TiDB Cloud Dedicated 集群。 - AWS 和 Google Cloud 上的所有核心功能在 Azure 上均已支持。 - - 目前 Azure 支持的区域有:美国东部 2、日本东部和东南亚,更多区域即将开放。 + - Azure 目前支持 East US 2、日本东部和东南亚三个区域,后续将支持更多区域。 - Azure 上的 TiDB Cloud Dedicated 集群需 TiDB 版本 v7.5.3 或更高。 - 快速上手请参见以下文档: + 快速上手文档: - [在 Azure 上创建 TiDB Cloud Dedicated 集群](/tidb-cloud/create-tidb-cluster.md) - [通过 Azure Private Endpoint 连接 TiDB Cloud Dedicated 集群](/tidb-cloud/set-up-private-endpoint-connections-on-azure.md) - - [导入数据到 Azure 上的 TiDB Cloud Dedicated 集群](/tidb-cloud/import-csv-files.md) + - [向 Azure 上的 TiDB Cloud Dedicated 集群导入数据](/tidb-cloud/import-csv-files.md) + +- Prometheus 集成为 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群提供更多监控指标。 -- Prometheus 集成为 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群提供更多监控指标,增强监控能力。 - 你现在可以将 `tidbcloud_disk_read_latency`、`tidbcloud_kv_request_duration` 等更多指标集成到 Prometheus,追踪 TiDB Cloud Dedicated 性能的更多方面。 - - 详情及启用方法请参见 [集成 TiDB Cloud 与 Prometheus 和 Grafana(Beta)](/tidb-cloud/monitor-prometheus-and-grafana-integration.md#metrics-available-to-prometheus)。 + + 了解可用指标及启用方法,参见 [集成 TiDB Cloud 与 Prometheus 和 Grafana(Beta)](/tidb-cloud/monitor-prometheus-and-grafana-integration.md#metrics-available-to-prometheus)。 - TiKV [Standard](/tidb-cloud/size-your-cluster.md#standard-storage) 和 [Performance](/tidb-cloud/size-your-cluster.md#performance-and-plus-storage) 存储定价正式发布。 - 优惠期自 **2025 年 6 月 5 日 00:00 UTC** 起结束,届时价格恢复为标准价。TiDB Cloud Dedicated 价格详情请参见 [TiDB Cloud Dedicated 价格明细](https://www.pingcap.com/tidb-dedicated-pricing-details/#node-cost)。 + 优惠期自 **2025 年 6 月 5 日 00:00 UTC** 起结束,届时价格恢复为标准价。更多 TiDB Cloud Dedicated 价格信息,参见 [TiDB Cloud Dedicated 价格详情](https://www.pingcap.com/tidb-dedicated-pricing-details/#node-cost)。 **控制台变更** @@ -472,35 +486,35 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] 该功能可将 TiDB Cloud Dedicated 集群与更多下游系统集成,满足更多数据集成需求。使用该功能需确保集群版本为 v7.5.1 或更高。 - 详情请参见 [下沉到 Apache Pulsar](/tidb-cloud/changefeed-sink-to-apache-pulsar.md)。 + 了解更多信息,参见 [下沉到 Apache Pulsar](/tidb-cloud/changefeed-sink-to-apache-pulsar.md)。 ## 2025 年 5 月 13 日 **通用变更** -- [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 现已支持全文检索(beta),助力 AI 应用。 +- [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 现已支持全文检索(beta),适用于 AI 应用。 - TiDB Cloud Serverless 现已支持全文检索(beta),使 AI 和 RAG(检索增强生成)应用可通过精确关键词检索内容。该功能补充了向量检索(按语义相似度检索内容),两者结合可显著提升 RAG 工作流的检索准确性和答案质量。主要特性包括: + TiDB Cloud Serverless 现支持全文检索(beta),使 AI 和 RAG(检索增强生成)应用可通过精确关键词检索内容。该功能补充了向量检索(按语义相似度检索内容),两者结合可显著提升 RAG 工作流的检索准确性和答案质量。主要特性包括: - 直接文本检索:可直接查询字符串列,无需嵌入。 - - 多语言支持:自动检测并分析多语言文本,甚至同一表内无需指定语言。 - - 基于相关性的排序:结果采用业界标准 BM25 算法排序,相关性最佳。 - - 原生 SQL 兼容:可无缝结合 SQL 过滤、分组、关联等功能使用全文检索。 + - 多语言支持:自动检测并分析多语言文本,即使同一表中包含多种语言,无需指定语言。 + - 相关性排序:结果采用业界标准 BM25 算法进行最优相关性排序。 + - 原生 SQL 兼容:可无缝结合 SQL 的过滤、分组和关联等功能使用全文检索。 - 快速上手请参见 [使用 SQL 进行全文检索](/tidb-cloud/vector-search-full-text-search-sql.md) 或 [使用 Python 进行全文检索](/tidb-cloud/vector-search-full-text-search-python.md)。 + 快速上手,参见 [使用 SQL 进行全文检索](/tidb-cloud/vector-search-full-text-search-sql.md) 或 [使用 Python 进行全文检索](/tidb-cloud/vector-search-full-text-search-python.md)。 - [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群 TiFlash 节点最大存储容量提升: - 8 vCPU TiFlash:由 2048 GiB 提升至 4096 GiB - 32 vCPU TiFlash:由 4096 GiB 提升至 8192 GiB - 该增强提升了 TiDB Cloud Dedicated 集群的分析型数据存储能力,提高了工作负载扩展效率,满足不断增长的数据需求。 + 该增强提升了 TiDB Cloud Dedicated 集群的分析数据存储能力,提高了工作负载扩展效率,满足不断增长的数据需求。 - 详情请参见 [TiFlash 节点存储容量](/tidb-cloud/size-your-cluster.md#tiflash-node-storage)。 + 了解更多信息,参见 [TiFlash 节点存储容量](/tidb-cloud/size-your-cluster.md#tiflash-node-storage)。 - 优化维护窗口配置体验,提供更直观的选项以配置和重新安排维护任务。 - 详情请参见 [配置维护窗口](/tidb-cloud/configure-maintenance-window.md)。 + 了解更多信息,参见 [配置维护窗口](/tidb-cloud/configure-maintenance-window.md)。 - 延长 TiKV [Standard](/tidb-cloud/size-your-cluster.md#standard-storage) 和 [Performance](/tidb-cloud/size-your-cluster.md#performance-and-plus-storage) 存储类型的优惠期,现延长至 2025 年 6 月 5 日。届时价格将恢复为标准价。 @@ -508,7 +522,7 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - 优化 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群 **Backup Setting** 页面布局,提升备份配置体验。 - 详情请参见 [备份与恢复 TiDB Cloud Dedicated 数据](/tidb-cloud/backup-and-restore.md)。 + 了解更多信息,参见 [备份与恢复 TiDB Cloud Dedicated 数据](/tidb-cloud/backup-and-restore.md)。 ## 2025 年 4 月 22 日 @@ -518,7 +532,7 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 集群现支持使用 [AccessKey 对](https://www.alibabacloud.com/help/en/ram/user-guide/create-an-accesskey-pair) 将数据导出到 [阿里云对象存储服务(OSS)](https://www.alibabacloud.com/en/product/object-storage-service)。 - 详情请参见 [从 TiDB Cloud Serverless 导出数据](/tidb-cloud/serverless-export.md#alibaba-cloud-oss)。 + 了解更多信息,参见 [从 TiDB Cloud Serverless 导出数据](/tidb-cloud/serverless-export.md#alibaba-cloud-oss)。 - [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 集群的 TiDB 版本由 [v7.1.3](https://docs.pingcap.com/tidb/v7.1/release-7.1.3) 升级为 [v7.5.2](https://docs.pingcap.com/tidb/v7.5/release-7.5.2)。 @@ -530,7 +544,7 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] 该功能简化了数据迁移到 TiDB Cloud Serverless 的流程。你可以使用 AccessKey 对进行认证。 - 详情请参见以下文档: + 了解更多信息,参见以下文档: - [从 Amazon S3、GCS、Azure Blob Storage 或阿里云 OSS 导入 CSV 文件到 TiDB Cloud Serverless](/tidb-cloud/import-csv-files-serverless.md) - [从 Amazon S3、GCS、Azure Blob Storage 或阿里云 OSS 导入 Apache Parquet 文件到 TiDB Cloud Serverless](/tidb-cloud/import-parquet-files-serverless.md) @@ -541,37 +555,37 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - [TiDB Node Groups](/tidb-cloud/tidb-node-group-overview.md) 功能现已在托管于 AWS 和 Google Cloud 的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群正式发布(GA)。 - 该功能可在单一集群内实现**细粒度计算资源隔离**,助你为多租户或多工作负载场景优化性能和资源分配。 + 该功能支持在单一集群内实现**细粒度计算资源隔离**,帮助你为多租户或多工作负载场景优化性能和资源分配。 **主要优势:** - **资源隔离**: - - 将 TiDB 节点分组为逻辑隔离单元,确保一个组内的工作负载不会影响其他组。 + - 将 TiDB 节点分组为逻辑隔离单元,确保一个组的工作负载不会影响其他组。 - 防止应用或业务单元间的资源争用。 - **简化管理**: - 在单一集群内统一管理所有节点组,降低运维负担。 - - 可按需独立扩缩各组。 + - 可按需独立扩缩各节点组。 - 详细优势请参见 [技术博客](https://www.pingcap.com/blog/tidb-cloud-node-groups-scaling-workloads-predictable-performance/)。快速上手请参见 [管理 TiDB Node Groups](/tidb-cloud/tidb-node-group-management.md)。 + 了解更多优势,参见 [技术博客](https://www.pingcap.com/blog/tidb-cloud-node-groups-scaling-workloads-predictable-performance/)。快速上手,参见 [管理 TiDB Node Groups](/tidb-cloud/tidb-node-group-management.md)。 - 在托管于 AWS 的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群中引入 [Standard storage](/tidb-cloud/size-your-cluster.md#standard-storage) 类型的 TiKV 节点。 - Standard 存储类型适用于大多数工作负载,在性能和成本之间实现平衡。 + Standard 存储类型适用于大多数工作负载,在性能与成本之间实现平衡。 **主要优势:** - **性能提升**:为 Raft 日志预留充足磁盘资源,减少 Raft 与数据存储的 I/O 争用,提升 TiKV 读写性能。 - - **稳定性增强**:将关键 Raft 操作与数据工作负载隔离,确保性能更可预测。 - - **成本效益**:相比之前的存储类型,以更具竞争力的价格提供更高性能。 + - **稳定性增强**:将关键 Raft 操作与数据工作负载隔离,确保更可预测的性能。 + - **成本效益**:与之前的存储类型相比,以更具竞争力的价格提供更高性能。 **可用性:** Standard 存储类型会自动应用于 2025 年 4 月 1 日及以后在 AWS 上新建的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群,且需支持的版本(>= 7.5.5、8.1.2 或 8.5.0)。现有集群仍使用之前的 [Basic storage](/tidb-cloud/size-your-cluster.md#basic-storage) 类型,无需迁移。 - Standard 存储类型的价格与 Basic 存储类型不同。详情请参见 [价格说明](https://www.pingcap.com/tidb-dedicated-pricing-details/)。 + Standard 存储类型的价格与 Basic 存储类型不同。了解更多信息,参见 [价格](https://www.pingcap.com/tidb-dedicated-pricing-details/)。 ## 2025 年 3 月 25 日 @@ -579,9 +593,9 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 集群现已支持为公网端点配置防火墙规则。 - 你现在可以为 TiDB Cloud Serverless 集群配置防火墙规则,控制公网端点的访问。可在 [TiDB Cloud 控制台](https://tidbcloud.com/) 直接指定允许的 IP 地址或范围,提升安全性。 + 你现在可以在 [TiDB Cloud 控制台](https://tidbcloud.com/) 为 TiDB Cloud Serverless 集群配置防火墙规则,控制公网端点的访问。可直接指定允许的 IP 地址或范围,提升安全性。 - 详情请参见 [为 TiDB Cloud Serverless 公网端点配置防火墙规则](/tidb-cloud/configure-serverless-firewall-rules-for-public-endpoints.md)。 + 了解更多信息,参见 [为 TiDB Cloud Serverless 公网端点配置防火墙规则](/tidb-cloud/configure-serverless-firewall-rules-for-public-endpoints.md)。 ## 2025 年 3 月 18 日 @@ -589,48 +603,48 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - 支持为部署在 Google Cloud 的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群创建 TiDB 节点组,提升资源管理灵活性。 - 详情请参见 [TiDB Node Group 概述](/tidb-cloud/tidb-node-group-overview.md)。 + 了解更多信息,参见 [TiDB Node Group 概述](/tidb-cloud/tidb-node-group-overview.md)。 - 支持将数据库审计日志文件存储在 TiDB Cloud,适用于部署在 AWS 的 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群。 你可以直接从 TiDB Cloud 下载这些审计日志文件。该功能仅支持按需申请。 - 详情请参见 [数据库审计日志](/tidb-cloud/tidb-cloud-auditing.md)。 + 了解更多信息,参见 [数据库审计日志](/tidb-cloud/tidb-cloud-auditing.md)。 -- 通过优化多因素认证(MFA)管理,提升 TiDB Cloud 账号安全性。该功能适用于 TiDB Cloud 的密码登录。 +- 通过优化多因素认证(MFA)管理,提升 TiDB Cloud 账户安全性。该功能适用于 TiDB Cloud 的密码登录。 - 详情请参见 [密码认证](/tidb-cloud/tidb-cloud-password-authentication.md)。 + 了解更多信息,参见 [密码认证](/tidb-cloud/tidb-cloud-password-authentication.md)。 ## 2025 年 2 月 18 日 **控制台变更** -- 引入 Connected Care,TiDB Cloud 的全新支持服务。 +- 引入 Connected Care,TiDB Cloud 的新一代支持服务。 Connected Care 服务通过现代通信工具、主动支持和先进 AI 能力,增强你与 TiDB Cloud 的连接,带来无缝且以客户为中心的体验。 Connected Care 服务包含以下功能: - - **Clinic 服务**:高级监控与诊断,优化性能。 - - **IM 中的 AI 聊天**:通过即时通讯工具获得 AI 实时协助。 - - **IM 订阅告警与工单进展**:通过 IM 实时获知告警和工单进展。 + - **Clinic service**:高级监控与诊断,优化性能。 + - **AI chat in IM**:通过即时通讯工具获得 AI 实时协助。 + - **IM 订阅告警与工单更新**:通过 IM 实时获知告警和工单进展。 - **IM 工单交互**:可通过 IM 工具创建和跟进支持工单。 - 详情请参见 [Connected Care 概述](/tidb-cloud/connected-care-overview.md)。 + 了解更多信息,参见 [Connected Care 概述](/tidb-cloud/connected-care-overview.md)。 -- [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 集群现已支持从 GCS 和 Azure Blob Storage 导入数据。 +- 支持从 GCS 和 Azure Blob Storage 导入数据到 [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 集群。 - TiDB Cloud Serverless 现支持从 Google Cloud Storage(GCS)和 Azure Blob Storage 导入数据。你可以使用 Google Cloud 服务账号密钥或 Azure 共享访问签名(SAS)令牌进行认证。该功能简化了数据迁移到 TiDB Cloud Serverless。 + TiDB Cloud Serverless 现支持从 Google Cloud Storage (GCS) 和 Azure Blob Storage 导入数据。你可以使用 Google Cloud 服务账号密钥或 Azure SAS Token 进行认证。该功能简化了数据迁移到 TiDB Cloud Serverless 的流程。 - 详情请参见 [从 Amazon S3、GCS 或 Azure Blob Storage 导入 CSV 文件到 TiDB Cloud Serverless](/tidb-cloud/import-csv-files-serverless.md) 和 [从 Amazon S3、GCS 或 Azure Blob Storage 导入 Apache Parquet 文件到 TiDB Cloud Serverless](/tidb-cloud/import-parquet-files-serverless.md)。 + 了解更多信息,参见 [从 Amazon S3、GCS 或 Azure Blob Storage 导入 CSV 文件到 TiDB Cloud Serverless](/tidb-cloud/import-csv-files-serverless.md) 和 [从 Amazon S3、GCS 或 Azure Blob Storage 导入 Apache Parquet 文件到 TiDB Cloud Serverless](/tidb-cloud/import-parquet-files-serverless.md)。 ## 2025 年 1 月 21 日 **控制台变更** -- [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 集群现已支持每次任务导入单个本地 CSV 文件,文件大小上限由 50 MiB 提升至 250 MiB。 +- [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 集群现支持每次任务导入单个本地 CSV 文件,文件大小上限由 50 MiB 提升至 250 MiB。 - 详情请参见 [导入本地文件到 TiDB Cloud](/tidb-cloud/tidb-cloud-import-local-files.md)。 + 了解更多信息,参见 [导入本地文件到 TiDB Cloud](/tidb-cloud/tidb-cloud-import-local-files.md)。 ## 2025 年 1 月 14 日 @@ -638,9 +652,9 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群新增支持 AWS 区域:`Jakarta (ap-southeast-3)`。 -- 引入 Notification 功能,可通过 [TiDB Cloud 控制台](https://tidbcloud.com/) 实时获知 TiDB Cloud 更新和告警。 +- 引入 Notification 功能,让你可通过 [TiDB Cloud 控制台](https://tidbcloud.com/) 实时获知 TiDB Cloud 更新和告警。 - 详情请参见 [通知](/tidb-cloud/notifications.md)。 + 了解更多信息,参见 [通知](/tidb-cloud/notifications.md)。 ## 2025 年 1 月 2 日 @@ -648,53 +662,49 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - 支持为 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群创建 TiDB 节点组,提升资源管理灵活性。 - 详情请参见 [TiDB Node Group 概述](/tidb-cloud/tidb-node-group-overview.md)。 + 了解更多信息,参见 [TiDB Node Group 概述](/tidb-cloud/tidb-node-group-overview.md)。 -- 支持通过 Private Connect(beta)将 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群连接到 AWS 和 Google Cloud 上的通用 Kafka。 +- 支持通过 Private Connect(beta)将 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群连接到 AWS 和 Google Cloud 的通用 Kafka。 - Private Connect 利用云服务商的 Private Link 或 Private Service Connect 技术,使 TiDB Cloud VPC 内的 changefeed 可通过私有 IP 连接客户 VPC 内的 Kafka,仿佛这些 Kafka 就部署在 TiDB Cloud VPC 内。该功能有助于避免 VPC CIDR 冲突并满足安全合规要求。 + Private Connect 利用云服务商的 Private Link 或 Private Service Connect 技术,使 TiDB Cloud VPC 内的 changefeed 可通过私有 IP 连接客户 VPC 内的 Kafka,就像这些 Kafka 直接托管在 TiDB Cloud VPC 内一样。该功能有助于避免 VPC CIDR 冲突并满足安全合规要求。 - - 对于 AWS 上的 Apache Kafka,请参见 [在 AWS 上设置自建 Kafka Private Link 服务](/tidb-cloud/setup-aws-self-hosted-kafka-private-link-service.md) 配置网络连接。 + - 对于 AWS 上的 Apache Kafka,参见 [在 AWS 上配置自建 Kafka Private Link 服务](/tidb-cloud/setup-aws-self-hosted-kafka-private-link-service.md)。 + - 对于 Google Cloud 上的 Apache Kafka,参见 [在 Google Cloud 上配置自建 Kafka Private Service Connect](/tidb-cloud/setup-self-hosted-kafka-private-service-connect.md)。 - - 对于 Google Cloud 上的 Apache Kafka,请参见 [在 Google Cloud 上设置自建 Kafka Private Service Connect](/tidb-cloud/setup-self-hosted-kafka-private-service-connect.md) 配置网络连接。 - 注意,使用该功能会产生额外的 [Private Data Link 费用](/tidb-cloud/tidb-cloud-billing-ticdc-rcu.md#private-data-link-cost)。 - 详情请参见 [Changefeed 下沉到 Apache Kafka](/tidb-cloud/changefeed-sink-to-apache-kafka.md#network)。 + 了解更多信息,参见 [Changefeed 下沉到 Apache Kafka](/tidb-cloud/changefeed-sink-to-apache-kafka.md#network)。 - Kafka changefeed 新增可配置选项: - - 支持使用 Debezium 协议。Debezium 是一种数据库变更捕获工具,会将每个捕获到的数据库变更转为事件消息并发送到 Kafka。详情请参见 [TiCDC Debezium 协议](https://docs.pingcap.com/tidb/v8.1/ticdc-debezium)。 - + - 支持使用 Debezium 协议。Debezium 是一种数据库变更捕获工具,将每个捕获的数据库变更转换为事件消息并发送到 Kafka。了解更多信息,参见 [TiCDC Debezium 协议](https://docs.pingcap.com/tidb/v8.1/ticdc-debezium)。 - 支持为所有表定义单一分区分发器,或为不同表定义不同分区分发器。 - - 新增两种分发器类型:按时间戳和按列值分区分发 Kafka 消息。 - 详情请参见 [下沉到 Apache Kafka](/tidb-cloud/changefeed-sink-to-apache-kafka.md)。 + 了解更多信息,参见 [下沉到 Apache Kafka](/tidb-cloud/changefeed-sink-to-apache-kafka.md)。 - TiDB Cloud 角色增强: - - 新增 `Project Viewer` 和 `Organization Billing Viewer` 角色,实现更细粒度的访问控制。 - + - 新增 `Project Viewer` 和 `Organization Billing Viewer` 角色,提升 TiDB Cloud 的细粒度访问控制。 - 重命名以下角色: - `Organization Member` 改为 `Organization Viewer` - `Organization Billing Admin` 改为 `Organization Billing Manager` - `Organization Console Audit Admin` 改为 `Organization Console Audit Manager` - 详情请参见 [身份访问管理](/tidb-cloud/manage-user-access.md#organization-roles)。 + 了解更多信息,参见 [身份访问管理](/tidb-cloud/manage-user-access.md#organization-roles)。 -- [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 集群区域级高可用性(beta)。 +- [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 集群区域高可用性(beta)。 - 该功能适用于对基础设施冗余和业务连续性要求极高的工作负载。主要功能包括: + 该功能适用于对基础设施冗余和业务连续性要求极高的工作负载。主要特性包括: - - 节点分布于多个可用区,确保单区故障时高可用。 + - 节点分布于多个可用区,确保主可用区故障时的高可用性。 - 关键 OLTP 组件(如 PD 和 TiKV)跨可用区冗余部署。 - - 主区故障时自动故障转移,最小化服务中断。 - - 目前该功能仅在 AWS 东京(ap-northeast-1)区域开放,且仅可在集群创建时启用。 - - 详情请参见 [TiDB Cloud Serverless 的高可用性](/tidb-cloud/serverless-high-availability.md)。 + - 主可用区故障时自动故障转移,最小化服务中断。 + + 该功能目前仅在 AWS 东京(ap-northeast-1)区域可用,且仅可在集群创建时启用。 + + 了解更多信息,参见 [TiDB Cloud Serverless 的高可用性](/tidb-cloud/serverless-high-availability.md)。 - 新建 [TiDB Cloud Dedicated](/tidb-cloud/select-cluster-tier.md#tidb-cloud-dedicated) 集群的默认 TiDB 版本由 [v8.1.1](https://docs.pingcap.com/tidb/v8.1/release-8.1.1) 升级为 [v8.1.2](https://docs.pingcap.com/tidb/v8.1/release-8.1.2)。 @@ -703,7 +713,6 @@ aliases: ['/tidbcloud/supported-tidb-versions','/tidbcloud/release-notes'] - 数据导出服务增强: - 支持通过 [TiDB Cloud 控制台](https://tidbcloud.com/) 将 [TiDB Cloud Serverless](/tidb-cloud/select-cluster-tier.md#starter) 数据导出到 Google Cloud Storage 和 Azure Blob Storage。 + - 支持通过 [TiDB Cloud 控制台](https://tidbcloud.com/) 导出 Parquet 格式文件。 - - 支持通过 [TiDB Cloud 控制台](https://tidbcloud.com/) 导出 Parquet 文件格式数据。 - - 详情请参见 [从 TiDB Cloud Serverless 导出数据](/tidb-cloud/serverless-export.md) 和 [为 TiDB Cloud Serverless 配置外部存储访问](/tidb-cloud/serverless-external-storage.md)。 \ No newline at end of file + 了解更多信息,参见 [从 TiDB Cloud Serverless 导出数据](/tidb-cloud/serverless-export.md) 和 [为 TiDB Cloud Serverless 配置外部存储访问](/tidb-cloud/serverless-external-storage.md)。 diff --git a/tidb-computing.md b/tidb-computing.md index d1b64ae8a3136..60c83b84c51bd 100644 --- a/tidb-computing.md +++ b/tidb-computing.md @@ -1,60 +1,60 @@ --- -title: TiDB 计算 +title: TiDB Computing summary: 了解 TiDB 数据库的计算层。 --- # TiDB 计算 -基于 TiKV 提供的分布式存储,TiDB 构建了结合了事务处理能力和数据分析能力的计算引擎。本文档首先介绍一种将数据映射到 TiKV 中 (Key, Value) 键值对的算法,然后介绍 TiDB 如何管理元数据,最后说明 TiDB SQL 层的架构。 +基于 TiKV 提供的分布式存储,TiDB 构建了结合强大事务处理能力与数据分析能力的计算引擎。本文档首先介绍一种将 TiDB 数据库表中的数据映射为 TiKV 中 (Key, Value) 键值对的数据映射算法,然后介绍 TiDB 如何管理元数据,最后阐述 TiDB SQL 层的架构。 -关于计算层所依赖的存储方案,本文仅介绍 TiKV 的行存储结构。对于 OLAP 服务,TiDB 引入了列存储方案 [TiFlash](/tiflash/tiflash-overview.md) 作为 TiKV 的扩展。 +关于计算层所依赖的存储方案,本文档仅介绍 TiKV 的行存储结构。对于 OLAP 服务,TiDB 引入了基于列存储的解决方案 [TiFlash](/tiflash/tiflash-overview.md),作为 TiKV 的扩展。 -## 将表数据映射到 Key-Value +## 表数据到 Key-Value 的映射 -本节描述将数据映射到 TiDB 中 (Key, Value) 键值对的方案。待映射的数据包括以下两类: +本节描述了 TiDB 中将数据映射为 (Key, Value) 键值对的方案。这里需要映射的数据包括以下两类: -- 表中每一行的数据,以下简称表数据。 -- 表中所有索引的数据,以下简称索引数据。 +- 表中每一行的数据,以下简称为表数据。 +- 表中所有索引的数据,以下简称为索引数据。 ### 表数据到 Key-Value 的映射 -在关系型数据库中,一个表可能有许多列。为了将每一行中每一列的数据映射到 (Key, Value) 键值对,需要考虑如何构造 Key。首先,在 OLTP 场景下,存在许多对单行或多行数据的增删改查操作,这需要数据库能够快速读取一行数据。因此,每个 Key 应该具有唯一的 ID(显式或隐式),以便快速定位。然后,许多 OLAP 查询需要对整个表进行扫描。如果能将表中所有行的 Key 编码成一个范围,整个表就可以通过范围查询高效扫描。 +在关系型数据库中,一张表可能有很多列。要将一行中每一列的数据映射为 (Key, Value) 键值对,需要考虑如何构造 Key。首先,在 OLTP 场景下,存在大量对单行或多行数据的增、删、改、查操作,需要数据库能够快速读取一行数据。因此,每个 Key 应该有一个唯一的 ID(显式或隐式),以便快速定位。其次,许多 OLAP 查询需要全表扫描。如果能将一张表中所有行的 Key 编码为一个范围,就可以通过范围查询高效地扫描整张表。 基于上述考虑,TiDB 中表数据到 Key-Value 的映射设计如下: -- 为了确保同一表的数据保持在一起,便于搜索,TiDB 为每个表分配一个表 ID,用 `TableID` 表示。表 ID 是在整个集群中唯一的整数。 -- TiDB 为表中的每一行数据分配一个行 ID,用 `RowID` 表示。行 ID 也是整数,在表内唯一。对于行 ID,TiDB 做了一个小的优化:如果表有一个整数类型的主键,TiDB 会使用该主键的值作为行 ID。 +- 为了保证同一张表的数据能够聚集在一起便于查找,TiDB 为每张表分配一个表 ID,用 `TableID` 表示。表 ID 是在整个集群中唯一的整数。 +- TiDB 为表中的每一行数据分配一个行 ID,用 `RowID` 表示。行 ID 也是表内唯一的整数。对于行 ID,TiDB 做了一个小优化:如果表有整型主键,TiDB 会用该主键的值作为行 ID。 -每一行数据根据以下规则编码为 (Key, Value) 键值对: +每一行数据会按照如下规则编码为一个 (Key, Value) 键值对: ``` Key: tablePrefix{TableID}_recordPrefixSep{RowID} Value: [col1, col2, col3, col4] ``` -`tablePrefix` 和 `recordPrefixSep` 都是用来区分 Key 空间中其他数据的特殊字符串常量。具体的字符串常量值在 [Mapping关系总结](#summary-of-mapping-relationships) 中介绍。 +`tablePrefix` 和 `recordPrefixSep` 都是用于区分 Key 空间中其他数据的特殊字符串常量。字符串常量的具体值在 [映射关系总结](#summary-of-mapping-relationships) 中介绍。 ### 索引数据到 Key-Value 的映射 -TiDB 支持主键和二级索引(包括唯一索引和非唯一索引)。与表数据映射方案类似,TiDB 为表的每个索引分配一个索引 ID,用 `IndexID` 表示。 +TiDB 支持主键和二级索引(包括唯一索引和非唯一索引)。与表数据的映射方案类似,TiDB 为表的每个索引分配一个索引 ID,用 `IndexID` 表示。 -对于主键和唯一索引,为了能根据 Key-Value 快速定位对应的 `RowID`,此类 Key-Value 编码如下: +对于主键和唯一索引,需要能够根据键值对快速定位到对应的 `RowID`,因此这类键值对的编码方式如下: ``` -Key: tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue +Key: tablePrefix{TableID}_indexPrefixSep{IndexID}_indexedColumnsValue Value: RowID ``` -对于不需要满足唯一性约束的普通二级索引,一个 Key 可能对应多行数据。需要根据 Key 的范围查询对应的 `RowID`,因此此类 Key-Value 必须按照以下规则编码: +对于不需要满足唯一性约束的普通二级索引,一个 Key 可能对应多行数据。需要根据 Key 的范围查询对应的 `RowID`。因此,键值对的编码方式如下: ``` Key: tablePrefix{TableID}_indexPrefixSep{IndexID}_indexedColumnsValue_{RowID} Value: null ``` -### Mapping关系总结 +### 映射关系总结 -上述所有编码规则中的 `tablePrefix`、`recordPrefixSep` 和 `indexPrefixSep` 都是用来区分 KV 与 Key 空间中其他数据的字符串常量,定义如下: +上述所有编码规则中的 `tablePrefix`、`recordPrefixSep` 和 `indexPrefixSep` 都是用于区分 Key 空间中其他数据的字符串常量,定义如下: ``` tablePrefix = []byte{'t'} @@ -62,11 +62,11 @@ recordPrefixSep = []byte{'r'} indexPrefixSep = []byte{'i'} ``` -还需注意,在上述编码方案中,无论是表数据还是索引数据的 Key 编码方案,表中的所有行具有相同的 Key 前缀,索引的所有数据也具有相同的前缀。具有相同前缀的数据在 TiKV 的 Key 空间中会被一同存放。因此,通过精心设计后缀部分的编码方案,确保编码前后比较保持一致,可以在 TiKV 中以有序的方式存储表数据或索引数据。利用此编码方案,表中的所有行数据会按照 `RowID` 在 TiKV 的 Key 空间中有序排列,特定索引的数据也会根据索引数据的具体值 (`indexedColumnsValue`) 顺序存放。 +还需要注意的是,在上述编码方案中,无论是表数据还是索引数据的 Key 编码方案,同一张表的所有行都有相同的 Key 前缀,同一个索引的所有数据也有相同的前缀。具有相同前缀的数据会在 TiKV 的 Key 空间中排列在一起。因此,通过精心设计后缀部分的编码方式,保证编码前后比较结果一致,表数据或索引数据就可以有序地存储在 TiKV 中。采用这种编码方案,一张表的所有行数据会按照 `RowID` 在 TiKV 的 Key 空间中有序排列,某个索引的数据也会根据索引数据的具体值(`indexedColumnsValue`)在 Key 空间中顺序排列。 ### Key-Value 映射关系示例 -本节通过一个简单示例帮助理解 TiDB 的 Key-Value 映射关系。假设 TiDB 中存在如下表: +本节通过一个简单示例帮助你理解 TiDB 的 Key-Value 映射关系。假设 TiDB 中存在如下表: ```sql CREATE TABLE User ( @@ -87,7 +87,7 @@ CREATE TABLE User ( 3, "PD", "Manager", 30 ``` -每一行数据映射为一个 (Key, Value) 键值对,且该表的主键类型为 `int`,因此 `RowID` 的值即为主键值。假设该表的 `TableID` 为 `10`,则存储在 TiKV 上的表数据为: +每一行数据会被映射为一个 (Key, Value) 键值对,并且该表有一个 int 类型的主键,所以 `RowID` 的值就是主键的值。假设该表的 `TableID` 为 `10`,那么其在 TiKV 上存储的表数据为: ``` t10_r1 --> ["TiDB", "SQL Layer", 10] @@ -95,7 +95,7 @@ t10_r2 --> ["TiKV", "KV Engine", 20] t10_r3 --> ["PD", " Manager", 30] ``` -除了主键外,表中还有一个非唯一的普通二级索引 `idxAge`,其 `IndexID` 为 `1`,存储在 TiKV 上的索引数据为: +除了主键外,该表还有一个非唯一的普通二级索引 `idxAge`。假设 `IndexID` 为 `1`,那么其在 TiKV 上存储的索引数据为: ``` t10_i1_10_1 --> null @@ -103,55 +103,55 @@ t10_i1_20_2 --> null t10_i1_30_3 --> null ``` -上述示例展示了关系模型到 TiDB 中 Key-Value 模型的映射规则,以及此映射方案背后的考虑。 +上述示例展示了 TiDB 从关系模型到 Key-Value 模型的映射规则,以及该映射方案背后的设计考量。 ## 元数据管理 -TiDB 中的每个数据库和表都拥有元数据,指示其定义和各种属性。这些信息也需要持久化存储,TiDB 同样将其存储在 TiKV 中。 +TiDB 中的每个数据库和表都有元数据,描述其定义和各种属性。这些信息同样需要持久化,TiDB 也将这些信息存储在 TiKV 中。 -每个数据库或表都被赋予一个唯一的 ID。作为唯一标识符,在将表数据编码为 Key-Value 时,此 ID 会在 Key 中以 `m_` 前缀编码,构成一个存储序列化元数据的 Key-Value 对。 +每个数据库或表都会分配一个唯一的 ID。作为唯一标识符,当表数据被编码为 Key-Value 时,这个 ID 会以 `m_` 前缀编码到 Key 中,构成一个以序列化元数据为 Value 的键值对。 -此外,TiDB 还使用一个专用的 (Key, Value) 键值对存储所有表结构信息的最新版本号。此 Key-Value 对是全局的,每当 DDL 操作状态发生变化时,其版本号会增加 `1`。TiDB 将此 Key-Value 持久化存储在 PD 服务器中,Key 为 `/tidb/ddl/global_schema_version`,Value 为 `int64` 类型的版本号值。同时,由于 TiDB 支持在线架构变更,它会在后台持续检测存储在 PD 服务器中的表结构信息的版本号是否发生变化,以确保在一定时间内可以获取到版本变更。 +此外,TiDB 还使用专门的 (Key, Value) 键值对来存储所有表结构信息的最新版本号。这个键值对是全局的,每当 DDL 操作状态发生变化时,其版本号会加 1。TiDB 将该键值对持久化存储在 PD server 中,Key 为 `/tidb/ddl/global_schema_version`,Value 是 `int64` 类型的版本号值。同时,由于 TiDB 支持在线变更表结构,它会保持一个后台线程,持续检测 PD server 中表结构信息的版本号是否发生变化。该线程也保证版本变更能在一定时间内被感知到。 ## SQL 层概述 -TiDB 的 SQL 层,TiDB Server,将 SQL 语句转化为 Key-Value 操作,转发到分布式的 Key-Value 存储层 TiKV,组装 TiKV 返回的结果,最终将查询结果返回给客户端。 +TiDB 的 SQL 层(TiDB Server)将 SQL 语句转换为 Key-Value 操作,转发到分布式 Key-Value 存储层 TiKV,组装 TiKV 返回的结果,最终将查询结果返回给客户端。 -该层的节点是无状态的。这些节点本身不存储数据,完全是等价的。 +该层的节点是无状态的。这些节点本身不存储数据,且完全等价。 ### SQL 计算 -最简单的 SQL 计算方案是前述的 [表数据到 Key-Value 的映射](#mapping-of-table-data-to-key-value),它将 SQL 查询映射到 KV 查询,通过 KV 接口获取对应数据,并执行各种计算。 +最简单的 SQL 计算方案就是上一节介绍的 [表数据到 Key-Value 的映射](#mapping-of-table-data-to-key-value),即将 SQL 查询映射为 KV 查询,通过 KV 接口获取对应数据,并进行各种计算。 -例如,要执行 `select count(*) from user where name = "TiDB"` 这条 SQL 语句,TiDB 需要读取表中的所有数据,然后检查 `name` 字段是否为 `TiDB`,如果是,则返回该行。过程如下: +例如,执行 `select count(*) from user where name = "TiDB"` 这个 SQL 语句时,TiDB 需要读取表中的所有数据,然后判断 `name` 字段是否为 `TiDB`,如果是则返回该行。其过程如下: -1. 构造 Key 范围:表中所有 `RowID` 在 `[0, MaxInt64)` 范围内。根据行数据的 Key 编码规则,使用 `0` 和 `MaxInt64` 可以构造一个 `[StartKey, EndKey)` 的范围(左闭右开)。 -2. 扫描 Key 范围:根据上述构造的范围读取 TiKV 中的数据。 -3. 过滤数据:对每一行读取到的数据,计算表达式 `name = "TiDB"`。如果结果为 `true`,则返回该行;否则跳过。 -4. 统计 `Count(*)`:对每一行满足条件的,累计到 `Count(*)` 的结果中。 +1. 构造 Key Range:一张表中所有 `RowID` 的范围是 `[0, MaxInt64)`。根据行数据 Key 的编码规则,使用 `0` 和 `MaxInt64` 可以构造一个左闭右开的 `[StartKey, EndKey)` 范围。 +2. 扫描 Key Range:根据上述构造的 Key 范围,从 TiKV 读取数据。 +3. 过滤数据:对每一行读取到的数据,计算 `name = "TiDB"` 这个表达式。如果结果为 `true`,则返回该行,否则跳过。 +4. 计算 `Count(*)`:对每一行满足条件的数据,累加到 `Count(*)` 的结果中。 -**整个流程示意如下:** +**整个过程如下图所示:** ![naive sql flow](/media/tidb-computing-native-sql-flow.jpeg) -此方案直观且可行,但在分布式数据库场景中存在一些明显的问题: +这种方案直观且可行,但在分布式数据库场景下存在一些明显问题: -- 在扫描过程中,每一行都通过至少一个 RPC 开销的 KV 操作从 TiKV 读取,若数据量很大,开销会非常高。 -- 不需要读取所有不满足条件的行。只需读取满足条件的行即可。 -- 从返回的结果中,只需要满足条件的行数,而不需要行的具体值。 +- 在扫描数据时,每一行都需要通过一次 KV 操作从 TiKV 读取,至少有一次 RPC 开销,如果需要扫描的数据量很大,开销会非常高。 +- 并不是所有行都需要读取,不满足条件的数据无需读取。 +- 查询结果只需要返回满足条件的行数,而不需要这些行的具体值。 ### 分布式 SQL 操作 -为解决上述问题,应尽可能将计算靠近存储节点,避免大量 RPC 调用。首先,应将 SQL 谓词条件 `name = "TiDB"` 下推到存储节点进行计算,只返回符合条件的有效行,从而避免无意义的网络传输。然后,聚合函数 `Count(*)` 也可以下推到存储节点进行预聚合,每个节点只需返回一个 `Count(*)` 的结果,SQL 层再将各节点返回的 `Count(*)` 结果相加。 +为了解决上述问题,计算应尽量靠近存储节点,以避免大量 RPC 调用。首先,SQL 的谓词条件 `name = "TiDB"` 应下推到存储节点进行计算,只返回有效行,避免无意义的网络传输。其次,聚合函数 `Count(*)` 也可以下推到存储节点进行预聚合,每个节点只需返回一个 `Count(*)` 结果,SQL 层再对各节点返回的 `Count(*)` 结果进行求和。 -下图展示了数据逐层返回的流程: +下图展示了数据逐层返回的过程: ![dist sql flow](/media/tidb-computing-dist-sql-flow.png) ### SQL 层架构 -前述部分介绍了 SQL 层的一些功能,希望你对 SQL 语句的处理有了基本了解。实际上,TiDB 的 SQL 层要复杂得多,包含许多模块和层级。下图列出了重要模块及调用关系: +前文介绍了 SQL 层的一些功能,希望你对 SQL 语句的处理流程有了基本了解。实际上,TiDB 的 SQL 层要复杂得多,包含许多模块和层次。下图列出了重要模块及其调用关系: ![tidb sql layer](/media/tidb-computing-tidb-sql-layer.png) -用户的 SQL 请求可以直接或通过 `Load Balancer` 发送到 TiDB Server。TiDB Server 会解析 `MySQL Protocol Packet`,获取请求内容,进行语法和语义分析,生成并优化查询计划,执行查询计划,获取并处理数据。所有数据都存储在 TiKV 集群中,因此在此过程中,TiDB Server 需要与 TiKV 交互以获取数据。最后,TiDB Server 将查询结果返回给用户。 +用户的 SQL 请求会直接或通过 `Load Balancer` 发送到 TiDB Server。TiDB Server 会解析 `MySQL Protocol Packet`,获取请求内容,对 SQL 请求进行语法和语义解析,制定并优化查询计划,执行查询计划,获取并处理数据。所有数据都存储在 TiKV 集群中,因此在此过程中,TiDB Server 需要与 TiKV 交互并获取数据。最后,TiDB Server 需要将查询结果返回给用户。 \ No newline at end of file