自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(155)
  • 收藏
  • 关注

原创 jenkins流程概述

【代码】jenkins流程概述。

2025-03-04 16:28:28 531

原创 kafka stream对比flink

支持多种 Source/Sink(Kafka、HDFS、JDBC、HBase 等),与 Hadoop、Hive、Hudi 等集成。:简单流处理(如过滤、转换、聚合)、Kafka 数据管道增强、状态管理依赖 Kafka 自身的日志(如 RocksDB 存储)。:完善的事件时间机制,支持 Watermark 处理乱序数据(如物联网、日志场景)。:内置托管状态(内存/RocksDB),支持 TTL、状态快照、大规模状态横向扩展。:复杂事件处理(CEP)、大规模状态计算、窗口操作(事件时间)、批流混合任务。

2025-02-27 11:46:37 677

原创 详解内部调用事务失效的原因

假如有方法A,方法A里有方法B,我们想对方法B进行事务控制。直接对方法B加事务注解,这样我们通过A调用B,事务会失效。原因:Spring 使用通过处理 @Transactional 注解的方法。除此以外还有一些注解修饰的方法也是通过代理对象来调用的,本质上是拦截之前的方法,用代理对象的增强逻辑来代替原来的逻辑。但是上面是内部调用,因为你是this,this 代表当前实例本身。this 不是 Spring 生成的代理对象,而是原始的目标对象,这样就无法拦截了,因为你直接调用了。

2025-02-17 13:34:20 180

原创 去哪儿kafka优化案例

网络方面:当前集群网卡平均出口流量峰值已经超过4G,单机最大会超过8G,如果流量继续上升,网卡会成为新的瓶颈,我们准备把10G网卡提升到25G或改为双通道20G。磁盘方面:当前集群的主流磁盘是3T,高峰时期磁盘使用率集群均值已经达到60%,单机已经达到85%,我们准备每台机器再添加一块3T盘来扩展存储能力和IO的压力。对于磁盘IO的影响,线上我们都是用单盘提供服务,如果我们改用双盘,两个盘理论上是单盘IO两倍的性能,但是加盘之后,同样的压测数据,对闲置率没有影响。内存监控,内存没有明显的变化。

2025-01-17 16:39:12 1356

原创 spark集成hudi详解

Hudi 支持用户自定义。

2024-12-05 11:44:54 1296

原创 hudi集成hive带来的优势

Hive 集成 Hudi 后,用户仍然可以用熟悉的 Hive SQL 来操作表,包括。

2024-12-04 15:39:48 1077

原创 127.0.0.1和0.0.0.0的区别

是指服务器或应用程序等待客户端连接或数据请求的过程。服务器通过在某个特定的端口上“监听”,来接收来自客户端的请求。当客户端发起连接时,服务器接收到请求并进行处理。就是主动准备接受xx发送的请求。

2024-09-23 15:46:02 1494

转载 Kafka 如何基于 KRaft 实现集群最终一致性协调

Controller 的内存状态都通过 Timeline 数据结构来维护,当出现 Leader 切换时,旧的 Leader 会将 Timeline 数据结构的数据回滚到上一个已经被 KRaft 多数派确认的状态,来保证旧 Leader 内存中不会有脏数据。整个集群的状态维护和一致性协调都是基于 KRaft 中的事件。多节点之间的内存状态:KRaft 底层保证了多节点的 KRaft Log 是一致的,然后基于 “内存状态与 KRaft” 的一致性,通过传递性原则,因此多节点之间的内存状态也是一致的;

2024-09-11 14:31:57 284

原创 记录分组查询的问题

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 183

原创 idea导入maven项目(别人的项目)爆红

作为一个经常学习交流的人,或者工作需要,我们都或多或少会把别人写好的代码拷贝过来学习或编辑,大多数时候都是把整个项目拿过来;但是往往把代码拿到之后放在自己电脑用 idea 打开的时候就会出现 pom.xml 文件红线报错,然后倒入的包全部不能用,导致 java 文件引用的类报错,下面就是刚导入的 pom.xml 代码👇。别人都能跑的代码,为什么我拿来就报错了呢,电脑问题还是人品不好呢?改完之后,刷新一下maven项目就好了。

2024-08-26 14:25:53 696

转载 ribbon详解

因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具。该方法返回的是ResponseEntity,该对象是Spring对HTTP请求响应的封装,其中主要存储了HTTP的几个重要元素,比如HTTP请求状态码的枚举对象HttpStatus(也就是我们常说的404、500这些错误码)、在它的父类HttpEntity中还存储着HTTP请求的头信息对象HttpHeaders以及泛型类型的请求体对象。其他的参数用法相同。

2024-08-23 10:25:11 90

原创 通过反射机制给已知属性赋值

最近在看spring,在手写spring框架之前,需要巩固一下反射。反射有这样一个简单的例子,记录一下。

2024-07-16 14:45:36 190

转载 doris rollup

ROLLUP 在多维分析中是“上卷”的意思,即将数据按某种指定的粒度进行进一步聚合。

2024-06-12 15:30:28 137

原创 doris物化视图

物化视图是将预先计算(根据定义好的 SELECT 语句)好的数据集,存储在 Doris 中的一个特殊的表。物化视图的出现主要是为了满足用户,既能对原始明细数据的任意维度分析,也能快速的对固定维度进行分析查询。

2024-06-12 15:02:32 1175

原创 Spark groupByKey和reduceByKey对比

在 Spark 中处理键值对数据集时,通常比groupByKey更高效,因为它减少了 shuffle 的数据量和内存开销。除非有明确的需求需要使用groupByKey,否则在聚合操作中应优先选择。

2024-06-11 14:26:58 608

原创 基于dolphin scheduler的数据质量开发

规则是整个数据质量检查的核心部分,每一条规则对应着一个检查指标,那么一条完整的规则应该包含什么内容呢?规则主要是由两个部分组成。参数输入项:在我们的数据质量检查规则中核心的输入项包括:统计值指的是我们对要检验的数据执行一系列操作后得到的值,例如表总行数或者为某字段为空的行数。比对值指的是用来作为比较目标的值,比对值可以是固定值,也可以是由定义好的计算逻辑计算出来的值数据源输入项,定义了要检查哪些数据统计值参数和比对值参数结果判断相关的参数。

2024-05-16 14:55:36 1705

原创 用脚本写一个日期样式的字符

现在想要诸如此类样式的语句:(过去三个月的)

2024-05-07 13:12:17 256

原创 Flink面试(2)

1) CheckpointCoordinator(检查点协调器) 周期性的向该流应用的所有source算子发送 barrier(屏障)。2) 当某个source算子收到一个barrier时,便暂停数据处理过程,然后将自己的当前状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自己快照制作情况,同时向自身所有下游算子广播该barrier,恢复数据处理。

2024-04-24 15:47:27 1021

原创 Flink面试(1)

Flink 作业中,包含两个基本的块:数据流(DataStream)和 转换(Transformation)。DataStream 是逻辑概念,为开发者提供 API 接口,Transformation 是处理行为的抽象,包含了数据的读取、计算、写出。所以 Flink 作业中的 DataStream API 调用,实际上构建了多个由 Transformation 组成的数据处理流水线(Pipeline)。

2024-04-22 14:18:48 1261 1

原创 flink on k8s部署

创建 JobManager 和 TaskManager 的。

2024-04-19 14:30:29 1229 1

转载 flink调优(检查点/反压/内存)

通过最小时间间隔参数配置,可以降低Checkpoint对系统的性能影响,但需要注意的事,对于非常大的状态数据,最小时间间隔只能减轻Checkpoint之间的堆积情况。在这种情况下,如果大状态数据确实需要很长的时间来进行Checkpoint,那么只能对Checkpoint的时间间隔进行优化,可以通过Checkpoint之间的最小间隔参数进行配置,让Checkpoint之间根据Checkpoint执行速度进行调整,前面的Checkpoint没有完全结束,后面的Checkpoint操作也不会触发。

2024-04-16 11:18:56 710

原创 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 936

原创 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 1206 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 1320

转载 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 268

原创 Flink源码解析(1)job启动,从JM到TM过程详解

注:ActorRef就是actor的引用,封装好了actor下面是jm和tm在通讯上的概念图:RpcGateway关注其5个实现类:Dispatcher、ResourceManager、JobMaster、MetricQueryService、TaskExecutor。

2024-03-15 16:14:11 1271

原创 Flink通讯模型—Akka与Actor模型

也就是说,它可以被分配,分布,调度到不同的CPU,不同的节点,乃至不同的时间片上运行,而不影响最终的结果。尽管单个的actor是自然有序的,但一个包含若干个actor的系统却是高度并发的并且极具扩展性的。actor线程顺序处理收到的消息。3)call stack的问题 当我们编程模型异步化之后,还有一个比较大的问题是调用栈转移的问题,如下图中主线程提交了一个异步任务到队列中,Worker thread 从队列提取任务执行,调用栈就变成了workthread发起的,当任务出现异常时,处理和排查就变得困难。

2024-03-14 11:30:55 1794

原创 flink状态后端和检查点的关系

在 Apache Flink 中,检查点(Checkpoints)和状态后端(State Backend)是两个核心概念,它们之间有着紧密的联系。这可能涉及到从状态后端中读取(检索)状态数据,或者根据检查点中的信息重建状态。2.当 Flink 创建检查点时,它会捕获状态后端中当前的状态,并将这些状态的快照作为检查点的一部分写入到检查点的存储位置中。检查点的状态数据就是,任务隔一段时间,保存的一次状态数据(快照),2.检查点中包含了对状态后端中状态数据的引用或快照。意思就是更新(恢复)状态到失败之前的状态。

2024-03-12 11:49:51 954

原创 what is flinksql hint?

【代码】what is flinksql hint?

2024-02-27 11:55:03 1219

原创 FlinkSql hint之状态生命周期 state_ttl

(Time-To-Live,生存时间)是一个用于管理状态数据生命周期的机制。在 Flink 流处理中,状态是一个重要的概念,它允许跨时间窗口或事件时间处理的状态化操作。然而,随着时间的推移,这些状态数据可能会变得不再相关或过时。允许你为状态设置一个生存时间。一旦状态数据的生存时间超过了指定的 TTL 值,Flink 就会自动清理这些状态。这有助于减少不必要的状态数据占用,提高系统的稳定性和性能。,意味着任何状态数据的生存时间超过 3 小时后都会被自动清理。,该方式能够使得在上述状态算子中使用与作业级别。

2024-02-27 11:44:26 1416

原创 Flink join详解(含两类API及coGroup、connect详解)

join、regular join、interval join、temporal join、connect、coGroup

2024-02-20 16:51:06 3766 2

原创 完成一个小需求:把数组中的key都取出来然后去重

SELECT GROUP_CONCAT(REPLACE(REPLACE(JSON_KEYS(字段名),'[',''),']',''),',') FROM `表名`取出每一行的key并拼在一行中,然后就用java把他们都切割并且去重。这里用java是考虑到mysql切割成数组以后,有大量数据的话,难以取到每个值去做处理。但是每行的数据,主要是key不一样,我们想把所有的key取出来,并且做个去重。今日接到一个小需求,一张表有类似这样的数据:(下面是一行)首先我先在mysql中,

2024-01-29 14:43:17 426

原创 Flink Checkpoint 超时问题详解

等于说每来一条数据,都需要对用户近24小时内所有的行为事件进行分类汇总,求比例,再汇总,再求比例,而QPS是1500,24小时1.5亿的累积数据,逻辑处理的算子根本无法将接收到的数据在合适的时间内计算完毕,这里还有个有趣的现象,为了提高处理性能,我将并行度翻倍,结果checkpoint的时间反而更长了,原因是Source的并行度也增加后,读取源数据的速度更快了~所以和算法同学商议后,将实现逻辑进行修改,进行批流分开计算,比如离线数据每半个小时进行一次计算,而实时计算只需要计算最近半小时内的数据即可。

2024-01-25 18:00:36 3481

原创 登录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 644

原创 用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 1320

原创 flink中的row类型详解

在Apache Flink中,`Row` 是一个通用的数据结构,用于表示一行数据。`Row` 可以看作是一个类似于元组的结构,其中包含按顺序排列的字段。在这个例子中,我们首先定义了一个 `RowTypeInfo`,描述了 `Row` 中两个字段的数据类型。然后,我们创建一个 `Row` 对象,设置了两个字段的值,并最后访问了这些字段的值。`Row` 的字段可以是各种基本数据类型,例如整数、字符串、布尔值等,也可以是复杂的结构,例如嵌套的 Row 或数组。

2024-01-10 09:37:14 2781

原创 详解flink exactly-once和两阶段提交

Source 端的精准一次处理比较简单,毕竟数据是落到 Flink 中,所以 Flink 只需要保存消费数据的偏移量即可, 如消费 Kafka 中的数据,Flink 将 Kafka Consumer 作为 Source,可以将偏移量保存下来,如果后续任务出现了故障,恢复的时候可以由连接器重置偏移量,重新消费数据,保证一致性。在 Flink 1.4 版本之前,精准一次处理只限于 Flink 应用内,也就是所有的 Operator 完全由 Flink 状态保存并管理的才能实现精确一次处理。

2024-01-09 15:11:37 1561

原创 大厂大数据面试题收录(1)

客户端提交应用程序给 ResourceManagerResouceManager 收到请求后,将分配 Container 资源,并通知对应的 NodeManager 启动一个 ApplicationMaster。applicationMaster 来运行和管理 container 里面的任务,其中 container 会通过心跳机制向 applicationMaster 来发送运行信息。

2023-12-12 11:19:49 259

转载 Flink图结构详解

顺便提一句,flink的keyed算子保存的是对每个数据的 key的计算方法,而非真实的key,用户需要自己保证对每一行数据提供的keySelector的幂等 性。至于为什么要用KeyGroup的设计,这就牵扯到扩容的范畴了,将在后面的章节进行讲 述。按照正常逻辑思维,很容易想到TM的submitTask方法的行为:首先是确认资源,如寻找 JobManager和Blob,而后建立连接,解序列化算子,收集task相关信息,接下来就是创建一个新的 Task 对象,这个task对象就是真正执行任务的关键所在。

2023-12-12 10:40:00 504

原创 Flink反压如何查看和优化

所以,我们需要找出存在性能瓶颈的算子节点,优化对应的算子,才能解决整体的性能问题。算子是否存在反压,可以通过Flink任务提供的Web UI的反压状态表现出来,根据算子链的反压状态,找出存在性能瓶颈的算子,从而有针对性的进行优化。依次算子链从前往后找到最后一个反压算子节点,则瓶颈一般为该节点的下游节点,如果其下游有多个节点,则通过查看其所有下游节点的Metrics监控的buffers.inPoolUsage,如果某节点的buffers.inPoolUsage长期为1,则该节点即为瓶颈节点。

2023-12-12 10:19:04 560

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除