21讲吃透实时流计算

课程简介:

 

今天我们一起来看下实时流计算系统的通用架构模式,为什么要把本课时作为第一课时?因为通过本课时,你想构建起对牛计算技术和系统的整体认识,这样既可以为后面的课时打下基数,又可以对设计和开发实时流计算应用有所启发。任何一个系统的产生,都是为了解决一个具体的问题,实施流计算技术的诞生就是为了更快、更完整地获取数据,更快、更充分地挖掘出数据价值。我们不妨先来看看几个实时流计算技术的应用场景。根据这些场景,我们可以大体上知道它的通用架构。图一是某打算软件公司交通热点路段分析及可视化系统的示意图,在这个系统中,从车载设备上发出的数据被一个基于KafkaAPI的数据采集模块接收,然后发送到Sparkstreaming模块进行处理,并且还使用机器学习模型进行分析,然后分析的结果以JSON的形式存储到数据库中,并提供给可视化模块进行展示和分析。
我们再来看另一个金融风控的例子,图尔是一个基于Flink的实时欺诈检测平台,在这个平台中,从手机等各种支付渠道产生的交易数据被数据采集服务器收集起来并发送到Kafka,然后Flink从Kafka中将交易数据取出来,采用基于机器学习的风控模型进行风险分析和评估,然后分析的结果再次发送到Kafka,后续支付网关就可以根据这些交易的欺诈风险等级来允许或阻止交易进行比较。
像上面两个场景的流计算系统组成,我们不难发现,这些系统都包含了5个部分,数据采集、数据传输、数据处理、数据存储和数据展现,事实上,也正是这5个部分构成了一般通用的实时流计算系统,它们之间的组成关系如下图3所示。在上图3中,数据采集模块用于接收来自各种数据源的数据,比如互联网上的各种移动设备、物联网上的各种传感器、内部网络中部署在各个服务模块上的日志代理等。数据采集模块收集到这些数据后,对数据进行一定整理,再将数据发送到数据传输模块,数据传输模块通常是消息中间件,比如Kafka,之后在由数据处理模块从数据传输模块中取出数据来进行处理。
数据处理模块是流计算系统的核心,在这个模块中会实现流计算应用的各种业务功能,之后计算结果被重新发送到数据传输模块,并由数据存储模块取数后保存到各种类型的数据库中。最后数据展示模块会通过API或UI的方式对结果进行展示。下面我来逐一详细介绍下通用价格的5个部分。
俗话说,巧妇难为无米之炊,有数据了我们才能进行流计算。所以我们先来看看应该怎样采集数据。采集就是从各种数据源收集数据的过程,比如浏览器、手机、工业传感器、日志代理等怎样开发一个数据采集服务器?最简单的方式就是用springboot开发一个rust服务,这样我们就可以用htp请求的方式,从浏览器、手机等终端设备将数据发送到数据采集服务器。
这么一看,数据采集服务器似乎很简单,其实不敢,这中间还是有很多问题需要认真考虑,如果考虑不周的话,很可能你花冤枉钱买了许多服务器,但是系统的性能却依旧十分可怜。为了避免在以后的开发中出现这种问题,这里我想跟你分享下。
我在日常开发Web服务时考虑了5个关键点:
第一点是吞吐量,我们一般用TPS,也就是每秒处理事务数来描述系统的吞吐量,当吞吐量要求不高时,选择的余地往往更大一些。你可以随意采用阻塞IO或非阻塞IO的编程框架,但是当吞吐量要求很高时,通常就只能选择非阻塞IO的编程框架了。如果采用阻塞IO方式时,需要开启数相隔线程才能使吞吐量最大化,就可以考虑换成非阻塞IO的方案了。
第二点是时延,当吞吐量和实验同时有性能要求时,我一般是先保证能够满足实验要求,然后在此基础上再尽可能提高吞吐量。如果一个服务实例的吞吐量满足不了要求,就部署多个服务实例。对于互联网上的应用,如果吞吐量很大,会保证时延,还需要使用类似于CDN的方案。
第三点是发送方式,数据可以逐条发送,也可以批次发送。相比逐条发送而言,批次发送每次的网络IO耗时更多。为了提升接收服务器的吞吐能力,我一般也会采用Natty这样的非阻塞IO框架。
第四点是连接方式。使用长连接还是短连接,一般由具体的场景决定。当有大量连接需要维持时,就需要使用非阻塞IO服务框架,比如Natty。而当连接数量较少时,采用长连接和连接词的方案一般也会显著提升请求处理的性能。第五点时连接数量如果数据源相对固定病毒微服务之间的调用,那我们可以采用长连接配合连接尺的方案,这样一般会非常显著地提升请求处理的性能,但当数据源很多或经常变化时,应该将连接保持时间设置为一个合理的值。总的来说,在大多数情况下,数据接收服务器选择诸如Netty的非阻塞air方案都会更加合适。数据采集之后,我们一般还需要做些简单的处理,比如提取出感兴趣的字段,或者对字段进行调整,然后再将调整好的字段组成格式统一的数据,比如JSON,averal,protobuf等。最后将整理好的数据发送到数据传输系统。我们这里说的数据传输是指流数据在在各个模块间流转的过程。由计算系统中一般是采用消息中间件进行数据传输的,比如阿巴奇,Kafka,rapid,MQ等。
在微服务系统中一般是采用HTTP或RPC的方式进行数据传输,这是流计算系统与微服务系统最明显的区别。

课程截图:

 

课程目录:

开篇词攻克实时流计算难点,掌握大数据未来!.mp4
01实时流计算的通用架构.mp4
02异步和高并发:为什么NIO是异步和高并发编程的基础?.mp4
03反向压力:如何避免异步系统中的OOM问题?.mp4
04流与异步:为什么说掌握流计算先要理解异步编程?.mp4
05有向无环图(DAG):如何描述、分解流计算过程?.mp4
06CompletableFuture:如何理解Java8新引入的异步编程类?.mp4
07死锁:为什么流计算应用突然卡住,不处理数据了.mp4
08性能调优:如何优化流计算应用?.mp4
09流数据操作:最基本的流计算功能.mp4
10时间维度聚合计算:如何在长时间窗口上实时计算聚合值?.mp4
11关联图谱分析:如何用Lambda架构实现实时的社交网络分析?.mp4
12事件序列分析:大家都在说的CEP是怎么一回事?.mp4
13模型学习和预测:如何检查流数据异常?.mp4
14状态管理:为什么说流计算是有“状态”的?.mp4
15扩展为集群:如何实现分布式状态存储?.mp4
16ApacheStorm:最早的开源流计算框架.mp4
17SparkStreaming:从批处理走向流处理.mp4
18ApacheSamza:最简洁的开源流计算框架.mp4
19ApacheFlink:最惊艳的开源流计算框架.mp4
20场景案例:如何用Flink实现实时风控引擎?.mp4
21场景案例:如何用FlinkSQLCDC实现实时数据同步?.mp4
彩蛋1竟然还有分布式的JVM?.mp4
彩蛋2穷途末路的选择:Lambda架构.mp4
结束语Java程序员的成长之路和从业方向.mp4
文档
开篇词攻克实时流计算难点,掌握大数据未来!.md
01实时流计算的通用架构.md
02异步和高并发:为什么NIO是异步和高并发编程的基础?.md
03反向压力:如何避免异步系统中的OOM问题?.md
04流与异步:为什么说掌握流计算先要理解异步编程?.md
05有向无环图(DAG):如何描述、分解流计算过程?.md
06CompletableFuture:如何理解Java8新引入的异步编程类?.md
07死锁:为什么流计算应用突然卡住,不处理数据了.md
08性能调优:如何优化流计算应用?.md
09流数据操作:最基本的流计算功能.md
10时间维度聚合计算:如何在长时间窗口上实时计算聚合值?.md
11关联图谱分析:如何用Lambda架构实现实时的社交网络分析?.md
12事件序列分析:大家都在说的CEP是怎么一回事?.md
13模型学习和预测:如何检查流数据异常?.md
14状态管理:为什么说流计算是有“状态”的?.md
15扩展为集群:如何实现分布式状态存储?.md
16ApacheStorm:最早的开源流计算框架.md
17SparkStreaming:从批处理走向流处理.md
18ApacheSamza:最简洁的开源流计算框架.md
19ApacheFlink:最惊艳的开源流计算框架.md
20场景案例:如何用Flink实现实时风控引擎?.md
21场景案例:如何用FlinkSQLCDC实现实时数据同步?.md
彩蛋1竟然还有分布式的JVM?.md
彩蛋2穷途末路的选择:Lambda架构.md
结束语Java程序员的成长之路和从业方向.md

下载权限

查看
  • 免费下载
    评论并刷新后下载
    登录后下载

查看演示

  • {{attr.name}}:
您当前的等级为
登录后免费下载登录 小黑屋反思中,不准下载! 评论后刷新页面下载评论 支付以后下载 请先登录 您今天的下载次数(次)用完了,请明天再来 支付积分以后下载立即支付 支付以后下载立即支付 您当前的用户组不允许下载升级会员
您已获得下载权限 您可以每天下载资源次,今日剩余
编程与开发

大数据技术基础 22 讲

2022-3-15 14:33:48

编程与开发

iOS开发进阶

2022-3-16 16:37:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索