自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Flink-新增 Kafka source 引发状态丢失导致启动失败

历史代码写法不规范,所有算子都没加 .uid。新增算子时,大部分算子的 OperatorID 与新增前的 OperatorID 存在明显差异。由于 savepoint 是基于历史代码执行的,这就导致从状态恢复时,算子状态分配异常(少分配或者当前算子被分配到了其他算子的状态)。比如 Kafka 算子被分配到了 RocketMQ 算子的状态,当启动任务解析状态时,Kafka默认的 KryoSerializer 无法匹配 RocketMQ 的 PojoSerializer,导致错误并提示。

2025-09-06 23:49:26 607 1

原创 MYSQL- INNODB引擎删除数据

MYSQL 被删除的记录仍然会存在磁盘上,只是记录的隐藏字段 deleted_flag 被设置为1,表示记录被删除。所有被删除的记录会形成一个垃圾链表,记录在这个链表中占用的空间称为可重用空间。被删除记录的 next_record 会被置为0;heap_no 保持不变(记录在页中(User Records 部分)的位置,每申请一条记录的存储空间,其heap_no为上条记录的heap_no+1)。Page Header 部分有一个 PAGE_FREE 属性,指向由被删除记录组成的垃圾链表中的头节点。

2025-08-02 18:02:46 331

原创 Flink-Source算子状态恢复分析

这两个算子状态的 operatorSubtaskStates (存储算子子任务的状态信息)集合一个为空,一个不为空。Task 部署阶段(JM 向 TM 提交 Task 任务),TM 会根据 TaskDeploymentDescriptor 来恢复状态和创建算子(其中 taskRestore 就是 JobManagerTaskRestore,在 setInitialState 中赋值)。如果当前 Task 的子任务状态列表(operatorSubtaskStates全集)不为空,该值就为 true。

2025-07-05 12:22:49 727

原创 Flink-状态恢复-isRestore分析

任务从状态启动时(allowNonRestoredState=true),每个算子的 subTask 都具有状态:这里的状态指的是表达算子状态的 OperatorSubtaskStates 实例不会为空,只是说真正有状态算子的大小不为0,本身没状态算子的大小为0。submitTask 是 JM 通过 Akka 向 TM 提交 Task 执行的方法。以 task 纬度分配状态,当开启算子链合并时,每个 task 里面包含多个算子:jobVertex 为 job 执行图的顶点:多个算子组成。

2025-07-05 12:18:57 326

原创 Flink-Source算子点位提交问题(Earliest)

从 source 算子初始化的 open 过程可知,既然从状态启动时会将已存在 source 算子(uid在状态中)的新 topic 点位设置为最早,那么如果将新 topic 的 uid 改成与老 topic 的 uid 不一致,是否就能避免从 earliest 恢复:因为从状态恢复时新的 uid 并不在状态中,那么就不会走 open 中将新 topic 点位置为 earliest 的流程。那怎么让消费者不从状态恢复?由于从状态启动,且新加入的算子与其他算子隔离,老 source 算子的点位从状态启动;

2025-07-05 12:06:50 1153

原创 MYSQL-语句加锁分析

不同隔离级别的MVCC在不同阶段生成,利用trx_id隐藏列控制数据的可见性,在同一事务中,即使记录被修改了,因为trx_id被修改了,那么很大程度上也不会影响到SELECT读取的结果。为什么autocommit=1不用加锁,因为自动提交意味着一个事务中只包含一条语句,而只执行一条语句就不会出现可重复读、幻读的场景(读未提交、读已提交、可重复读:这三种隔离级别都不会对记录加锁,而是通过MVCC来实现读取记录的可见性。才会出现),那么只需要通过MVCC避免脏读就可以了。读未提交、读已提交:为当前记录加行锁;

2025-06-22 20:48:27 393

原创 CGLIB代理原理浅析

fci.f2为原始类的CGLIB代理类对象的FastClass代理对象:UserService$$EnhancerByCGLIB$$b73b4431$$FastClassByCGLIB$$ac5ce0fe。方法内部会调用 $$b73b4431(var10001)#CGLIB$addUser$0(),super即为定义的UserService。ci.c2 为原始类的CGLIB代理类对象:UserService$$EnhancerByCGLIB$$b73b4431。i2为 addUser 方法的 index。

2025-06-11 10:13:48 684

原创 Mac Docker Desktop Crash

下载最新版的 Docker Desktop,Mac(Pro M3) 一直提示 “未成功打开 Docker,包含恶意软件” 或者 “建议丢弃到废纸篓” 之类的告警。1. brew install --cask docker (安装 docker 和 docker-desktop)2. brew install docker-compose(安装 docker-compose)清空Docker安装文件。

2025-02-08 16:56:12 436 1

原创 CheckpointMode 和 对齐

当Checkpoint被激活时,对于有状态的算子和UDF,CheckpointingMode规定了系统以哪种方式来处理检查点。有两种枚举实例:EXACTLY_ONCE 和 AT_LEAST_ONCE。官网是怎么解释 EXACTLY_ONCE 的[1]?对齐步骤可能会给流处理程序增加延迟。对于所有记录都需要始终保持超低延迟(几毫秒)的应用程序,1️⃣。2️⃣一旦算子从每个输入中看到检查点屏障,就会立即绘制检查点快照。1️⃣划线的句子有两处需要注意,1)其实就是使用CheckpointingMode。

2025-01-11 19:44:51 1006

原创 Why KeyGroup?

当状态恢复,如果我们不对算子并行度进行缩放,子任务可以通过一次顺序读取状态句柄,简单地读取由之前的实例写入检查点的整个状态。如下Subtask0-2是状态恢复前的子任务,顺序写入状态句柄,假设为stateHandle0-2。那么恢复时,由于并行度未变化,那么新的子任务SubtaskNew0-2可以直接顺序读取stateHandle0-2。当作业处理数据时,通过也能将key映射到正确的SubtaskNew。

2024-11-18 16:46:13 405

原创 HashMap#getOrDefault产生的NullPointerException NPE

getOrDefault(key, default)是很常用的方法,即可以获取 value ,又可以在为空时返回默认值。然而就是因为判空的逻辑,如果不注意的话就会产生NPE。

2024-11-01 16:23:35 809 1

原创 NVCC Fatal

环境:虚拟机:Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-108-generic x86_64)python:3.8.10pytorch:1.7.1+cu110cuda:11.0.221问题:/usr/local/cuda/bin/nvcc -I/tmp/pip-req-build-ui3v4u82/svox2/csrc/include -I/tmp/pip-req-build-ui3v4u82/usr/local/miniconda3/pkgs/nvid

2022-04-15 09:36:00 658

原创 Pytorch之torch.meshgrid()

说明:  torch.meshgrid()的功能是生成网格,可以用于生成坐标。函数输入:  输入两个数据类型相同的一维tensor函数输出:输出两个tensor(tensor行数为第一个输入张量的元素个数,列数为第二个输入张量的元素个数)注意:  1)当两个输入tensor数据类型不同或维度不是一维时会报错。  2)其中第一个输出张量填充第一个输入张量中的元素,各行元素相同;第二个输出张量填充第二个输入张量中的元素各列元素相同。实验验证:import torchx

2022-03-21 16:58:13 3359

原创 Chrome中安装vue.js devtool插件无法使用的解决方案(vue.js is not detected)

问题:在Crx4Chrome网站中下载了vue插件之后,出现vue.js is not detected 的错误。如下为亲测可用解决方案:1. 在Chrome浏览器中输入 chrome://version/ ,会出现Chrome的版本信息。如下:2. 在本地文件中找到Chrome的插件扩展程序安装目录,即为 个人资料路径。并打开Extensions文件夹,里面即为安装的插件的ID。如下:3. 如果你的浏览器安装了很多插件,则需要在Chrome浏览器中输入chrome://exte..

2021-02-18 09:48:39 6073 3

空空如也

空空如也

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

TA关注的人

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