- 博客(149)
- 收藏
- 关注
原创 127.0.0.1和0.0.0.0的区别
是指服务器或应用程序等待客户端连接或数据请求的过程。服务器通过在某个特定的端口上“监听”,来接收来自客户端的请求。当客户端发起连接时,服务器接收到请求并进行处理。就是主动准备接受xx发送的请求。
2024-09-23 15:46:02 1061
转载 Kafka 如何基于 KRaft 实现集群最终一致性协调
Controller 的内存状态都通过 Timeline 数据结构来维护,当出现 Leader 切换时,旧的 Leader 会将 Timeline 数据结构的数据回滚到上一个已经被 KRaft 多数派确认的状态,来保证旧 Leader 内存中不会有脏数据。整个集群的状态维护和一致性协调都是基于 KRaft 中的事件。多节点之间的内存状态:KRaft 底层保证了多节点的 KRaft Log 是一致的,然后基于 “内存状态与 KRaft” 的一致性,通过传递性原则,因此多节点之间的内存状态也是一致的;
2024-09-11 14:31:57 159
原创 记录分组查询的问题
select confirm_no,tax_rate,count() as co from 费用表 group by confirm_no,tax_rate having co > 1。(select confirm_no,tax_rate from 费用表 group by confirm_no,tax_rate)s。因为这样是统计,同个确认单号,同个汇率的数量。本来是这么写的,但是发现完全不对。
2024-08-26 15:18:55 138
原创 idea导入maven项目(别人的项目)爆红
作为一个经常学习交流的人,或者工作需要,我们都或多或少会把别人写好的代码拷贝过来学习或编辑,大多数时候都是把整个项目拿过来;但是往往把代码拿到之后放在自己电脑用 idea 打开的时候就会出现 pom.xml 文件红线报错,然后倒入的包全部不能用,导致 java 文件引用的类报错,下面就是刚导入的 pom.xml 代码👇。别人都能跑的代码,为什么我拿来就报错了呢,电脑问题还是人品不好呢?改完之后,刷新一下maven项目就好了。
2024-08-26 14:25:53 518
转载 ribbon详解
因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具。该方法返回的是ResponseEntity,该对象是Spring对HTTP请求响应的封装,其中主要存储了HTTP的几个重要元素,比如HTTP请求状态码的枚举对象HttpStatus(也就是我们常说的404、500这些错误码)、在它的父类HttpEntity中还存储着HTTP请求的头信息对象HttpHeaders以及泛型类型的请求体对象。其他的参数用法相同。
2024-08-23 10:25:11 48
原创 doris物化视图
物化视图是将预先计算(根据定义好的 SELECT 语句)好的数据集,存储在 Doris 中的一个特殊的表。物化视图的出现主要是为了满足用户,既能对原始明细数据的任意维度分析,也能快速的对固定维度进行分析查询。
2024-06-12 15:02:32 1045
原创 Spark groupByKey和reduceByKey对比
在 Spark 中处理键值对数据集时,通常比groupByKey更高效,因为它减少了 shuffle 的数据量和内存开销。除非有明确的需求需要使用groupByKey,否则在聚合操作中应优先选择。
2024-06-11 14:26:58 550
原创 基于dolphin scheduler的数据质量开发
规则是整个数据质量检查的核心部分,每一条规则对应着一个检查指标,那么一条完整的规则应该包含什么内容呢?规则主要是由两个部分组成。参数输入项:在我们的数据质量检查规则中核心的输入项包括:统计值指的是我们对要检验的数据执行一系列操作后得到的值,例如表总行数或者为某字段为空的行数。比对值指的是用来作为比较目标的值,比对值可以是固定值,也可以是由定义好的计算逻辑计算出来的值数据源输入项,定义了要检查哪些数据统计值参数和比对值参数结果判断相关的参数。
2024-05-16 14:55:36 1501
原创 Flink面试(2)
1) CheckpointCoordinator(检查点协调器) 周期性的向该流应用的所有source算子发送 barrier(屏障)。2) 当某个source算子收到一个barrier时,便暂停数据处理过程,然后将自己的当前状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自己快照制作情况,同时向自身所有下游算子广播该barrier,恢复数据处理。
2024-04-24 15:47:27 975
原创 Flink面试(1)
Flink 作业中,包含两个基本的块:数据流(DataStream)和 转换(Transformation)。DataStream 是逻辑概念,为开发者提供 API 接口,Transformation 是处理行为的抽象,包含了数据的读取、计算、写出。所以 Flink 作业中的 DataStream API 调用,实际上构建了多个由 Transformation 组成的数据处理流水线(Pipeline)。
2024-04-22 14:18:48 1114 1
转载 flink调优(检查点/反压/内存)
通过最小时间间隔参数配置,可以降低Checkpoint对系统的性能影响,但需要注意的事,对于非常大的状态数据,最小时间间隔只能减轻Checkpoint之间的堆积情况。在这种情况下,如果大状态数据确实需要很长的时间来进行Checkpoint,那么只能对Checkpoint的时间间隔进行优化,可以通过Checkpoint之间的最小间隔参数进行配置,让Checkpoint之间根据Checkpoint执行速度进行调整,前面的Checkpoint没有完全结束,后面的Checkpoint操作也不会触发。
2024-04-16 11:18:56 414
原创 flink network buffer
Flink 的网络协议栈是组成 flink-runtime 模块的核心组件之一,是每个 Flink 作业的核心。它连接所有 TaskManager 的各个子任务(Subtask),因此,对于 Flink 作业的性能包括吞吐与延迟都至关重要。与 TaskManager 和 JobManager 之间通过基于 Akka 的 RPC 通信的控制通道不同,TaskManager 之间的网络协议栈依赖于更加底层的 Netty API。本文将首先介绍 Flink 暴露给流算子(Stream operator)的高层
2024-04-15 14:49:51 853
原创 flink on yarn-per job源码解析、flink on k8s介绍
YARN per job模式下用户程序在Client端被执行,Client端即执行flink shell命令的执行节点。Client端主要工作就是将用户写的代码转换为JobGraph,向YARN提交应用以执行JobGraph。PipelineExecutor(YarnJobClusterExecutor)将StreamGraph转换为JobGraphClusterDescriptor(YarnClusterDescriptor)通过YARN部署flink集群以执行JobGraph。
2024-03-28 10:57:21 1137 1
原创 Flink GateWay、HiveServer2 和 hive on spark
bin/hive , 就是Hive Shell的客户端 , 直接写SQLHiveServer2是Hive的一个服务组件,它提供了一个多客户端访问的接口,允许用户通过多种方式 (如JDBC、ODBC等) 连接Hive,并执行HiveQL语句。HiveServer2可以独立于Hive运行,并且可以与其他应用程序进行集成,使得用户可以更加灵活地使用Hive.1.支持多客户端连接HiveServer2可以同时处理多个客户端的连接请求,每个客户端可以独立地执行HiveQL语句。
2024-03-21 16:50:23 1171
转载 flink源码之JM启动概览
当Client提交一个Job到集群时(Client会把Job构建成一个JobGraph),主节点接收到提交的job的Rest请求后,WebMonitorEndpoint 会通过Router进行解析找到对应的Handler来执行处理,处理完毕后交由Dispatcher,Dispatcher负责大气JobMaster来负责这个Job内部的Task的部署执行,执行Task所需的资源,JobMaster向ResourceManager申请。在下一章,我们就先来看看WebMonitorEndpoint是如何启动的!
2024-03-21 10:50:14 190
原创 Flink源码解析(1)job启动,从JM到TM过程详解
注:ActorRef就是actor的引用,封装好了actor下面是jm和tm在通讯上的概念图:RpcGateway关注其5个实现类:Dispatcher、ResourceManager、JobMaster、MetricQueryService、TaskExecutor。
2024-03-15 16:14:11 1177
原创 Flink通讯模型—Akka与Actor模型
也就是说,它可以被分配,分布,调度到不同的CPU,不同的节点,乃至不同的时间片上运行,而不影响最终的结果。尽管单个的actor是自然有序的,但一个包含若干个actor的系统却是高度并发的并且极具扩展性的。actor线程顺序处理收到的消息。3)call stack的问题 当我们编程模型异步化之后,还有一个比较大的问题是调用栈转移的问题,如下图中主线程提交了一个异步任务到队列中,Worker thread 从队列提取任务执行,调用栈就变成了workthread发起的,当任务出现异常时,处理和排查就变得困难。
2024-03-14 11:30:55 1592
原创 flink状态后端和检查点的关系
在 Apache Flink 中,检查点(Checkpoints)和状态后端(State Backend)是两个核心概念,它们之间有着紧密的联系。这可能涉及到从状态后端中读取(检索)状态数据,或者根据检查点中的信息重建状态。2.当 Flink 创建检查点时,它会捕获状态后端中当前的状态,并将这些状态的快照作为检查点的一部分写入到检查点的存储位置中。检查点的状态数据就是,任务隔一段时间,保存的一次状态数据(快照),2.检查点中包含了对状态后端中状态数据的引用或快照。意思就是更新(恢复)状态到失败之前的状态。
2024-03-12 11:49:51 778
原创 FlinkSql hint之状态生命周期 state_ttl
(Time-To-Live,生存时间)是一个用于管理状态数据生命周期的机制。在 Flink 流处理中,状态是一个重要的概念,它允许跨时间窗口或事件时间处理的状态化操作。然而,随着时间的推移,这些状态数据可能会变得不再相关或过时。允许你为状态设置一个生存时间。一旦状态数据的生存时间超过了指定的 TTL 值,Flink 就会自动清理这些状态。这有助于减少不必要的状态数据占用,提高系统的稳定性和性能。,意味着任何状态数据的生存时间超过 3 小时后都会被自动清理。,该方式能够使得在上述状态算子中使用与作业级别。
2024-02-27 11:44:26 1155
原创 Flink join详解(含两类API及coGroup、connect详解)
join、regular join、interval join、temporal join、connect、coGroup
2024-02-20 16:51:06 2947 2
原创 完成一个小需求:把数组中的key都取出来然后去重
SELECT GROUP_CONCAT(REPLACE(REPLACE(JSON_KEYS(字段名),'[',''),']',''),',') FROM `表名`取出每一行的key并拼在一行中,然后就用java把他们都切割并且去重。这里用java是考虑到mysql切割成数组以后,有大量数据的话,难以取到每个值去做处理。但是每行的数据,主要是key不一样,我们想把所有的key取出来,并且做个去重。今日接到一个小需求,一张表有类似这样的数据:(下面是一行)首先我先在mysql中,
2024-01-29 14:43:17 417
原创 Flink Checkpoint 超时问题详解
等于说每来一条数据,都需要对用户近24小时内所有的行为事件进行分类汇总,求比例,再汇总,再求比例,而QPS是1500,24小时1.5亿的累积数据,逻辑处理的算子根本无法将接收到的数据在合适的时间内计算完毕,这里还有个有趣的现象,为了提高处理性能,我将并行度翻倍,结果checkpoint的时间反而更长了,原因是Source的并行度也增加后,读取源数据的速度更快了~所以和算法同学商议后,将实现逻辑进行修改,进行批流分开计算,比如离线数据每半个小时进行一次计算,而实时计算只需要计算最近半小时内的数据即可。
2024-01-25 18:00:36 2872
原创 登录kafka报错:Could notstart Jolokia agent: java.net.BindException: Address in use
端口还是ip被占用了。只能禁用了,再执行命令。在执行kafka命令增加或删除topic的时候,发现总是报错。1.先进入k8s的kafka pod。2.进入kafka的bin目录。
2024-01-23 14:05:30 597
原创 用flinkcdc debezium来捕获数据库的删除内容
但是我现在情况是doris做为数仓,数据写到ods,ods的数据还会通过flink计算后写入dwd层,所以此时ods的数据是删除了,但是dwd甚至ads的都没删除,这样就会有脏数据。op :表示当前事件的类型,取值为:c表示insert、u表示update、d表示delete、r表示快照read;正常情况下sqlserver有删除数据,doris是能捕获到并很快同步删除的。source:事件源的结构信息,包括connector版本、事务ID等;这样就可以获取到被删除的数据,或者是更新前的数据啦~
2024-01-22 16:38:52 1107
原创 flink中的row类型详解
在Apache Flink中,`Row` 是一个通用的数据结构,用于表示一行数据。`Row` 可以看作是一个类似于元组的结构,其中包含按顺序排列的字段。在这个例子中,我们首先定义了一个 `RowTypeInfo`,描述了 `Row` 中两个字段的数据类型。然后,我们创建一个 `Row` 对象,设置了两个字段的值,并最后访问了这些字段的值。`Row` 的字段可以是各种基本数据类型,例如整数、字符串、布尔值等,也可以是复杂的结构,例如嵌套的 Row 或数组。
2024-01-10 09:37:14 2279
原创 详解flink exactly-once和两阶段提交
Source 端的精准一次处理比较简单,毕竟数据是落到 Flink 中,所以 Flink 只需要保存消费数据的偏移量即可, 如消费 Kafka 中的数据,Flink 将 Kafka Consumer 作为 Source,可以将偏移量保存下来,如果后续任务出现了故障,恢复的时候可以由连接器重置偏移量,重新消费数据,保证一致性。在 Flink 1.4 版本之前,精准一次处理只限于 Flink 应用内,也就是所有的 Operator 完全由 Flink 状态保存并管理的才能实现精确一次处理。
2024-01-09 15:11:37 1305
原创 大厂大数据面试题收录(1)
客户端提交应用程序给 ResourceManagerResouceManager 收到请求后,将分配 Container 资源,并通知对应的 NodeManager 启动一个 ApplicationMaster。applicationMaster 来运行和管理 container 里面的任务,其中 container 会通过心跳机制向 applicationMaster 来发送运行信息。
2023-12-12 11:19:49 242
转载 Flink图结构详解
顺便提一句,flink的keyed算子保存的是对每个数据的 key的计算方法,而非真实的key,用户需要自己保证对每一行数据提供的keySelector的幂等 性。至于为什么要用KeyGroup的设计,这就牵扯到扩容的范畴了,将在后面的章节进行讲 述。按照正常逻辑思维,很容易想到TM的submitTask方法的行为:首先是确认资源,如寻找 JobManager和Blob,而后建立连接,解序列化算子,收集task相关信息,接下来就是创建一个新的 Task 对象,这个task对象就是真正执行任务的关键所在。
2023-12-12 10:40:00 346
原创 Flink反压如何查看和优化
所以,我们需要找出存在性能瓶颈的算子节点,优化对应的算子,才能解决整体的性能问题。算子是否存在反压,可以通过Flink任务提供的Web UI的反压状态表现出来,根据算子链的反压状态,找出存在性能瓶颈的算子,从而有针对性的进行优化。依次算子链从前往后找到最后一个反压算子节点,则瓶颈一般为该节点的下游节点,如果其下游有多个节点,则通过查看其所有下游节点的Metrics监控的buffers.inPoolUsage,如果某节点的buffers.inPoolUsage长期为1,则该节点即为瓶颈节点。
2023-12-12 10:19:04 418
原创 常见数据同步工具之实时同步
实时数据同步是现代数据处理中非常重要的一环。在常见的数据同步工具中,Flume、Flink CDC和DataX都是非常受欢迎的选择。它们各自有自己的工作原理、优势和劣势。Flume主要用于日志传输,简单易用但对特定数据源可能有限;Flink CDC基于CDC技术实现了实时的数据同步,性能高但在复杂场景下可能需要额外的工作;DataX CDC则是基于CDC技术的实时数据同步工具,具备实时同步、高性能和精确同步的优势,但需要对不同的数据源进行适配,并对数据库性能产生一定影响。
2023-12-07 13:23:01 2009
转载 大数据处理架构详解:Lambda架构、Kappa架构、流批一体、Dataflow模型、实时数仓
Lambda架构:组合批处理层和速度层,兼顾低延迟和复杂分析,但系统较复杂,存在数据冗余和延迟不一致问题。Lambda架构的批处理层可以基于Hadoop、Spark等技术来实现,速度层可以基于Storm、Flink等流式处理系统来实现。服务层需要实现查询接口,可以使用REST API。Lambda架构适合大数据场景,但维护批处理层和速度层的重复开发较为麻烦。Kappa架构:仅通过流式处理实现所有处理,简化了架构,但历史数据分析相对复杂。
2023-12-05 14:28:14 1905
原创 java设计模式 开闭原则
/ 阅读文章// 推广宣传开闭原则的优点有以下几个方面:1. 可扩展性:通过遵循开闭原则,系统可以方便地进行功能扩展,只需要添加新的代码而不需要修改已有的代码。2. 可维护性:由于开闭原则减少了对已有代码的修改,系统的维护成本也相应降低。3. 可复用性:通过抽象和多态的使用,可以使代码更加通用和可复用。4. 可测试性:由于开闭原则使系统的功能模块化,可以更方便地进行单元测试和集成测试。
2023-11-28 10:21:46 458
原创 spark写入关系型数据库的duplicateIncs参数使用
还可以指定多个字段:ON DUPLICATE KEY UPDATE后面可以放多个字段,用英文逗号分割。如果是用insert语句,怎么达到相同的效果呢?(指定某个字段更新)当然前提是,这个表要有主键或唯一索引,这里是a字段。
2023-11-23 11:51:57 613
原创 spark中write算子和format算子详解
在spark中,想要往数据库或者某sink路径里面写数据,存到外部存储系统,如文件系统、数据库或数据仓库,经常会用到write算子。算子支持多种格式和配置选项,以满足不同存储系统和需求的要求。具体的用法取决于你要写入的目标存储系统和数据格式。每个存储系统或数据格式都有自己的一组特定选项,用于配置连接信息、目标路径、写入模式等。查阅相关文档可以帮助了解特定存储系统或数据格式所支持的选项。API一起使用,用于将数据写入持久化存储。方法进行设置,具体的选项取决于所使用的。
2023-11-23 10:25:56 1063
原创 spark内置数据类型
在创建 DataFrame 时,你可以使用这些数据类型来定义每列的数据类型。为需求中要拼接出sql的create table语句,需要每个字段的sql中的类型,那么就需要去和sparksql。在用scala编写spark的时候,假如我现在需要将我spark读的数据源的字段,做一个类型转换,因。写spark的时候,创建df后用schema算子得到了structField类,查看了源码以后,发现。这个样例类的三个参数:name、dataType、nullable、(metadata)中的内置数据类型去比对。
2023-11-21 17:45:19 895
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人