热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

学不动?ApacheMember教你评估实用技术的思路

学,不动,apache,member,教,你,评估

作者:章剑锋 ( 简锋 )

导读:笔者从 2008 年开始工作到现在也有 11 个年头了,一路走来都在和数据打交道,做过很多大数据底层框架内核的开发 ( Hadoop,Pig,Tez,Spark,Livy ),现在是多个 Apache 项目的 PMC。

相信大家都看过不少 Flink 的文章了,今天我想借此机会来聊聊一个朴实的问题:为什么我们要学习 Flink,也即如何理性看待一项新技术是否值得跟风学习。

那么,是因为一项技术火,你才学的吗?是因为你老板决定用这项技术,你才学的吗?那你有没有想过为什么这项技术会火,为什么你老板决定用这项技术。今天我们就以 Flink 为例,来好好聊为什么要学习 Flink,以及如何看待一项新技术是否有潜力,希望对你有所启发。

▌Flink:大数据 + AI 全栈的核心

大部分人对 Flink 的第一印象是大数据引擎,但我想说 Flink 不只是 Big Data,Flink 的目标是星辰大海。

1.jpg

我们首先来看下这张大数据场景图。这张图基本上把你日常需要处理的大数据场景都包括进来。从最左边的数据生产者,到数据收集,数据处理,然后再到数据应用 ( BI + AI )。你会发现 Flink 可以应用在每一个步骤。不仅涉及到大数据,也涉及到 AI,所以说学习 Flink 等于学到了大数据 + AI 全栈。

Flink 会上接 IOT,下接 AI,打通端到端的数据价值挖掘全链路。

Flink 的上游数据规模会继续增长,特别是由于 IOT 技术的发展和成熟,以及未来 5G 技术的铺开。在可预测的未来,数据规模仍将继续快速增长。Flink 丰富的 connector 生态可以让 Flink 对接几乎所有的数据源。

Flink 的下游数据产业还有很多发展的空间。BI 技术已经非常成熟,但是近年来对实时 BI 的需求越来越强烈,Flink 在实时 BI 的场景有非常强的用武之地。另外是 AI 技术的快速发展,会带动大数据引擎的发展。Flink 自身也在发展 Machine Learning 相关的技术,去年刚开源的 Alink [1] 就是基于 Flink 的机器学习 library,Alink 可以让没有机器学习理论知识和工程经验的普通软件工程师也可以方便的使用机器学习技术。

▌批流融合,大势所趋

2.jpg

Flink 引以为傲的是它的超强流计算能力。不过 Streaming Processing 只是 Flink 的看家本领,并不是他的全部,Flink 真正厉害的地方是它的批流统一。

我们还是可以拿上面那张图来解释。你可以看到每个阶段都可以用批流2种方式来解决。我们可以用 Flink 来解决批处理方式的数据收集任务,也可以用流处理的方式来解决已达到更快的实时性。数据处理也是一样,我们可以用 Streaming ETL,也可以做 Batch ETL。到数据应用这层也是,我们不仅可以用批处理来制作日常的 dashboard,也可以用流计算来做实时 dashboard。在 AI 这块,我们不仅可以用批处理的方式基于历史数据做模型训练,也可以用流处理的方式做在线学习,实时更新模型。总之,你会发现 Flink 的批流融合完美契合了整个大数据端到端的应用。

▌多语言支持,拥抱 AI 社区

3.jpg

用过 Flink 的人一般都知道 Flink 有 Java 和 Scala API,很多人都知道那个经典的 WordCount 例子。Java 和 Scala API 对于一般的软件工程师来说是很友好的编程语言工具,但是对于其他领域的人来说 ( 比如数据分析师,数据科学家 ),Java 和 Scala 就不是一种很友好的语言。为了能够吸引这些人来使用 Flink,Flink 推出了 SQL 和 Python 两种语言的API,进一步降低 Flink 的使用门槛。数据库技术发展这么多年,每隔几年都有新的技术创新,唯独 SQL 成为亘古不变的数据库系统入口语言。SQL 是一个生命力非常强盛的语言,围绕 SQL 语言有非常强大的生态圈,大部分 BI 工具,数据分析软件都可以对接 SQL。由于 AI 的流行,Python 语言最近的增长势头也非常强势,用户量与日俱增,可以说是 AI 领域的第一语言。PyFlink 的推出,拉通了 Flink 社区和 Python 社区,使得数据科学家以较低的学习成本来利用 Flink 的计算能力。

▌不仅仅是一个 Library,更是一个 Platform

Flink 作为一个 Apache 项目,我们可以认为它是一个 Library,用户可以基于这个 Library 开发各种程序。但是作为 Library 只是我们对 Flink 的一个狭隘的理解,更确切的理解应该是一个 Platform。用户可以基于这个 Platform 进行功能扩展,对接外部系统,从而建立一个更完善的解决方案。比如 Zeppelin notebook [3] 集成了 Flink,用户可以在 Zeppelin 上编写 Flink SQL,UDF,运行 Flink Job ( Batch & Streaming ),而且还可以可视化数据,中小企业完全可以用 Zeppelin 来搭建大数据平台。Ververica Platform 是一个企业级的多租户 Flink Job 管控平台,你可以在上面方便的提交管理 Flink Job,而且 Ververica Platform 很容易对接各种云平台,可以与你现有的基于云平台的应用系统完美无缝对接。

4.png

▌不只是 China

众所周知,阿里巴巴持续重磅投入 Flink,使得 Flink 在国内的发展非常迅速,去年 Flink Forward 大会亚洲场在北京召开,吸引了2000人次参会。但可能很多人不知道 Flink 在国外也发展的非常迅猛。Flink 大会也有欧洲场,美洲场。Flink Forward 已经成为为数不多的能在三大洲召开的技术大会,大数据领域除了 Flink,恐怕就只有 Spark 和 Kafka 了。

5.jpg

▌全面拥抱云计算

刚开始 Flink 是为数据中心环境准备的,用户需要自己搭建集群环境,比如 Standalone,Yarn 或者 Mesos,这对用户的运维能力提出了非常大的挑战,每一次扩缩容,版本升级都是一件很头疼的事情。而现在 Flink 已经全面拥抱云环境,对 K8s 的支持日趋完善,不久的将来我们可以期待云原生的 Flink 应用会越来越多。同时这也对开发人员对云技术提出了新的要求,只有掌握云技术才能更好的发挥 Flink 的能力。

6.jpg

之所以要将 Flink 放在 Kubernetes 之上,是因为这样做有以下几点优势:

  • 第一,Kubernetes 能够在多租户场景下为 Flink 带来更好的体验。
  • 第二,目前各大公司都在逐步采用 Kubernetes 做 IT 设施的管理,如果 Flink 能够运行在 Kubernetes 之上,对于用户而言就能够实现更大规模的资源共享和统一管理,降低成本的同时能够提高效率。
  • 第三,Kubernetes 云原生生态发展非常迅速,如果 Flink 能够与 Kubernetes 生态实现很好的整合,就能够让 Flink 享受到 Kubernetes 生态的技术红利,使得 Flink 能够在生产环境下提供运维保障。

▌不只是现在

—— 学习 Flink 对你职业生涯的帮助

最后我想说下决定学习某项技术可能不仅仅是个技术问题,更现实的是它可能会是个影响你职业生涯的问题。

由于 Flink 技术的发展,企业对 Flink 相关技术人员的需求也在与日俱增。根据去年参加 Flink Froward Asia 的情况下来看, 国内几乎所有的一、二线互联网公司都已经采用了 Flink,我们可以预期其他互联网公司以及一些非互联网公司在未来几年肯定会陆续采用 Flink,Flink 相关的人才在未来几年应该会成为众多公司哄抢的对象。下面例举了使用了 Flink 的国内外的一些代表性公司。

7.jpg

学习 Flink 也并不仅仅为了现在,而是为了将来的技术积累和储备。如上所述,Flink 不仅在流计算这块有坚实的基础,也在其他领域发力,也在拥抱面向未来的技术 ( 特别是 AI 和云计算 ),所以学习 Flink 不仅仅是现在,也是在为未来做准备。

还有一点我想说的是学习 Flink 并不只是学习 Flink 本身,你还可以扩宽眼界,学习到其他的技术,交到很多志同道合的朋友。由于 Flink 本身的生态系统的强大,你可以学习到其他领域的知识,比如 IOT,云原生,AI 等等。此外 Flink 社区蓬勃发展,在国内已经积蓄了大量的学习资料和人才,Flink 的钉钉群人数已经超过了1万5千人,百度指数上的 flink 指数已经超过了 spark。在 Flink 社区,你可以从别人身上学习到很多有优秀的东西,我相信你在 Flink 社区会有多意想不到的惊喜。

8.jpg

综上所述,是笔者对为什么学习 Flink 的分析。新兴技术的涌现昼夜不停,本文的初衷是不希望大家盲目的学习一项技术,更希望大家在未来的日子里多思考,多收获。本次的分享就到这里,谢谢大家。

▌References

[1] https://github.com/alibaba/Alink/
[2] https://github.com/ververica/stateful-functions
[3] http://zeppelin.apache.org/

作者介绍:

章剑锋 ( 简锋 ),开源界老兵,Github ID:@zjffdu,Apache Member,曾就职于 Hortonworks,目前在阿里巴巴计算平台事业部任高级技术专家,并同时担任 Apache Tez、Livy 、Zeppelin 三个开源项目的 PMC ,以及 Apache Pig 的 Committer。有幸很早就接触了大数据和开源,希望可以在开源领域为大数据和数据科学做点贡献。


推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • SQL 连接详解与应用
    本文详细介绍了 SQL 连接的概念、分类及实际应用,包括内连接、外连接、自连接等,并提供了丰富的示例代码。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • PHP 使用 Cookie 进行访问授权的方法
    本文介绍了如何使用 PHP 和 Cookie 实现访问授权,包括表单验证、数据库查询和会话管理等关键步骤。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
author-avatar
兰墨儿_231
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有