HBase限流机制源码分析

本文深入剖析了HBase的限流机制,从MasterQuotaManager的启动与监听,到Quota的创建、缓存管理和更新。介绍了quota如何在namespace、table和user层面生效,以及RegionServerQuotaManager如何维护和检查配额。当请求超过限额时,系统会抛出ThrottlingException异常。限流规则主要针对单位时间的请求数和请求量,配额会在特定间隔自动refill。建议根据实际需求调整限流策略,如区分Read和Write,限制Scan请求,以及优化client配置以减轻服务端压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

master启动的时候会初始化MasterQuotaManager,并启动该manager;

MasterQuotaManager实现了RegionStateListener接口,可以监听region的状态变化,RegionStateListener接口中定义了三个事件,分别是onRegionSplit,onRegionSplitReverted,onRegionMerged。

MasterQuotaManager中包括了三把锁,分别是namespaceLocks、tableLocks和userLocks。

MasterQuotaManager中包括一个namespaceQuotaManger,namespaceQuotaManger用于在namespace下的table以及table region发生变化时,能够保持住namespace的quota不变。

用户的setQuota请求是路由到master上去执行的。

MasterQuotaManager负责quota表的创建管理,并根据用户命令在quota表中新增、修改或者删除数据,主要的方法就是setQuota(final SetQuotaRequest req),方法中由于使用NamedLock,因此对同一namespace、table和user,同一时刻只有一个修改可被执行。

Quota是被缓存在cache(一个ConcurrentHashMap的数据结构)中的,分别是namespaceQuotaCache、tableQuotaCache和userQuotaCache,由QuotaCache类管理,这个类的成员变量QuotaRefresherChore继承了ScheduledChore,会定期调度,默认的调度周期是5分钟(REFRESH_DEFAULT_PERIOD),此外还有个淘汰因子(EVICT_PERIOD_FACTOR,默认是5)。

QuotaCache只要用于缓存在RegionServer中,RegionServerQuotaManager每从cache中取出一条数据,该条数据的lastquery就会更新为当时的取出时间,如果一条数据长期没有被query,当时间超过了evictPeri

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值