消息队列高手课
李玥
美团高级技术专家
52199 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
进阶篇 (21讲)
消息队列高手课
15
15
1.0x
00:00/00:00
登录|注册

29 | 流计算与消息(一):通过Flink理解流计算的原理

与计算任务中定义的并行度的关系
taskmanager.numberOfTaskSlots配置的含义
Task并行度
Dataflow Graph (DAG)
Flink集群架构
输出
计算
数据转换
定义输入数据源
获取运行时环境
实时产生的数据的实时统计分析
思考题
Job在Flink集群中执行
代码定义Job并在Flink中执行
应用场景
流计算框架的重要性
消息队列和流计算
流计算与消息

该思维导图由 AI 生成,仅供参考

你好,我是李玥。
在上节课中,我简单地介绍了消息队列和流计算的相关性。在生产中,消息队列和流计算往往是相互配合,一起来使用的。而流计算也是后端程序员技术栈中非常重要的一项技术。在接下来的两节课中,我们一起通过两个例子来实际演练一下,如何使用消息队列配合流计算框架实现一些常用的流计算任务。
这节课,我们一起来基于 Flink 实现一个流计算任务,通过这个例子来感受一下流计算的好处,同时我还会给你讲解流计算框架的实现原理。下一节课中,我们会把本节课中的例子升级改造,使用 Kafka 配合 Flink 来实现 Exactly Once 语义,确保数据在计算过程中不重不丢。
无论你之前是否接触过像 Storm、Flink 或是 Spark 这些流计算框架都没有关系,因为我们已经学习了消息队列的实现原理,以及实现消息队列必备的像异步网络传输、序列化这些知识。在掌握了这些知识和底层的原理之后,再来学习和理解流计算框架的实现原理,你会发现,事情就变得非常简单了。
为什么这么说,一个原因是,对于很多中间件或者说基础框架这类软件来说,它们用到很多底层的技术都是一样;另外一个原因是,流计算和消息队列处理的都实时的、流动的数据,很多处理流数据的方法也是一样的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

流计算框架Flink的原理及应用是本文的主题。文章首先介绍了流计算的适用场景和流计算框架的便利性,然后通过一个实时统计任务的例子详细介绍了如何使用Flink实现流计算任务。作者通过具体的代码示例展示了如何定义输入、计算逻辑和输出,以及Flink动态生成的数据处理代码。文章还解释了Flink集群的架构和任务在集群中的执行过程,包括JobGraph的生成和Task的并行执行。最后,文章指出流计算框架的性能优势主要源于自动拆分计算任务实现并行计算和内置的优化算子。读者通过本文可以快速了解Flink的原理和应用,以及流计算任务在Flink集群中的执行过程。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《消息队列高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • 张天屹
    老师你好,请教个概念,虽然处理统计的程序叫做“流”计算,但是比如每5秒或者1分钟这样的时间间隔统计一次,那么对于有向无环图的每个节点,其实还是按照“批处理的”吗,即必须等这一分钟的结果汇集为一批处理完了,才传输到协议个Task节点。

    作者回复: 不是这样的,每条数据是实时流过的,并不会等待。 只有做按时间汇聚的那个节点,它会记录汇总的中间结果(注意,它只记录汇总的中间结果,并不知把所有数据都攒起来),在每个时间窗口结束后会在流中产生一条新的数据(也就是统计结果),流往下游。 比如,每分钟统计数据条数,汇聚的这个节点每流过一条数据,统计值就+1,它不会保存流过的数据,等到时间窗口结束,这个统计就做完了,它直接生成一条统计结果数据,发往下游。

    2019-10-04
    2
    33
  • 姑射仙人
    老师您好,采用时序数据库比如prometheus,然后用grafana去做展示监控指标信息。感觉从表现形式上和流计算有些类似,时序数据库也支持统计功能。这两种形式的架构和使用场景,老师有什么看法呢?(除了并行计算这个点)

    作者回复: 场景不太一样,这种场景更在乎的是海量吞吐,快速查询,对于数据可靠性和一致性的要求没那么高,毕竟一个图标上少一两个点也没什么关系。

    2019-10-09
    10
  • DFighting
    上一篇留言无意提交了,文章具体内容可以谷歌搜索Streaming 101,Streaming 102

    作者回复: Streaming 101 这篇博文就是Flink的理论基础。

    2019-10-28
    6
  • 川杰
    老师,请问网上说的ACK机制,在消息队列中到底什么场景下要使用呢? 我理解,异步线程发送消息后,虽然主线程没法捕获异常,但子线程也可以判断出是否发送成功。那么为什么还要等待接收方返回一个数据处理完的结果呢?

    作者回复: 这个原因很简单,你想一下,客户端发送成功并不等于服务端处理成功,如果数据在网络传输过程中丢了呢?如果服务端在处理过程是失败了呢?所以,需要客户端收到服务端明确的告知:”数据我收到并且处理成功了“,才能保证数据不会丢失。

    2019-10-01
    5
  • 朱月俊
    flink框架是如何根据逻辑代码进行子task拆解的哈?

    作者回复: 这个过程还是比较复杂的,很难一两句话讲清楚。 你可以去看一下相关的文章或者Flink的源码,重点看一下:StreamGraph - JobGraph - ExecutionGraph这个过程。

    2020-06-25
    2
    4
  • 川杰
    如果服务端在处理过程是失败了呢?所以,需要客户端收到服务端明确的告知:”数据我收到并且处理成功了“,才能保证数据不会丢失。 老师您好,对于上一问题,我还有疑问。 对于服务端处理过程中的失败,假设场景: 业务A处理完毕后,数据需要落地,结果数据保存时出现异常,无法正常落地。 对于这种场景,应该是业务处理完毕后就发送确认给消息产生者吧? 我想表达的意思是,对于服务端这种业务场景,是否使用ACK,应该还是要具体问题具体分析的吧?

    作者回复: 一般应该是数据持久化完成后在发送消费成功确认。

    2019-10-02
  • Devin
    思考题:槽数和并行度的关系 “槽数 Task Slot”代表的是每个 Task Manager 可以同时执行的子任务 Sub Task 数 “并行度 Parallelism”代表的是执行该任务的线程数,每个线程对应的就是一个 Sub Task,这些Sub Task可能在同一个 Task Manager 中,也可能分布在多个 Task Manager中
    2020-01-02
    9
  • tianbingJ
    感觉还是没有说Exactly Once是怎么实现的
    2022-03-01
    2
  • UncleNo2
    那,计算代码是jobmanager生成的,还是由执行它的taskmanager生成的?
    2021-03-15
    2
  • 朱月俊
    slot是槽位的意思,每个槽位可以运行一个sub task。因此,TaskManager中的槽位有两个含义:(1)最多容纳sub task的个数;(2)最高并发数;
    2020-07-01
    2
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部