从目前官方文档的介绍来看,TiDB层做流控,TiKV做优先级调度,TiSpark datasource api借助tikv-client-java读写tikv/tiflash,似乎不受资源管控。
测试TiSpark v3.2.2,配置spark.sql.auth.enable=true,未发现通过spark.sql.tidb.user指定用户执行读写受到资源限制。
TiDB、TiKV和TiSpark在资源管理和控制方面有不同的角色和机制。
首先,TiDB层确实负责流控,它通过限制并发查询的数量和资源使用来保护系统的稳定性。TiDB使用了一些参数来控制并发查询的数量和资源使用,例如tidb_max_concurrent_queries
和tidb_mem_quota_query
等。这些参数可以在TiDB配置文件中进行设置,以限制并发查询的数量和资源使用。
其次,TiKV负责存储和处理数据,并提供了优先级调度的机制。TiKV使用了一些调度算法来管理和调度不同请求的执行顺序和优先级。例如,TiKV使用了Raft协议来保证数据的一致性和可靠性,并使用了调度器来管理和调度不同的请求。
然后,TiSpark是一个TiDB的连接器,它通过TiKV和TiFlash来读写数据。TiSpark使用了TiKV和TiFlash的客户端库(如tikv-client-java)来与TiKV和TiFlash进行交互。在TiSpark中,资源管理和控制主要由Spark本身的资源管理机制来处理。Spark提供了一些资源管理和控制的功能,例如任务调度、资源分配和优先级调度等。您可以使用Spark的配置参数来控制资源的使用和分配。
关于您提到的TiSpark的数据源API和资源管控的问题,TiSpark的数据源API确实是通过tikv-client-java来读写TiKV和TiFlash的数据。然而,TiSpark的数据源API并不直接受到TiDB的资源管控的限制。这是因为TiSpark是作为一个独立的Spark应用程序运行的,它使用了Spark的资源管理机制来管理和控制资源的使用。因此,即使在启用了TiDB的资源管控功能(如设置spark.sql.auth.enable=true
和spark.sql.tidb.user
),TiSpark的数据源API仍然可以通过Spark的资源管理机制来使用资源。
总结起来,TiDB、TiKV和TiSpark在资源管理和控制方面有不同的角色和机制。TiDB负责流控,TiKV负责优先级调度,而TiSpark使用Spark的资源管理机制来管理和控制资源的使用。在使用TiSpark的数据源API时,资源管理和控制主要由Spark的资源管理机制来处理。
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。