title | summary |
---|---|
HTAP 深入探索指南 |
本文介绍如何深入探索并使用 TiDB 的 HTAP 功能。 |
本指南介绍如何进一步探索并使用 TiDB 在线事务与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 功能。
注意:
如果你对 TiDB HTAP 功能还不太了解,希望快速试用体验,请参阅快速上手 HTAP。
要快速了解 TiDB 在 HTAP 场景下的体系架构与 HTAP 的适用场景,建议先观看下面的培训视频(时长 15 分钟)。注意本视频只作为学习参考,如需了解详细的 HTAP 相关内容,请参阅下方的文档内容。
TiDB HTAP 可以满足企业海量数据的增产需求、降低运维的风险成本、与现有的大数据栈无缝缝合,从而实现数据资产价值的实时变现。
以下是三种 HTAP 典型适用场景:
-
混合负载场景
当将 TiDB 应用于在线实时分析处理的混合负载场景时,开发人员只需要提供一个入口,TiDB 将自动根据业务类型选择不同的处理引擎。
-
实时流处理场景
当将 TiDB 应用于实时流处理场景时,TiDB 能保证源源不断流入系统的数据实时可查,同时可兼顾高并发数据服务与 BI 查询。
-
数据中枢场景
当将 TiDB 应用于数据中枢场景时,TiDB 作为数据中枢可以无缝连接数据业务层和数据仓库层,满足不同业务的需求。
如果想了解更多关于 TiDB HTAP 场景信息,请参阅 PingCAP 官网中关于 HTAP 的博客。
当遇到以下技术场景时,建议使用 TiDB HTAP 提升 TiDB 数据库整体表现:
-
提升分析性能
你的业务中存在某些复杂的分析查询,如聚合、关联等操作。当这些分析查询涉及大量数据(超过 1000 万行)时,如果查询涉及的表无法有效利用索引或者索引的选择性较差,而行存储引擎 TiKV 难以满足查询的性能需求。
-
混合负载隔离
在高并发的 OLTP 业务同时,你可能需要处理一些 OLAP 业务,同时还需要避免 OLAP 查询影响 OLTP 业务性能,确保系统的整体稳定性。
-
简化 ETL 技术栈
当需要加工的数据量为中等规模(100 TB 以内)、数据加工调度流程相对简单、并发度不高(10 以内)时,你可能希望简化技术栈,替换原本需要使用多个不同技术栈的 OLTP、ETL 和 OLAP 系统,使用一个数据库同时满足交易系统以及分析系统的需求,降低技术门槛和运维人员需求。
-
强一致性分析
如果需要对业务数据进行实时、强一致的分析计算,并且要求数据分析结果和业务数据完全一致,避免数据延迟和不一致的问题。
在 TiDB 中,面向在线事务处理的行存储引擎 TiKV 与面向实时分析场景的列存储引擎 TiFlash 同时存在,自动同步,保持强一致性。
更多架构信息,请参考 TiDB HTAP 形态架构。
在深入探索 TiDB HTAP 功能前,请依据你的数据场景部署 TiDB 以及对应的数据分析引擎。大数据场景 (100 T) 下,推荐使用 TiFlash MPP 作为 HTAP 的主要方案,TiSpark 作为补充方案。
-
TiFlash
-
如果已经部署 TiDB 集群但尚未部署 TiFlash 节点,请参阅扩容 TiFlash 节点中的步骤在现有 TiDB 集群中添加 TiFlash 节点。
-
如果尚未部署 TiDB 集群,请使用 TiUP 部署 TiDB 集群,并在包含最小拓扑的基础上,同时增加 TiFlash 拓扑架构。
-
在决定如何选择 TiFlash 节点数量时,请考虑以下几种业务场景:
- 如果业务场景以 OLTP 为主,做轻量级的 Ad hoc OLAP 计算,通常部署 1 个或几个 TiFlash 节点就会产生明显的加速效果。
- 当 OLTP 数据吞吐量对节点 I/O 无明显压力时,每个 TiFlash 节点将会使用较多资源用于计算,这样 TiFlash 集群可实现近似线性的扩展能力。TiFlash 节点数量应根据期待的性能和响应时间调整。
- 当 OLTP 数据吞吐量较高时(例如写入或更新超过千万行/小时),由于网络和物理磁盘的写入能力有限,内部 TiKV 与 TiFlash 之间的 I/O 会成为主要瓶颈,也容易产生读写热点。此时 TiFlash 节点数与 OLAP 计算量有较复杂非线性关系,需要根据具体系统状态调整节点数量。
-
-
TiSpark
- 如果你的业务需要基于 Spark 进行分析,请部署 TiSpark。具体步骤,请参阅 TiSpark 用户指南。
TiFlash 部署完成后并不会自动同步数据,你需要指定需要同步到 TiFlash 的数据表。指定后,TiDB 将创建对应的 TiFlash 副本。
- 如果 TiDB 集群中还没有数据,请先迁移数据到 TiDB。详情请参阅数据迁移。
- 如果 TiDB 集群中已经有从上游同步过来的数据,TiFlash 部署完成后并不会自动同步数据,而需要手动指定需要同步的表,详情请参阅使用 TiFlash。
使用 TiDB 时,你只需输入 SQL 语句进行查询或者写入需求。对于创建了 TiFlash 副本的表,TiDB 会依靠前端优化器自由选择最优的执行方式。
注意:
TiFlash 的 MPP 模式默认开启。当执行 SQL 语句时,TiDB 会通过优化器自动判断并选择是否以 MPP 模式执行。
- 如需关闭 MPP 模式,请将系统变量 tidb_allow_mpp 的值设置为 OFF。
- 如需强制使用 TiFlash 的 MPP 模式执行查询,请将系统变量 tidb_allow_mpp 和 tidb_enforce_mpp 的值设置为 ON。
- 如需查看 TiDB 是否选择以 MPP 模式执行,你可以通过 EXPLAIN 语句查看具体的查询执行计划。如果 EXPLAIN 语句的结果中出现 ExchangeSender 和 ExchangeReceiver 算子,表明 MPP 已生效。
在 TiDB 的使用过程中,可以选择以下方式监控 TiDB 集群运行情况并查看性能数据。
- TiDB Dashboard:查看集群整体运行概况,分析集群读写流量分布及趋势变化,详细了解耗时较长的 SQL 语句的执行信息。
- 监控系统 (Prometheus & Grafana):查看 TiDB 集群各组件(包括 PD、TiDB、TiKV、TiFlash、TiCDC、Node_exporter)的相关监控参数。
如需查看 TiDB 和 TiFlash 集群报警规则和处理方法,请查阅 TiDB 集群报警规则和 TiFlash 报警规则。
在使用 TiDB 的过程中如果遇到问题,请参阅以下文档:
除此之外,你可以在 Github Issues 新建一个 Issue 反馈问题,或者在 AskTUG 提交你的问题。
- 如果要查看 TiFlash 版本、TiFlash 重要日志及系统表,请参阅 TiFlash 集群运维。
- 如果需要移除某个 TiFlash 节点,请参阅缩容 TiFlash 节点。