主题分区

最近更新时间:2019-11-15 16:12:41

概述

主题分区(Partition)是日志服务的最小读写单元。一个日志主题可以划分多个主题分区,但至少有一个分区。日志服务将 MD5 取值范围作为有效区间范围,通过合并或分裂操作可以自由划分区间,从而控制服务的整体吞吐性能。每个日志主题最多支持50个分区数,建议合理操作使用主题分区,避免资源浪费。

主题分区的基本属性信息:

  • 分区编号
    每个分区在同一个日志主题下有唯一编号,该编号在创建或操作后由系统确定。
  • 分区范围
    每个分区均有区间范围,每个区间范围均为左闭右开区间。
  • 分区状态
    • 读写态:表示当前分区可以进行读写操作。
    • 只读态:表示当前分区仅允许进行读操作,不可再写入数据。

分区范围

分区范围主要用于支持日志按指定 HashKey 的模式写入,一个日志主题的有效范围为 MD5 的取值范围: [00000000000000000000000000000000,ffffffffffffffffffffffffffffffff),所有读写态的主题分区会按左闭右开的原则切分整个取值范围,保证采集的每条日志都能写入到对应的分区里。

日志服务提供两种写入模式:负载均衡模式和 HashKey 模式。

  • 负载均衡模式:每个数据包会随机写入日志主题的某个分区。
  • HashKey 模式:每个数据包会写入包含当前 Key 值的主题分区。

例如,一个日志主题有3个可读写分区,各个分区范围如下所示:

分区编号 状态 分区范围
1 读写 [00000000000000000000000000000000,7fffffffffffffffffffffffffffffff)
2 读写 [7fffffffffffffffffffffffffffffff,a0000000000000000000000000000000)
3 读写 [a0000000000000000000000000000000,ffffffffffffffffffffffffffffffff)

如果写入模式是 HashKey 模式,那么 Key 值为2fffffffffffffffffffffffffffffff的日志数据会写入到分区1中,Key 值为9f000000000000000000000000000000的日志数据会写入到分区2中。

分区读写能力

每个主题分区提供一定能力的读写能力,建议业务根据实际的日志流量规划好分区数,流量超出日志主题的读写能力时应及时分裂分区,若业务流量远低于日志主题的读写能力,建议合并分区节约资源。

  • 每个分区提供5MB/s的读能力。
  • 每个分区提供5MB/s的写能力。

分区状态

主题分区有两种状态:读写态只读态。只有读写态的分区提供数据写入服务,只读态分区不允许写入数据,但在有效期内仍可被消费。创建主题分区时,所有分区状态均为读写态,但合并和分裂操作会改变状态为只读态。

合并分区

合并分区是指将两个范围相邻的两个读写态分区合并成一个分区。合并完成之后,原来的两个分区状态将会变成只读态,数据仍可被消费但是不能写入新数据。新合成的分区为读写态,新分区的范围会覆盖原来两个分区范围。

分裂分区

分裂分区是指将一个读写态的分区分裂成两个小范围分区,分裂分区时需指定一个分裂点的 MD5 值(该值必须大于起止位置,小于终止位置)。分裂成功后,原来的分区状态将会变成只读态,数据仍可被消费但是不能写入新数据。新分裂的分区为读写态,且新分区的范围会覆盖原来分区的范围。