Introduction
Hi all,这是我首次在CSDN上发文章,先简单介绍下我自己吧,我叫 Jason Thon,魔都一枚小开发,喜欢撸猫撸狗打电玩,练习时长两年半,擅长各种 Bug 制作技巧与 Debug 手艺。
在这篇文章里,我将介绍一款与我一同练习时长一年,擅长流处理的新型云原生计算框架 Lightflus。在我的公众号文章: Lightflus: 云原生流处理框架 中,小范围地宣传了一下这款框架,并被 Rust 中文社区转发,一时得到了一点关注度。也因此有了动力继续做下去。
Lightflus 如我的文章中所言,是基于我对现代数据栈的思考,尝试去面向未来数据计算框架开发的一款框架。其目标要解决的问题是主流流计算框架如 Flink 所没有解决的:
- Cloud-Native:因为历史原因,目前 Flink 并没有真的做到 Cloud-Native;
- 上手门槛高:Flink 需要很专业的团队才能玩得转,不是所有公司都有 BAT 这样的开发资源的;
- 云中立:Flink 在商业上不是云中立的,客户只能在某云上使用 Flink 的云版本。这就导致 许多用户怕被云厂商绑定,只能去做各种重复建设的活,浪费大量时间和资源在一件人效比极低的事情上。而 Lightflus 与云无关,理论上什么云环境都能用,用户可以将 Lightflus 非常简单地部署到自己的公有云或私有云环境中;
- Pay-as-you-go:因为沉重的历史包袱,Flink 实现 SaaS 化比较艰难,用户需要付很多额外的钱在一个对主营业务没那么重要的东西上。但 Lightflus 模块化和轻量化的设计,SaaS 化的路径就会简单很多;
Lightflus 尝试通过技术创新,来解决如上的问题。简单来讲,Lightflus 给开发者搭了个云端的流计算“开发环境”,让他们能够更加简单(便宜)地去开发流数据的价值。在未来 Cloud IDE 成熟后,会进一步释放 Lightflus 在 DataOps 上的价值;
Lightflus Demo 的功能一览
在 Demo 版本中,Lightflus 将提供如下的 features:
- 仅支持
Typescript API
; - 一个小巧的
Rust
编写的 Runtime; - 支持
map
,reduce
,flatMap
,filter
算子,在1.0.1-alpha
版本中支持window
算子; - 提供如下 Data Source 的支持:
Kafka
- 提供如下 Data Sink 的支持:
MySQL
,Redis
,Kafka
; - 支持
Docker
部署;
由于计划中的 CLI 工具在 demo 里并不提供,因此发布时间比计划的提前了。此外,Demo版本及其之后的release版本都会提供社区支持,大家有问题都可以在Gitter上提出来。
Github 与社区
欢迎大家到 Github 去试用下 Lightflus,我们非常希望能得到各位的任何关于产品的建议!
再谈谈社区,其实我是非常欢迎任何人来做 Lightflus 的 contributor 的,但社区是有规范的(包括 PR、提 issue 等),这一块我会逐步完善起来。对于开源生态,我都是拥抱的态度,我会让 Lightflus 加速融入到开源生态中。
下面让我们来详细领略下 Lightflus 这款新型流计算框架吧~
Lightflus 的技术架构
应用架构
Lightflus 的整体应用架构如下图
Lightflus 本质是个分布式实时 DAG 计算引擎,它从指定的流数据源(如 Kafka、MQTT 等)消费数据,经过 User-Defined 的 DAG 计算出结果后,写入指定的数据存储层(如 MySQL,Redis,ElasticSearch 等)或数据管道(如 Kafka)中。
技术架构
Lightflus 由 Master 和 Worker 节点组成,其中 Master 节点有 ApiServer 和 Coordinator 两个服务;
- ApiServer 主要负责与 Client 端或 CLI 工具的交互,提供标准的 REST Api 接口;
- Coordinator 负责集群管理、Checkpoint 管理、动态扩缩容管理等;
- Worker 是主要的计算负载并负责与数据源 Connection 、计算中间结果的 Dispatch、状态管理等;计算图会被构建成一个 Actor System,通过 Channel 在 Actor 间同步计算结果;
API
Lightflus 采用 Typescirpt
作为 API 的开发语言,这么做有几个目的:
Typescirpt
是类型安全的,可以避免很多类型错误,还能够规定 Dataflow 算子转换的输入输出结构,减轻 Runtime 的负担;Typescript
可以有两种编译中间产物:JavaScript
和WebAssembly
,而两者的 Runtime 现在正逐步融合,在未来,用户可以根据自己的需求来决定 Lightflus 使用哪种编译中间产物;Typescript
在写法上与 Java 差异不太大(当然,Typescript
玩法更加丰富),现有的数据开发工程师也能很容易转过来;Typescript
是 web 的语言,天生支持云端化;
Runtime
Lightflus 的核心计算引擎是 Rust
编写的,这么做的目的是:
Rust
能很大程度上保证内存安全,并且拥有接近 C/C++ 的性能;Rust
生态内有成熟的技术可以作为Typescirpt
运行的底层引擎;Rust
在工程化上更加成熟,能很好地模块化,还能通过软件工程来有效管理 Lightflus 的代码产出质量;
核心计算引擎采用 Actor
大规模并行计算模型,这种并行计算模型经过时间充分的检验,证明是目前大规模并行流处理最适合的计算模型,在可扩展性、高可用、容错上也都有成熟的解决方案。Lightflus 是站在巨人的肩膀上起步的,产品能够更快地到达较高的成熟度;
Let’s Try Lightflus!
本地部署 Standalone 集群
在 Flink 的世界里,即使是最简单的流任务(如 word count),想要在线上运转起来,都需要折腾不少时间。虽然 Flink 社区努力把 Flink 的使用门槛降到最低,但你想让它哪怕在本地环境正常工作,依旧需要花费不少力气。
而 Lightflus 就非常简单了,只需要执行一行命令:
docker-compose up
docker-compose.yml
文件配置如下:
coordinator:
image