日志分区(Shard)是日志服务中数据保存和读写的最小单元,每个分区具备一定的数据读写能力。
分区概述
日志主题由一个或多个日志分区构成,每个日志主题均以 MD5 作为主题中所有分区的总范围,每个分区提供一定的数据读写能力。您可以在创建日志主题时指定分区数量,日志服务也支持通过自动分裂分区功能或手动分裂分区功能来动态扩充当前日志主题的数据读写性能。分区分裂、合并等管理操作会改变分区的状态,但日志服务仅对于读写状态的分区计费。
读写能力
每个日志分区(Shard)均提供一定的读写能力,详细说明请参考下表。
说明
非强制性要求,数据读写超出日志分区的读写能力时,系统会尽可能提供服务,但不承诺服务质量。
分区数量会产生一定费用,请根据业务流量合理规划分区数量,建议设置较小的分区数量,并开启分区自动分裂功能,日志服务会在分区持续超出读写能力 5 分钟自动分裂分区,提供更大的读写性能,避免空闲分区的分区数量过多造成不必要的费用。
分区范围
日志主题以 MD5 的取值范围作为整体范围,日志主题中所有读写状态的分区范围为左闭右开的区间,共同构成整个日志主题的 MD5 范围。创建日志主题时需要指定分区数量,日志服务会根据分区数量自动平均划分整个主题的 MD5 范围。分区也可以执行分裂操作,分裂出来的两个新分区会覆盖原分区的 MD5 范围。
通过日志服务 API 读取数据时,需要指定数据所在的分区 ID。您可以在控制台主题详情页面查看主题中每个分区 ID,或通过 DescribeShards 查看日志主题的分区列表。
写入数据时,可以选择负载均衡模式或通过 HashKey 模式。
- 负载均衡模式:(默认)每个数据包随机写入当前可用的任一读写状态分区中。
- HashKey 模式:指定 MD5 的Key值,将数据写入分区范围包含该 Key 值的分区中。
例如名为 NewTopic 的日志主题中包含3个读写状态的分区和 1 个只读状态的分区,分区 ID、状态及范围如下:
如果写入数据时指定 MD5 的 Key 为 5F,则数据将被写入包含 5F 的 0 号分区中;当您写入数据时指定 MD5 的 Key 值为 8C 时,则数据将被写入包含 8C 的 2 号分区中。
分区状态
日志服务提供以下两种状态的分区:
- 读写:当前分区可写入、读取数据。该状态的分区通常是被创建或分裂出来的新分区,支持进行分裂、合并操作。
- 只读:当前分区中的数据只能被消费,不可写入新的数据。只读分区中的数据过期删除之后,该分区会被日志服务自动删除。只读分区通常是经过分裂操作的旧分区,不参与计费,不支持进行分裂操作。
创建日志主题时,所有分区均为读写状态。分区分裂后,原读写状态的分区会转为只读状态,不支持写入新的数据。同时也会产生多个读写状态的新分区,用于承担后续的数据写入流量。
分裂分区
日志服务支持分裂分区功能,当某个读写状态的分区数据流量超过其服务能力时,可以进行分裂分区操作,即将该分区分裂为多个小范围的分区,从而扩大日志主题的整体读写能力。分裂分区后,原分区的 MD5 范围不变,同时转为只读状态,并在其中的数据过期删除后自动删除。同时分裂操作会产生多个读写状态的新分区,新分区均分原分区的 MD5 范围。
日志服务支持手动分裂分区和自动分裂分区。
- 自动分裂:开启自动分裂功能后,如果某个读写状态的分区持续超过服务能力 5 分钟,日志服务会自动分裂分区。您可以在创建日志主题或修改日志主题时开启自动分裂功能,并指定最大分裂数量。自动分裂分区的操作步骤请参考自动分裂分区。
- 手动分裂:创建日志主题后,如果未开启自动分裂功能,观测到日志主题读写流量超出服务能力时,建议根据业务量及时手动分裂分区。手动分裂分区的数量限制同样受最大分裂数量影响。手动分裂分区操作步骤请参考手动分裂分区。
Tip
推荐开启分区自动分裂功能,以免数据量超出分区的读写能力,触发数据写入流量限制。
自动分裂分区
以创建日志主题后再开启自动分裂功能为例,创建日志主题时设置自动分裂功能的操作请参考日志主题。 - 在日志项目页面,找到指定的日志项目,并单击项目名称。
- 在日志主题页签中,找到指定的日志主题,在其操作列单击编辑。
手动分裂分区
- 在日志项目页面,找到指定的日志项目,并单击项目名称。
- 鼠标悬浮至日志主题分区数量数字上方,弹出分区列表,找到指定的读写状态的分区,单击操作列的分裂。
- 分裂单个分区:单击日志主题操作列的详情,在分区列表区域,找到指定的读写状态的分区,单击操作列的分裂。
- 批量分裂分区:勾选待分裂的读写状态的分区,单击批量分裂。
- 分裂数量应为2的幂数,例如 2、4、8 或 16。
日志服务支持手动合并分区功能,当读写性能过剩时,合并分区可避免空闲分区数量过多造成不必要的费用。合并后,原分区中的数据仍可被消费,但不支持写入新数据。
合并分区是指将两个相邻的读写状态的分区合并为一个新的读写状态分区,合并生成的分区的 MD5 将包含两个分区合并前的 MD5 范围,同时原读写分区将变为只读状态。
说明
- 仅支持手动合并分区,单击合并时,系统自动合并右侧相邻的分区。
- 在日志项目页面,找到指定的日志项目,并单击项目名称。
- 鼠标悬浮至日志主题分区数量数字上方,弹出分区列表,找到指定的读写状态的分区,单击操作列的合并。
查看分区列表
创建日志主题后,您可以在日志主题的详情页面中查看分区列表。
- 在日志项目页面,找到指定的日志项目,并单击项目名称。
- 在日志主题页签中,单击指定日志主题操作列的详情。