- 博客(302)
- 资源 (6)
- 收藏
- 关注
原创 【数据结构与算法】顺序队列与环形队列
- 队列是一个有序列表,可以用数组或是链表来实现,只允许在一端进行插入,在另一端删除。- 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出- 队列示意图如下:约定rear总是指向队尾元素,front指向当前队中队头元素的前一位置 。元素进队,rear增1,元素出队,front增1。当rear=MaxSize\-1时不能再进队。存入队列时称为”enQueue”,enQueue 的处理需要有两个步骤:- 将尾指针往后移:rear+1 , 当front == rear 【空】
2022-12-31 11:00:00
1562
原创 【数据结构与算法】数据结构介绍与稀疏数组相关操作
算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算。一般来讲程序会使用了内存计算框架 ( 比如Spark ) 和缓存技术 ( 比如Redis等 ) 来优化程序,再深入的思考一下,这些计算框架和缓存技术, 它的核心功能是哪个部分呢?拿实际工作经历来说, 在Unix下开发服务器程序,功能是要支持上千万人同时在线, 在上线前,做内测,一切OK。可上线后,服务器就支撑不住了,公司的CTO对代码进行优化,再次上线,坚如磐石。就能感受到程序是有灵魂的,就是算法。
2022-12-30 20:53:09
747
原创 【实时数仓】热度关键词接口、项目整体部署流程
---项目打包 、部署到服务器1.修改realtime项目中的并行度(资源足够则不用修改),并打jar包 -BaseLogApp -KeywordStatsApp 2.修改flink-conf.yml(注意冒号后面有一个“空格”) taskmanager.memory.process.size: 2000m taskmanager.numberOfTaskSlots: 83.启动zk、kf、clickhouse、flink本地集群(bin/start-cluster.sh)、logg
2022-12-29 11:00:00
915
原创 【实时数仓】省份交易额统计接口、新老访客对比接口、访客分时统计接口
统计指标:uv,pv,新访客uv。实现三个接口省份交易额统计接口、新老访客对比接口、访客分时统计接口,完成大屏展示。
2022-12-28 10:45:00
1067
原创 【实时数仓】Sugar拉取数据展示、品牌销售排行接口、品类销售占比接口和热门商品SPU排名接口的实现
通常个人电脑无论是连接WIFI上网还是用网线上网,都是属于局域网里边的,外网无法直接访问到你的电脑,内网穿透可以让你的局域网中的电脑实现被外网访问功能。目前国内网穿透工具很多,常见的比如花生壳、Ngrok、网云穿等。官网:花生壳。[Ngrok。](: http://www.ngrok.cc)网云穿。本文以介绍花生壳为主。配置完成后启动Gmall2022PublisherApplication.java服务,进行【映射诊断】,如下图穿透成功。复制上图中的外网地址,修改地址(https://m23o10855
2022-12-27 10:45:00
1890
1
原创 【实时数仓】DWS层之关键词主题表(FlinkSQL)、数据可视化接口、Sugar数据大屏、总成交金额接口实现
将表与表函数的结果进行 join 操作。左表(outer)中的每一行将会与调用表函数所产生的所有结果中相关联行进行 join 。用户自定义表函数( User-defined table functions,UDTFs ) 在执行前必须先注册。请参考 [UDF 文档]以获取更多关于指定和注册UDF的信息。之前数据分层处理,最后把轻度聚合的结果保存到ClickHouse中,主要的目的就是提供即时的数据查询、统计、分析服务。这些统计服务一般会用两种形式展现,一种是为专业的数据分析人员的BI工具,一种是面向非专
2022-12-26 11:15:00
9520
原创 【实时数仓】DWS层之地区主题表(FlinkSQL)、关键词主题表(FlinkSQL)
SQL 查询的分组窗口是通过 `GROUP BY` 子句定义的。类似于使用常规 `GROUP BY` 语句的查询,窗口分组语句的 `GROUP BY` 子句中带有一个窗口函数为每个分组计算出一个结果。以下是批处理表和流处理表支持的分组窗口函数:可以使用以下辅助函数选择组窗口的开始和结束时间戳以及时间属性:注意:* 辅助函数必须使用与 `GROUP BY` 子句中的分组窗口函数完全相同的参数来调用。注意:因为是事件时间,所以第一次运行rt_dblog的时候,不会触发watermark,第二次再运行rt_dbl
2022-12-25 10:45:00
1460
原创 【实时数仓】DWS层之商品主题计算、地区主题表(FlinkSQL)
*** 地区主题统计 -- SQL// TODO 1 环境准备 // 1.1 流处理环境 StreamExecutionEnvironment env = StreamExecutionEnvironment . getExecutionEnvironment();// 1.2 表执行环境 StreamTableEnvironment tableEnv = StreamTableEnvironment . create(env);
2022-12-24 23:00:00
958
原创 【实时数仓】DWS层的定位、DWS层之访客主题计算(PV、UV、跳出次数、计入页面数、连续访问时长)
如果是一流对多表,就必须通过自定义的方式实现了,比如之前的维度数据。为何要写入ClickHouse数据库,ClickHouse数据库作为专门解决大量数据统计分析的数据库,在保证了海量数据存储的能力,同时又兼顾了响应速度。因为实时计算与离线不同,实时计算的开发和运维成本都是非常高的,要结合实际情况考虑是否有必要像离线数仓一样,建一个大而全的中间层。轻度聚合,因为DWS层要应对很多实时查询,如果是完全的明细,查询的压力是非常大的。将更多的实时数据以主题的方式组合起来便于管理,同时也能减少维度查询的次数。
2022-12-23 10:45:00
1596
原创 【实时数仓】DWM层订单宽表之维表关联异步查询(续)、DWM层支付宽表需求分析、需求实现(源码)
支付宽表的目的,最主要的原因是支付表没有到订单明细,支付金额没有细分到商品上,没有办法统计商品级的支付状况。开启BaseDBApp、OrderWideApp、PaymentWideApp,模拟生成业务数据,查看结果。启动三个应用程序和一个kafka消费者,模拟业务数据的生成,查看最终结果。所以支付宽表的核心就是要把支付表的信息与订单明细关联上。至此订单宽表准备完成,执行最终写回kafka中的操作。是线程不安全的,在JDK1.8之后,使用。模拟生成数据,kafka中结果如下。模拟生成业务数据,验证结果。
2022-12-22 11:00:00
877
原创 【实时数仓】DWS层访客主题计算(续)、商品主题计算
构造者就是在外部类中创建的一个内部类,然后在内部类中对属性赋值,一次赋值完成后,返回的类型是内部类自己,而上面的第二种赋值方式没有返回值,不可以链式赋值,而构造者模式可以进行链式赋值。在设计模式中有构造者模式(builder),在类的构造器或静态工厂具有多个参数。为字段打标识通常的办法就是给字段加个注解,这里就增加一个自定义注解@TransientSink来标识该字段不需要保存到数据表中。一个订单中有多个商品需要退款,需要去重,使用HashSet,实体类中定义如下。对点击流和曝光流分别做处理。
2022-12-21 20:46:10
710
原创 【实时数仓】DWM层订单宽表之维表关联优化 -- 异步查询
在Flink 流处理过程中,经常需要和外部系统进行交互,用维度表补全事实表中的字段。例如:在电商场景中,需要一个商品的sku id去关联商品的一些属性,例如商品所属行业、商品的生产厂家、生产厂家的一些情况;在物流场景中,知道包裹id,需要去关联包裹的行业属性、发货信息、收货信息等等。默认情况下,在Flink的MapFunction中,单个并行只能用同步方式去交互: 将请求发送到外部存储,IO阻塞,等待请求返回,然后继续发送下一个请求。这种同步交互的方式往往在网络等待上就耗费了大量时间。为了提高处理效
2022-12-21 20:43:49
1036
原创 【实时数仓】DWM层订单宽表之实现基本的维度查询、加入旁路缓存模式
正常数据如果在缓存中查到,直接返回结果,否则去Hbase的维度表中进行查询,查询到返回结果,并加入到redis缓存。业务系统对数据进行修改,maxwell将变化采集到ods层,Flink程序从ods层拿到数据,对维度数据进行处理后将数据放到维度侧输出流中。在DimSink的invoke方法进行实际的业务操作,完成之后即完成了对Hbase表中数据的修改,修改完成之后需要将已经缓存的原数据从redis中删除。如果维度数据发生了变化,同时失效该数据对应的Redis中的缓存,先写入数据库,再失效缓存。
2022-12-20 10:30:00
683
原创 【实时数仓】DWM层订单宽表之需求分析、订单和订单明细关联源码
如上图,由于在之前的操作已经把数据分拆成了事实数据和维度数据,事实数据(绿色)进入kafka数据流(DWD层)中,维度数据(蓝色)进入hbase中长期保存。在flink中的流join大体分为两种,一种是基于时间窗口的join(Time Windowed Join),比如join、coGroup等。Interval join 组合元素的条件为:两个流(我们暂时称为 A 和 B)中 key 相同且 B 中元素的 timestamp 处于 A 中元素 timestamp 的一定范围内。
2022-12-19 10:45:00
1070
原创 【实时数仓】DWM层跳出明细计算之需求分析、读取数据、通过Flink的CEP完成跳出判断、写回kafka、测试
跳出: 用户成功访问了网站的一个页面后就退出,不再继续访问网站的其它页面。而跳出率就是用跳出次数除以访问次数。关注跳出率,可以看出从某几个网站引流过来的访客是否能很快的被吸引,渠道引流过来的用户之间的质量对比,对于应用优化前后跳出率的对比也能看出优化改进的成果。首先要识别哪些是跳出行为,要把这些跳出的访客最后一个访问的页面识别出来。那么要抓住几个特征:- 该页面是用户近期访问的第一个页面(新的会话) 这个可以通过该页面是否有上一个页面(last_page_id)来判断,如果这个表示为空,就说明
2022-12-18 10:30:00
887
原创 【实时数仓】DWM层设计模式、独立访客(UV)的计算
模拟生成日志jar包将模拟生成的日志数据发送给Nginx进行负载均衡Nginx将请求转发给三台日志采集服务三台日志采集服务接收到日志数据,将日志数据发送给kafka的ods_base_log主题中BaseLogApp应用程序从ods_base_log中读取数据,进行分流启动日志:dwd_start_log曝光日志:dwd_display_log页面日志:dwd_page_logUnionVistorApp从dwd_page_log主题中读取数据。
2022-12-17 10:30:00
1293
原创 【实时数仓】在Hbase建立维度表、保存维度数据到Hbase、保存业务数据到kafka主题
如果读取到的配置信息是维度数据,提前在hbase中通过Phoenix创建维度表。定义一个项目中常用的配置常量类GmallConfig。(2)引入依赖(3)hbase-site.xml因为要用单独的schema,所以在Idea程序中加入hbase-site.xml。注意:为了开启hbase的namespace和phoenix的schema的映射,在程序中需要加这个配置文件,另外在linux服务上,也需要在hbase以及phoenix的hbase-site.xml配置文件中,加上以上后两个配置,并使用
2022-12-16 11:00:00
1533
原创 【实时数仓】动态分流的实现源码(反序列化器、配置表、广播流、业务流)
动态分流整体思路:使用FLinkCDC API方式获取到的内容如下自动定义反序列化器,实现将以上信息转化为JSON格式的字符串,包换的属性包括:数据库名称,表名,操作类型,影响的数据内容。以上内容中有价值的信息如下:(2)代码实现2 从配置表中读取数据(1)自定义CDC采集的反序列化器将CDC格式数据转换为json字符串(2)使用FlinkCDC读取配置表数据程序中目前存在两条流:Flink广播状态。为了让每一个并行度上处理业务数据的时候,都能使用配置流的数据,需要将配置流广播下去4 完
2022-12-15 11:00:00
842
原创 【实时数仓】CDC简介、实现DWD层业务数据的处理(主要任务、接收kafka数据、动态分流*****)
CDC是Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。CDC主要分为基于查询和基于Binlog两种方式,主要了解一下这两种之间的区别:Flink社区开发了 flink-cdc-connectors 组件,这是一个可以直接从 MySQL、PostgreSQL 等数据库直接读取全量数据和增量变更数据的 source 组件。目前也已开源,参
2022-12-14 11:00:00
2570
原创 【实时数仓】实现用户行为日志相关功能(源码)
保存每个mid的首次访问日期,每条进入该算子的访问记录,都会把mid对应的首次访问时间读取出来,跟当前日期进行比较,只有首次访问时间不为空,且首次访问时间早于当日的,则认为该访客是老访客,否则是新访客。同时如果是新访客且没有访问记录的话,会写入首次访问时间。is_new为0不用修复,已经访问过,状态是正确的;为1时才会出现状态不准确的情况。日志格式如下:(2)利用侧输出流实现数据拆分根据日志数据内容,将日志数据分为3类,页面日志、启动日志和曝光日志。页面日志输出到主流,启动日志输出到启动侧输出流,曝光日
2022-12-13 10:45:00
512
原创 【实时数仓】DWD层需求分析及实现思路、idea环境搭建、实现DWD层处理用户行为日志的功能
建设实时数仓的目的,主要是增加数据计算的复用性。每次新增加统计需求时,不至于从原始数据进行计算,而是从半成品继续加工而成。这里从kafka的ods层读取用户行为日志以及业务数据,并进行简单处理,写回到kafka作为dwd层。前端埋点中的数据全部放在kafka中ods_base_log主题中,如启动日志,页面访问日志,曝光日志等。虽然同是日志,但是却分为不同的种类,将来做数据统计时,全部从这一个主题中获取数据不方便。所以需要从ods_base_log主题中将数据取出来,根据日志的类型,将不同类型的数据放到不同
2022-12-12 10:30:00
1341
原创 【实时数仓】业务数据采集之Maxwell的介绍、底层原理、安装及初始化、监控功能、采集服务和MySQL的binlog
将业务数据从MySQL数据库采集到kafka属于CDC(Change Data Capture)操作,实现CDC有两种方式全表扫描:使用sqoop,会丢失一些数据,只能拿到数据的最终状态。如订单状态:待支付、已支付、待发货、已发货、已收货、评价、完成。使用sqoop只会获取“完成”状态的订单,这种现象称为“状态丢失”。对于离线统计没有统计订单状态的需求,只得到最终结果即可,但对实时计算来说,订单的状态变化十分重要。基于Binglog获取新增和变化的数据:常见框架有阿里的canal、maxwell。整体流程如
2022-12-11 10:45:00
2778
原创 【实时数仓】用户行为日志采集模块单机模式部署,Nginx介绍、安装和配置,采集模块集群部署并使用Nginx进行反向代理
模拟日志产生,将生成的日志信息发送给hadoop101,8081端口的日志采集服务,日志采集服务接收到产生的日志信息,打印到控制台,落盘,最后发送到kafka主题中,kafka消费者消费到数据,打印到控制台。这时出现一个问题,如果当一台日志采集服务器忙不过来时,就需要添加多台机器(集群),通过Nginx转发请求,如下图。正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它
2022-12-10 10:45:00
1106
原创 【实时数仓】介绍、需求分析、统计架构分析和ods层日志行为数据采集
普通的实时计算优先考虑时效性,所以从数据源采集经过实时计算直接得到结果。如此做时效性更好,但是弊端是由于计算过程中的中间结果没有沉淀下来,所以当面对大量实时需求的时候,计算的复用性较差(如B想要使用A的结果),开发成本随着需求增加直线上升。实时数仓基于一定的数据仓库理念,对数据处理流程进行规划、分层,目的是提高数据的复用性(如e可以直接使用b的结果)。项目分为以下几层离线计算:就是在计算开始前已知所有输入数据,输入数据不会产生变化,一般计算量级较大,计算时间也较长。例如今天早上一点,把昨天累积的日志,计算出
2022-12-09 11:00:00
2892
原创 【Flink】Flink Table API 和 SQL的介绍和使用,使用FlinkSQL实现实时topN
Flink 本身是批流统一的处理框架,所以 Table API 和 SQL,就是批流统一的上层处理 API。目前功能尚未完善,处于活跃的开发阶段。Table API 是一套内嵌在 Java 和 Scala 语言中的查询 API,它允许我们以非常直观的方式,组合来自一些关系运算符的查询(比如 select、filter 和 join)。而对于 Flink SQL,就是直接可以在代码中写 SQL,来实现一些查询(Query)操作。Flink 的 SQL 支持,基于实现了 SQL 标准的 Apache Calci
2022-12-08 11:00:00
914
原创 【Flink】复杂事件处理CEP底层实现(有限状态机)和应用
一个或多个由简单事件构成的事件流通过一定的规则匹配,然后输出用户想得到的数据,满足规则的复杂事件。特征有如下几点:如下图中,将输入流中的元素,按照连续两个事件,且第一个元素为正方形,第二个元素为三角形进行过滤:CEP用于分析低延迟、频繁产生的不同来源的事件流。CEP可以帮助在复杂的、不相关的事件流中找出有意义的模式和复杂的关系,以接近实时或准实时的获得通知并阻止一些行为。CEP支持在流上进行模式匹配,根据模式的条件不同,分为连续的条件或不连续的条件;模式的条件允许有时间的限制,当在条件范围内没有达到满足的条
2022-12-07 11:00:00
1012
原创 【Flink】需求实现之独立访客数量的计算 和 布隆过滤器的原理及使用
此程序有一个隐患:现将所有数据keyBy到了同一条流,每一个小时取一次uv,添加到hashSet去重,如果程序的用户向很大,如1亿个独立访客,一个用户的用户id为100个字符,那么一个窗口中的独立访客就要占用10G的内存。想要优化这种使用了增量聚合与全窗口聚合的程序,就需要使用一种新的数据结构 – 布隆过滤器。本质上布隆过滤器是一种数据结构,是一种比较巧妙的概率型数据结构(probabilistic datastructure),特点是高效地插入和查询,可以用来告诉你“某样东西一定不存在或者可能存在”。相比
2022-12-06 11:00:00
858
原创 【Flink】事务型Sink连接器、kafka连接器、写入到redis、mysql
事务写入 sink 连接器需要和 Flink 的检查点机制集成,因为只有在检查点成功完成以后,事务写入 sink 连接器才会向外部系统 commit 数据。为了简化事务性 sink 的实现,Flink 提供了两个模版用来实现自定义 sink 运算符。这两个模版都实现了 CheckpointListener 接口。CheckpointListener 接口将会从作业管理器接收到检查点完成的通知。GenericWriteAheadSink 模版会收集检查点之前的所有的数据,并将数据存储到 sink任务的运算符状
2022-12-05 11:00:00
1547
原创 【Flink】一致性检查点(幂等写入、事务写入)和Exactly-Once的两阶段提交
当在分布式系统中引入状态时,自然也引入了一致性问题。一致性实际上是"正确性级别"的另一种说法,也就是说在成功处理故障并恢复之后得到的结果,与没有发生任何故障时得到的结果相比,前者到底有多正确?举例来说,假设要对最近一小时登录的用户计数。在系统经历故障之后,计数结果是多少?如果有偏差,是有漏掉的计数还是重复计数?特点总结如下:在流处理中,一致性可以分为3个级别:曾经,at-least-once非常流行。第一代流处理器(如Storm和Samza)刚问世时只保证at-least-once,原因有二。最先保证ex
2022-12-04 11:00:00
1784
原创 【Flink】检查点算法实现原理之检查点分界线
当接收到一个分界线2和数据4,数据4不能和数据8进行累加,分界线2之后的所有数据都不能进行累加,都需要缓存到sum even算子中,而橘色的检查点2之前的数据,都需要和数据8进行累加,这就是上面两句话的意思,同时也是检查点分界线名称的由来,其将数据流分隔开了。JobManager 会向 Source 任务针对每一个并行任务,都发送一条带有新检查点ID 消息的检查点分界线(三角形,当前检查点分界线id=2,此处的2与数据无关),通过这种方式让检查点分界线跟随着数据向下游流动,达到来启动检查点的目的。
2022-12-03 11:00:00
790
原创 【Flink】一文解析Flink如何实现状态管理和容错机制
Flink内置的很多算子,数据源source,数据存储sink都是有状态的,流中的数据都是buffer records,会保存一定的元素或者元数据。这种检查点的保存和恢复机制可以为应用程序内部状态提供“精确一次”(exactly-once,每一个数据只会被计算一次,遇到回退现象,需要将加上的数字再减去)的一致性,因为所有算子都会保存检查点并恢复其所有状态,这样一来所有的输入流就都会被重置到检查点完成时的位置。旧的流处理系统并不支持有状态的计算,而新一代的流处理系统则将状态及其正确性视为重中之重。
2022-12-02 11:00:00
664
原创 【Flink】使用CoProcessFunction完成实时对账、基于时间的双流join
- ProcessFunction:只能处理单条流DateStream,由于处理的是没有经过分流的流,所以自然没有办法注册定时器和状态变量,目前使用到的所有状态变量都是针对key所独有的,所以在对一条流进行keyBy以后,可以使用KeyedProcessFunction。- KeyedProcessFunction:使用key对数据做了逻辑分区(分流、分组),使用KeyedProcessFunction,配合字典状态MapState + 定时器可以模拟出完整的ProcessWindowFunction功能
2022-12-01 11:00:00
1416
原创 【Flink】处理迟到元素(续)、自定义水位线和多流的合并与合流
由于存在迟到的元素,所以已经计算出的窗口结果是不准确和不完全的。我们可以使用迟到元素更新已经计算完的窗口结果。如果我们要求一个 operator 支持重新计算和更新已经发出的结果,就需要在第一次发出结果以后也要保存之前所有的状态。但显然我们不能一直保存所有的状态,肯定会在某一个时间点将状态清空,而一旦状态被清空,结果就再也不能重新计算或者更新了。而迟到的元素只能被抛弃或者发送到旁路输出流。window operator API 提供了方法来明确声明我们要等待迟到元素。当使用 event-timewi
2022-11-30 11:00:00
659
原创 【Flink】使用水位线实现热门商品排行以及Flink如何处理迟到元素
Flink 认为时间戳小于水位线的事件都已到达。水位线是一种逻辑时钟。水位线由程序员编程插入到数据流中。水位线是一种特殊的事件。在事件时间的世界里,水位线就是时间。水位线 = 观察到的最大时间戳 - 最大延迟时间 - 1 毫秒。水位线超过窗口结束时间,窗口闭合,默认情况下,迟到元素被抛弃。Flink 会在流的最开始插入一个时间戳为负无穷大的水位线。Flink 会在流的最末尾插入一个时间戳为正无穷大的水位线。
2022-11-29 11:00:00
711
原创 【Flink】时间语义和水位线的概念和使用
当Flink接收到数据时,会按照一定的规则去生成Watermark,这条Watermark就等于当前所有到达数据中的maxEventTime - 最大延迟时长 -1ms,也就是说,Watermark是基于数据携带的时间戳生成的,一旦Watermark比当前未触发的窗口的停止时间要晚,那么就会触发相应窗口的执行。的-4001ms的水位线,其不能够跳过这个算子向前传送。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink通过时间戳分配器访问事件时间戳。
2022-11-28 11:00:00
914
原创 【Flink】各种窗口的使用(处理时间窗口、事件时间窗口、窗口聚合窗口)
streaming流式计算是一种被设计用于处理无限数据集的数据处理引擎,而无限数据集是指一种不断增长的本质上无限的数据集,而window是一种切割无限数据为有限块进行处理的手段。Window是无限数据流处理的核心,Window将一个无限的stream拆分成有限大小的”buckets”桶,我们可以在这些桶上做计算操作。ProcessFunction:不分流直接聚合,不可以使用定时器和状态变量,因为其没有经过keyBy,定时器和状态变量都是针对key的,只有processElement。
2022-11-27 11:00:00
4089
原创 【Flink】复函数的使用,时间服务和定时器,值、列表、字典状态变量
在实际环境这种经常会有这样的需求:在函数处理数据之前,需要做一些初始化的工作;或者需要在处理数据时可以获得函数执行上下文的一些信息,如数据库的连接;以及在处理完数据时做一些清理工作。而 DataStream API 就提供了这样的机制。DataStream API 提供的所有转换操作函数,都拥有它们的富版本,并且在使用常规函数或者匿名函数的地方来使用富函数。下面就是富函数的一些例子,可以看出,只需要在常规函数的前面加上 Rich 前缀就是富函数了。当使用富函数时,可以实现两个额外的方法:另外,getRunt
2022-11-26 11:00:00
1009
原创 【Flink】基本转换算子使用之fliter、flatMap,键控流转换算子和分布式转换算子
针对每一个输入事件,算子将会更新保存的聚合结果,并发送一个带有更新后的值的事件到下游算子。那么使用递归又带来了一个问题,递归的栈会超过内存,造成内存溢出Stack Overflow,那么伪递归用新来的栈去覆盖原有的栈,栈的深度不变,所以可以使用伪递归来模拟循环,伪递归当中有累加器的存在。总结:滚动聚合的要点在于每一个Key都有自己的累加器(状态变量),一条数据来到处理完成之后就丢弃了,向下游发送的数据是累加器中的数据,这样就不需要将所有的数据都保存下来,节省内存空间,性能高于批处理。
2022-11-25 11:00:00
1745
原创 【Flink】任务调度原理、自定义数据源、基本转换算子的使用之map
Flink中每一个worker(TaskManager)都是一个**JVM**进程,它可能会在独立的线程上执行一个或多个subtask。为了控制一个worker能接收多少个task,worker通过task slot来进行控制(一个worker至少有一个task slot)。每个task slot表示TaskManager拥有资源的**一个固定大小的子集**。假如一个TaskManager有三个slot,那么它会将其管理的内存分成三份给各个slot。资源slot化意味着一个subtask将不需要跟来自其
2022-11-24 11:00:00
1467
原创 【Flink】入门Demo实现、Flink运行架构之运行时组件,任务提交流程,任务调度原理
在编写程序时需要注意:Flink程序支持java和scala两种语言。在引入包中,有java和scala两种包时注意要使用对应语言的包。总结:数据流的来源是DataStreamSource,执行map操作之后,变为单输出流的算子SingleOutputStreamOperator,经过shuffle操作之后,变为一个键控流(按照key进行逻辑分区的流)KeyedStream,分组之后的流再聚合完成之后,发送给下游,流又变成单输出流SingleOutp
2022-11-23 11:00:00
1130
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人