主题分区
最近更新时间: 2024-10-17 17:10:00
概述
主题分区(Partition)是日志服务(Cloud Log Service,CLS)的最小读写单元。一个日志主题可以划分多个主题分区,但至少有一个分区。日志服务将 MD5 取值范围作为有效区间范围,通过合并或分裂操作可以自由划分区间,从而控制服务的整体吞吐性能。每个日志主题最多支持50个分区数,建议合理操作使用主题分区,避免资源浪费。
主题分区的基本属性信息:
分区编号:每个分区在同一个日志主题下有唯一编号,该编号在创建或操作后由系统确定。
分区范围:每个分区均有区间范围,每个区间范围均为左闭右开区间。
分区状态:
读写态:表示当前分区可以进行读写操作。
只读态:表示当前分区仅允许进行读操作,不可再写入数据。
说明:
主题分区概念较为复杂,实际使用过程中建议使用自动分裂功能,CLS 将根据日志数据量自动调整主题分区,无需过多关注。
分区范围
分区范围主要用于支持日志按指定 HashKey 的模式写入,一个日志主题的有效范围为 MD5 的取值范围: [00000000000000000000000000000000,ffffffffffffffffffffffffffffffff)
,所有读写态的主题分区会按左闭右开的原则切分整个取值范围,保证采集的每条日志都能写入到对应的分区里。
日志服务提供两种写入模式:负载均衡模式和 HashKey 模式。
负载均衡模式:每个数据包会随机写入日志主题的某个分区。
HashKey 模式:每个数据包会写入包含当前 Key 值的主题分区。
例如,一个日志主题有3个可读写分区,各个分区范围如下所示:
分区编号 | 状态 | 分区范围 |
---|---|---|
1 | 读写 | [00000000000000000000000000000000,7fffffffffffffffffffffffffffffff) |
2 | 读写 | [7fffffffffffffffffffffffffffffff,a0000000000000000000000000000000) |
3 | 读写 | [a0000000000000000000000000000000,ffffffffffffffffffffffffffffffff) |
如果写入模式是 HashKey 模式,那么 Key 值为2fffffffffffffffffffffffffffffff
的日志数据会写入到分区1中,Key 值为9f000000000000000000000000000000
的日志数据会写入到分区2中。
分区读写能力
每个主题分区提供一定能力的读写能力,建议业务根据实际的日志流量规划好分区数,流量超出日志主题的读写能力时应及时分裂分区,若业务流量远低于日志主题的读写能力,建议合并分区节约资源。
功能 | 说明 |
---|---|
频控 | - 写请求: 单个分区写上限500qps。超限会拒绝请求,返回状态码429,提示错误 SpeedQuotaExceed - 读请求: 单个分区读上限200qps。超限会拒绝请求,返回状态码429,提示错误 SpeedQuotaExceed |
流控 | 写流量: 单个分区写流量上限5MB/s。超限会截断数据,返回状态码429,提示错误 SpeedQuotaExceed |
分区状态
主题分区有两种状态:读写态和只读态。只有读写态的分区提供数据写入服务,只读态分区不允许写入数据,但在有效期内仍可被消费。创建主题分区时,所有分区状态均为读写态,但合并和分裂操作会改变状态为只读态。
合并分区
合并分区是指将两个范围相邻的两个读写态分区合并成一个分区。合并完成之后,原来的两个分区状态将会变成只读态,数据仍可被消费但是不能写入新数据。新合成的分区为读写态,新分区的范围会覆盖原来两个分区范围。
分裂分区
分裂分区是指将一个读写态的分区分裂成两个小范围分区,分裂分区时需指定一个分裂点的 MD5 值(该值必须大于起止位置,小于终止位置)。分裂成功后,原来的分区状态将会变成只读态,数据仍可被消费但是不能写入新数据。新分裂的分区为读写态,且新分区的范围会覆盖原来分区的范围。