本文将介绍Fluss的日志表。
基本概念
日志表(Log Table)是 Fluss 中的一种表类型,用于按照数据写入的顺序存储数据。日志表仅支持追加记录,不支持更新或删除操作。通常情况下,日志表用于存储高吞吐量的日志数据,类似于 Apache Kafka 的典型应用场景。
日志表是通过在 CREATE TABLE
语句中不指定PRIMARY KEY
子句来创建的。例如,以下 Flink SQL 语句将创建一个包含 3 个分桶的日志表。
CREATE TABLE log_table (
order_id BIGINT,
item_id BIGINT,
amount INT,
address STRING
)
WITH ('bucket.num' = '3')
;
其中,'bucket.num' 应该为一个大于 0 的整数。如果不填该值,则系统将采用集群的默认值(1)作为该表的分桶数量。
桶分配策略
分桶(Bucketing)是 Fluss 中实现并行化和可扩展性的基本单元。Fluss 中的单个表会被划分为多个桶,每个桶是读写操作的最小存储单位。向日志表写入记录时,Fluss 会根据分桶分配策略将每条记录分配到特定的桶中。Fluss 提供以下三种分桶分配策略:
黏性桶策略(默认策略)
随机选择一个桶并持续写入,直到已经达到了设定的最大容量(如大小或记录条数限制) ,无法再继续写入更多记录。
轮询策略
在写入每条记录前,按轮询方式选择目标桶。
基于哈希的分桶
将根据指定桶键(bucket keys)的哈希值分配记录。
更多详情请参见数据分桶。
数据的消费
Fluss中的日志表支持实时数据消费,并严格保持每个桶内数据的写入顺序。具体规则如下:
同一表且同一桶的两条数据记录:先写入 Fluss 表的数据会优先被消费。
同一表但不同桶的两条数据记录:消费顺序无法保证,因为不同桶可能由不同的数据消费任务并行处理。
该文章对您有帮助吗?