数据分桶

本文将介绍Fluss表的分桶策略。

分桶(Bucketing)

分桶策略是一种数据分布技术,通过将表中的数据划分为多个小块并分布到多个服务中,以实现高效的数据存储和计算。在创建 Fluss 表时,你可以通过设置 'bucket.num' = '' 属性来指定分桶数量,详情请参见管理表

目前,Fluss 支持三种分桶策略:哈希分桶(Hash Bucketing)、粘性分桶(Sticky Bucketing) 和轮询分桶(Round-Robin Bucketing)。

说明
  • 主键表(Primary-Key Tables)只能使用哈希分桶。

  • 日志表(Log Tables)默认使用粘性分桶,但也可以使用其他两种分桶策略。

哈希分桶(Hash Bucketing)

哈希分桶其优势在于能够将数据均匀分布至多个节点,充分发挥分布式计算的优势,同时具备出色的可扩展性(支持动态调整分桶数量或集群规模),特别适用于海量数据的处理场景。

使用方法:通过为表设置 'bucket.key' = 'col1, col2' 属性来指定用于哈希分桶的分桶键。主键表默认使用主键(不包括分区键)作为分桶键。

粘性分桶(Sticky Bucketing)

粘性分桶可以在写入日志表时实现更大的批次写入,从而减少写入延迟。每次发送一批数据时,粘性分桶会自动切换目标分桶。随着时间的推移,数据记录将逐渐均匀分布至所有分桶中。粘性分桶是日志表的默认分桶策略,这是由于日志表底层采用 Apache Arrow 数据格式,而该格式在处理大数据批次时表现出极高的效率,因此粘性分桶能够更好地发挥其性能优势。

使用方法:通过设置 'client.writer.bucket.no-key-assigner'='sticky' 属性来启用此策略。主键表不支持此策略。

轮询分桶(Round-Robin Bucketing)

轮询分桶是一种简单的策略,在每次写入记录前随机选择一个分桶。这种策略适用于数据分布相对均匀、不存在明显数据倾斜的场景。

使用方法:通过设置 'client.writer.bucket.no-key-assigner'='round_robin' 属性来启用此策略。主键表不支持此策略。