本文将介绍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'
属性来启用此策略。主键表不支持此策略。