Fluss 简介
Fluss 是一种为实时分析而构建的流式存储,可以用作 Lakehouse 架构的实时数据层。
Fluss 支持亚秒级延迟的流式读取
和写入
,并以列格式存储数据,从而提高查询性能并降低存储成本。它提供灵活的表类型,包括仅追加日志表和可更新的 PrimaryKey 表,以满足不同的实时分析和处理需求。
在作者看来,其实 Fluss 目前的主要替换者是 Kafka,它的出现也是为了替换 kafka 在实时数仓链路中的部分,解决 Kafka 的缺点:
- 数据存储:kafka 数据存储在 Broker 本地,且一般只会存 7 天数据,在笔者公司更短,因为磁盘成本和数据量问题,实际下来kafka数据存储只有48小时,而Fluss 可以自动将数据存入远端存储,典型的就是HDFS,极大降低存储成本
- 数据查询:kafka 中间数据查询困难,数据排查只能根据异常数据时间,从某个时间点消费往后数据进行排查,而 Fluss 可以实现点查(K,V特性)
- 性能:当实时任务数据重刷或者数据查询时,指定历史偏移量或者时间消费kafaka中的历史数据,会导致 Kafka 的缓存失效,所有数据全部从磁盘拉取,影响性能;还有一点就是Fluss支持列裁剪,用户可以指读取需要的数据列降低 IO 开销。
- 数据落盘: 在Kafka的架构中,如果需要数据落盘,方便数仓开发人员排查问题,需要单独的任务进行处理写入 Paimon 或者 iceberg 等数据湖格式存储;Fluss 支持 LakeStorage 存储,降低了这一部分的使用门槛(当然 Lake storage 功能也是单独的写入Paimon等数据湖的Flink任务,但是整个Fluss库只需一个任务配置即可,不需要重复开发)。
有其他看法欢迎大家一起讨论。
安装方式
官方支持 Local Cluster (单机模式),Distributed Cluster (分布式机器模式),Docker 三种,这是部署 Distributed Cluster 模式
部署
环境准备
- linux 系统
- jdk 17 及以上
wget https://download.oracle.com/java/17/archive/jdk-17.0.12_linux-x64_bin.tar.gz
- zookeeper 集群 最好 3.8以上,本次使用,3.8.4
部署规划
部署 一个 协调服务器(coordinator server) 和跨三台机器的多个 **Tablet 服务器 (tablet server)**组成的 Fluss 集群
组件 | 地址 | |
---|---|---|
CoordinatorServer | 10.255.10.1 | |
TabletServer | 10.255.10.2 | |
TabletServer | 10.255.10.3 | |
TabletServer | 10.255.10.4 |
下载 Fluss
下载地址:https://alibaba.github.io/fluss-docs/downloads/
部署规划
组件 | 地址 | |
---|---|---|
CoordinatorServer | 10.255.10.1 | |
TabletServer | 10.255.10.2 | |
TabletServer | 10.255.10.3 | |
TabletServer | 10.255.10.4 | |
**ZK 地址 ** | 10.255.10.2:2181,10.255.10.3:2181,10.255.10.4:2181 |
配置
配置文件 conf/server.yaml
以下列出部署的主要配置信息
- Coordinator Server 配置
#==============================================================================
# Zookeeper
#==============================================================================
# zookeeper 地址
zookeeper.address: 10.255.10.2:2181,10.255.10.3:2181,10.255.10.4:2181
zookeeper.path.root: /fluss
#==============================================================================
# Common
#==============================================================================
# THe default bucket number to be used when creating tables if no bucket number
# fluss 表默认的分桶数
default.bucket.number: 1
# The default replication factor to be used when creating tables if no replication
# fluss 表默认的备份
default.replication.factor: 2
# The local data directory to be used for Fluss to storing kv and log data.
# fluss 表本地存储路径,fluss 会将近期的实时数据存储在本地目录
data.dir: /data/fluss-data
# The remote data directory to be used for Fluss. Now, it is only used for storing
# 开启远程存储,这里使用 HDFS , fluss 可以将快照信息和历史数据存入远程存储
remote.data.dir: hdfs://HDPCluster/fluss-remote-data
#==============================================================================
# Coordinator Server
#==============================================================================
# Coordinator Server 地址
coordinator.host: 10.255.10.1
coordinator.port: 9123
- Tablet Server 配置
#==============================================================================
# Zookeeper
#==============================================================================
# zookeeper 地址
zookeeper.address: 10.255.10.2:2181,10.255.10.3:2181,10.255.10.4:2181
zookeeper.path.root: /fluss
#==============================================================================
# Common
#==============================================================================
# THe default bucket number to be used when creating tables if no bucket number
# fluss 表默认的分桶数
default.bucket.number: 1
# The default replication factor to be used when creating tables if no replication
# fluss 表默认的备份
default.replication.factor: 2
# The local data directory to be used for Fluss to storing kv and log data.
# fluss 表本地存储路径,fluss 会将近期的实时数据存储在本地目录
data.dir: /data/fluss-data
# The remote data directory to be used for Fluss. Now, it is only used for storing
# 开启远程存储,这里使用 HDFS , fluss 可以将快照信息和历史数据存入远程存储
remote.data.dir: hdfs://HDPCluster/fluss-remote-data
#==============================================================================
# Coordinator Server
#==============================================================================
# Coordinator Server 地址
coordinator.host: 10.255.10.1
coordinator.port: 9123
#==============================================================================
# Tablet Server
#==============================================================================
# Tablet Server 配置
tablet-server.host: 10.255.10.2
# The id of the tablet server to be run, must be set and should be different
# when running multiple tablet servers.
tablet-server.id: 1
-
tablet-server.id
是 TabletServer 的唯一 id,如果你有多个 TabletServer,你应该为每个 TabletServer 设置不同的 id。所以 TabletServer 其他配置都一样只有tablet-server.host
和tablet-server.id
需要更改,这里tablet-server.id
分别为1, 2, 3
-
对于其他一些属性,您可以参考 配置 (https://alibaba.github.io/fluss-docs/docs/maintenance/configuration/)了解更多详细信息。
-
注意 zookeeper 需要 3.8.x 版本 否则无法启动
-
注意 关于
remote.data.dir
必须以hdfs
开头,如果需要使用 nns 名称 这里是HDPCluster
代替 namenode 的host:port
形式,需要在部署机器配置HADOOP_CONF_DIR
环境变量,否则会报错无法识别HDPCluster hostname
错误
服务启动
以上即完成了Fluss 分布式部署, 目前暂未发现 coordinator server 高可用部署方式 后续发现进行更新
- coordinator启动
./bin/coordinator-server.sh start
- tablet启动
./bin/tablet-server.sh start