背景
实时即未来,在实时处理流域 Apache Spark 和 Apache Flink 是一个伟大的进步,尤其是Apache Flink被普遍认为是下一代大数据流计算引擎, 我们在使用 Flink & Spark 时发现从编程模型, 启动配置到运维管理都有很多可以抽象共用的地方, 我们将一些好的经验固化下来并结合业内的最佳实践, 通过不断努力终于诞生了今天的框架 — StreamX, 项目的初衷是 — 让流处理更简单, StreamX不断提供了开发时便捷Api来加速开发, 还提供了一站式平台。
Flink流批一体越发成熟, 越来越多的企业开始大规模应用 Flink 来建设平台, 而Flink平台的建设是目前很多企业应用Flink的一道门槛。StreamX为解决这些痛点而生, 任务提交托管, 运维监控, FlinkSQL开发等做了很好的支持, Flink SQL任务独创型将SQL和依赖分离, 用户只管写SQL提交即可, 其他更多复杂的操作交给StreamX。
核心特性
- 开发脚手架
- 多版本Flink支持(1.11,x, 1.12.x, 1.13 )
- 一系列开箱即用的connectors
- 支持项目编译功能(maven 编译)
- 在线参数配置
- 支持Applicaion 模式, Yarn-Per-Job, K8s 模式启动
- 快捷的日常操作(任务启动、停止、savepoint,从savepoint恢复)
- 支持火焰图
- 支持notebook(在线任务开发)
- 项目配置和依赖版本化管理
- 支持任务备份、回滚(配置回滚)
- 在线管理依赖(maven pom)和自定义jar
- 自定义udf、连接器等支持
- Flink SQL WebIDE
- 支持 catalog、hive
- 任务运行失败发送告警邮件
- 支持失败重启重试
- 从任务开发阶段到部署管理全链路支持
- ...
组成部分
Streamx有三部分组成,分别是streamx-core,streamx-pump 和 streamx-console
streamx-core
streamx-core 定位是一个开发时框架,关注编码开发,规范了配置文件,按照约定优于配置的方式进行开发,提供了一个开发时 RunTime Content和一系列开箱即用的Connector,扩展了DataStream相关的方法,融合了DataStream和Flink sql api,简化繁琐的操作,聚焦业务本身,提高开发效率和开发体验
streamx-pump
pump 是抽水机,水泵的意思,streamx-pump的定位是一个数据抽取的组件,类似于flinkx,基于streamx-core中提供的各种connector开发,目的是打造一个方便快捷,开箱即用的大数据实时数据抽取和迁移组件,并且集成到streamx-console中,解决实时数据源获取问题,目前在规划中
streamx-console
streamx-console 是一个综合实时数据平台, 低代码(Low Code)平台, FlinkSQL 开发工作台, 可以较好的管理Flink任务,集成了项目编译、发布、参数配置、启动、savepoint,火焰图(flame graph),Flink SQL, 监控等诸多功能于一体,大大简化了Flink任务的日常操作和维护,融合了诸多最佳实践。旧时王谢堂前燕,飞入寻常百姓家,让大公司有能力研发使用的项目,现在人人可以使用, 目标是打造成一个实时数仓,流批一体的一站式大数据解决方案。
LIVE DEMO
下面我们使用 streamx-quickstart 来快速开启 streamx-console 之旅, streamx-quickstart 是 StreamX 开发 Flink 的上手示例程序,具体请查阅:
Github: https://github.com/streamxhub...
Gitee: https://gitee.com/streamxhub/...
DataStream 任务
- 下面的示例演示了如何开发部署一个 DataStream 应用
https://www.bilibili.com/vide...
StreamX 开发部署DataStream作业演示
FlinkSql 任务
- StreamX 开发部署FlinkSQL 作业演示
https://www.bilibili.com/vide...
项目演示使用到的 flink sql 如下
CREATE TABLE user_log ( user_id VARCHAR, item_id VARCHAR, category_id VARCHAR, behavior VARCHAR, ts TIMESTAMP(3) ) WITH ( 'connector.type' = 'kafka', -- 使用 kafka connector 'connector.version' = 'universal', -- kafka 版本,universal 支持 0.11 以上的版本 'connector.topic' = 'user_behavior', -- kafka topic 'connector.properties.bootstrap.servers'='kafka-1:9092,kafka-2:9092,kafka-3:9092', 'connector.startup-mode' = 'earliest-offset', -- 从起始 offset 开始读取 'update-mode' = 'append', 'format.type' = 'json', -- 数据源格式为 json 'format.derive-schema' = 'true' -- 从 DDL schema 确定 json 解析规则 ); CREATE TABLE pvuv_sink ( dt VARCHAR, pv BIGINT, uv BIGINT ) WITH ( 'connector.type' = 'jdbc', -- 使用 jdbc connector 'connector.url' = 'jdbc:mysql://test-mysql:3306/test', -- jdbc url 'connector.table' = 'pvuv_sink', -- 表名 'connector.username' = 'root', -- 用户名 'connector.password' = '123456', -- 密码 'connector.write.flush.max-rows' = '1' -- 默认 5000 条,为了演示改为 1 条 ); INSERT INTO pvuv_sink SELECT DATE_FORMAT(ts, 'yyyy-MM-dd HH:00') dt, COUNT(*) AS pv, COUNT(DISTINCT user_id) AS uv FROM user_log GROUP BY DATE_FORMAT(ts, 'yyyy-MM-dd HH:00');
使用到 maven 依赖如下
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-sql-connector-kafka_2.11</artifactId> <version>1.12.0</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-jdbc_2.11</artifactId> <version>1.12.0</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-json</artifactId> <version>1.12.0</version> </dependency>
Kafka 模拟发送的数据如下
{"user_id": "543462", "item_id":"1715", "category_id": "1464116", "behavior": "pv", "ts":"2021-02-01T01:00:00Z"} {"user_id": "662867", "item_id":"2244074","category_id":"1575622","behavior": "pv", "ts":"2021-02-01T01:00:00Z"} {"user_id": "662867", "item_id":"2244074","category_id":"1575622","behavior": "pv", "ts":"2021-02-01T01:00:00Z"} {"user_id": "662867", "item_id":"2244074","category_id":"1575622","behavior": "learning flink", "ts":"2021-02-01T01:00:00Z"}
任务启动流程
任务启动流程图如下
回顾2021
时间过的真快, 在2021年4月的时候 StreamX宣布开源, 从正式开源起 ,我们就秉承开源开放 ,公开透明的原则,鼓励和欢迎开发者们参与进来共同建设,目前star共计790+,fork共计276,开发者共计 23位,其中有 3 位已经是核心贡献者,issue 和 PR 处于活跃状态,我们总结了用户常见问题 FAQ,已有两个用户交流群,保持良好氛围,其中不乏apache项目的committer,PMC,各类框架平台作者,公号作者等...
2021 年,我们持续保持版本迭代节奏,积极发展开发者, 分别于 7 月 14 日和 11 月 16 日 发布了 1.1.0 Release 和 1.2.0 Release 版本,接近 21 位 Contributor 为 StreamX 提交了多项优化和修复,诸多新功能加入到 StreamX 中,在任务提交和on k8s以及Flink多版本的支持上,我们探索出了一条特色道路,为后续SQL Data Studio等相关功能的建设奠定了坚实的基础。
在2021年11月,StreamX成功被开源中国评选为GVP - Gitee「最有价值开源项目」这对我们来说是莫大的鼓励,我们做的东西终于被认可了。
在 2021 年的最后一天,我们也非常荣幸可以获得 2021 年度 OSC 中国开源项目评选的 「最受欢迎项目」,这对我们而言是最好的新年礼物。
未来规划
目前 StreamX 已完成 Flink 任务的托管,这部分工作非常重要,感谢所有开发者们付出的努力。但这只是万里长征第一步,接下来的 1.3.0 中我们关注的重点是流式数仓(Streaming-Warehouse) 和 云原生(Cloud-Native)。计划会新增全新的开发工作台 - SQL Workbench(草稿、调试、预览、发布、锁定、版本管理...)具体请移步 1.3.0的 roadmap。
1.3.0 roadmap: StreamX 1.3.0 roadmap
StreamX 遵循 Apache-2.0 开源协议,将会是个长期更新的活跃项目,自项目开源以来就受到很多同行的关注和认可,其中不乏业内大佬。目前在没有任何形式推广的情况下,靠口碑在不到一年的时间里已经累计 780+ star,于2021年11月荣获开源中国「最有价值开源项目」。随后荣获「2021 年度 OSC 中国开源项目评选」的「最受欢迎项目」,我们坚信未来会更好。
流批一体,流式数仓,数据湖是大数据领域的趋势,StreamX 虽离这个目标还有一段距离,但我们始终坚信: 道阻且长,行则将至,行而不辍,未来可期。我们会进一步积极进取,相关功能持续迭代,进一步建设好社区,和所有社区小伙伴一起努力,让 StreamX 成为一个功能完善,体验更佳,用户更多的产品,可以被更多人认可。真诚欢迎热爱开源的伙伴加入到贡献中来,为做一个优秀实用的好项目献上一份自己的力量。
附:
Streamx 官网: StreamX | StreamX
Github: http://github.com/streamxhub/streamx.git
Gitee: StreamX: 一个神奇的框架,让Flink&Spark开发更简单!一站式大数据实时平台.
on K8s 部署: http://www.streamxhub.com/zh/doc/flink-k8s/1-deployment
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。