背景

实时即未来,在实时处理流域 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相关的方法,融合了DataStreamFlink 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/streamx-quickstart.git
  • Gitee: streamx-quickstart: streamx-quickstart

DataStream 任务​

下面的示例演示了如何开发部署一个 DataStream 应用

StreamX 开发部署DataStream作业演示

FlinkSql 任务​

下面的示例演示了如何开发部署一个 FlinkSql 应用

StreamX 开发部署FlinkSQL 作业演示

  • 项目演示使用到的 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
SELECTDATE_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"}

任务启动流程​

任务启动流程图如下

streamx-console 提交任务流程

回顾2021

时间过的真快, 在2021年4月的时候 StreamX宣布开源, 从正式开源起 ,我们就秉承开源开放 ,公开透明的原则,鼓励和欢迎开发者们参与进来共同建设,目前star共计790+,fork共计276,开发者共计 23位,其中有 位已经是核心贡献者,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 · Issue #602 · streamxhub/streamx · GitHub

[ SQL Workbench Preview]

参与贡献

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

Flink 流批一体一站式平台 StreamX 来袭相关推荐

  1. 40亿条/秒!Flink流批一体在阿里双11首次落地的背后

    简介:今年的双11,实时计算处理的流量洪峰创纪录地达到了每秒40亿条的记录,数据体量也达到了惊人的每秒7TB,基于Flink的流批一体数据应用开始在阿里巴巴最核心的数据业务场景崭露头角,并在稳定性.性 ...

  2. Flink 流批一体在小米的实践

    摘要:本文整理自小米软件开发工程师金风在 Flink Forward Asia 2021 流批一体专场的演讲.本篇内容主要分为四个部分: 小米的大数据发展演变 流批一体的平台建设 流批一体应用场景 未 ...

  3. Flink流批一体在小米的实践

    目录 0- 前言 1- 小米的大数据发展演变 2- 流批一体的平台建设 2.1- 元数据管理 2.2- 权限管理 2.3- 作业调度 2.4- Flink 的生态建设 3- 流批一体应用场景 4- 未 ...

  4. flink 流批一体

    目录 当我们谈论批流一体,我们在谈论什么? 一.流计算与批计算 一)流计算与批计算 二)流计算与批计算的比较 三)为什么要搞流批一体 二.流批一体的场景 一)数据集成的流批一体 二)数仓架构的流批一体 ...

  5. Hologres+Flink流批一体首次落地4982亿背后的营销分析大屏

    简介: 本篇将重点介绍Hologres在阿里巴巴淘宝营销活动分析场景的最佳实践,揭秘Flink+Hologres流批一体首次落地阿里双11营销分析大屏背后的技术考验. 概要:刚刚结束的2020天猫双1 ...

  6. Flink 流批一体的实践与探索

    自 Google Dataflow 模型被提出以来,流批一体就成为分布式计算引擎最为主流的发展趋势.流批一体意味着计算引擎同时具备流计算的低延迟和批计算的高吞吐高稳定性,提供统一编程接口开发两种场景的 ...

  7. Flink流批一体从入门到入土(源码)

    双十一流量洪峰将至,身为大数据工程师的你,还在苦学 Spark.Hadoop.Storm,却还没搞过 Flink?去年双十一,阿里在 Flink 实时计算技术的驱动下全程保持了"如丝般顺滑& ...

  8. FLINK 流批一体ETL之flink-cdc-connectors组件

    在flink-cdc-connectors出来之前,实时同步mysql binlog的架构基本是Debezium/Canal + Kafka 做采集层 ,用flink做数据加工计算,实现流批一体,架构 ...

  9. flink流批一体相关概念

    文章目录 (1)数据时效性 (2)流处理与批处理 (3)流处理与批处理对比 (4)流批一体API(DataStream) (1)数据时效性 ​ 日常工作中,我们一般会先把数据存储在表,然后对表的数据进 ...

最新文章

  1. hive金额怎么转换千位分隔符_金额字段加千位分隔符方法
  2. Java基础之一组有用的类——生成日期和时间(TryDateFormats)
  3. ITK:创建文件名列表
  4. 淘宝2011.9.21校园招聘会笔试题
  5. IOS-网络(GCD)
  6. snmp服务中snmpwalk命令常用方法总结
  7. C#中字符“.NET研究”串的内存分配与驻留池
  8. Linux: 系统配置 crond 和 crontab(有图有代码有真相!!!)
  9. matlab程序约束条件,求Xij中i,j约束条件下的程序
  10. MySQL服务器状态变量
  11. 施耐德 m340 编程手册_施耐德PLC漏洞历险记
  12. OpenCV快速入门六:图解Numpy
  13. 优秀图片标注工具 推荐
  14. 搭建微信公众号后台开发环境
  15. 图像质量指标:峰值信噪比PSNR和结构相似性SSIM
  16. 关于win10中资源管理器卡顿的问题及解决办法
  17. 主机安全 服务器windows
  18. luat驱动LCD屏幕
  19. 非师范生教师资格证最新政策
  20. C语言单目运算符和双目运算符、三目运算符

热门文章

  1. 机器视觉(Machine Vision)
  2. linux netstat 命令
  3. ubnutu下载网易云音乐
  4. Effective C++条款39:明智而审慎地使用private继承(Use private inheritance judiciously)
  5. 曾经一个程序员把BUG变成了彩蛋,这个程序员却把彩蛋变成了BUG
  6. P2550数组彩票摇奖
  7. ITE IT66121 HDMI 音视频分配芯片 发射器
  8. Spring-boot-email邮件
  9. spring security oauth2 基于 RBAC 的自定义认证
  10. Java获取当前时间的前几分钟的时间