算法 (Algorithm)
Review
Tip
- 工作中遇到的问题,踩过的坑,学习的点滴知识
Share
share .super().thisDoc
视频
陈大惠老师:色情泛滥对现代人的伤害
袋鼠云
自己没遇到过的问题,考虑一下别人有没有遇到过,如果有的话,那就去学习,如果没有,说明这个问题本身可能有问题——简单地说,就是“抄”
Flink x
- 离现实时数据采集工具
- 原理
- 数据传输
InputChannel
|OutputResult
- 伪装成两个
Format
对数据进行 采集与存储的工作
- 数据传输
- 数据采集这一块 有一些亮点 (后期加入生态圈)
Flink CDC
- 是变更数据获取的缩写 (
Change Data Capture
) - 将源数据 (
Source
)的变动同步到一个或者多个目的地 (Sink
)- 再同步的过程中可以对数据进行一些额外操作 (
GROUP BY
|JOIN
|...
)
- 再同步的过程中可以对数据进行一些额外操作 (
- 解决: 对同一份数据多次下沉的场景,解决传统方式对一份数据多次分发的操作
- 比如落地:
Redis
|Elasticsearch
|ClickHouse
实现模式
主动查询
- 在数据源表中 保存上次更新的时间戳跟版本号
下游通过不断查询和上次记录做对比,来确定数据是否有变动,是否需要同步
优点:不涉及底层
binlog
的采集与解析 (减少数据传输过程)-
事件接收
通过触发器
Trigger
或者 日志的操作记录该事件 (例如Transaction log
、Binary log
、Write-ahead log
)- 源数据发生改变后附加在
Trigger
或者LOG
(Binlog
) 中 下游通过数据库底层的协议订阅并消费这些事件,对数据库的变动做回放的效果 达到数据的同步工作
优点:可以减少对数据库
Service
的压力,实时性比较高- 缺点:针对于
LOG
需要有对应的解析工具参与解析 (Canal
、Datax
、Debezium
),学习成本高
使用方法
输入 Debezium 等数据流进行同步
特点:做到处理的解耦工作 | 对于数据的处理得到的解耦合
相当于是 DBServer -> Debezium -> Kafka -> Flink -> TransSink
缺点:个人感觉维护量大、学习成本高
直接对接上游数据库进行数据同步
特点:学习成本小、无需考虑内部细节(内部都做了封装、开箱即用)
相当于是 DBServer -> Flink CDC ->TransSink
缺点:不透明化、内聚、数据安全需要考虑 (类似做一些加密操作)
Flink On Yarn
FLINK 上传与加载用户依赖的策略
-
双亲委派机制暴露的问题
通过一个类的完全限定名来判断并加载类
- 在
FLINK
集群中运行着整个FLINK
的框架代码,用户程序作为客体需要加载自己的依赖 - 根据双亲委派机制 会派送给父加载器去加载依赖,当父加载器加载到错误的依赖时,进而引发异常
双亲委派机制源码
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
synchronized (getClassLoadingLock(name)) {
// First, check if the class has already been loaded
Class<?> c = findLoadedClass(name);
if (c == null) {
try {
if (parent != null) {
c = parent.loadClass(name, false);
} else {
c = findBootstrapClassOrNull(name);
}
} catch (ClassNotFoundException e) {
// ClassNotFoundException thrown if class not found
// from the non-null parent class loader
}
if (c == null) {
// If still not found, then invoke findClass in order
// to find the class.
c = findClass(name);
}
}
if (resolve) {
resolveClass(c);
}
return c;
}
}
Chid - First 类加载器
protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
Class<?> c = this.findLoadedClass(name);
if (c == null) {
String[] var4 = this.alwaysParentFirstPatterns;
int var5 = var4.length;
for(int var6 = 0; var6 < var5; ++var6) {
String alwaysParentFirstPattern = var4[var6];
if (name.startsWith(alwaysParentFirstPattern)) {
return super.loadClass(name, resolve);
}
}
try {
c = this.findClass(name);
} catch (ClassNotFoundException var8) {
c = super.loadClass(name, resolve);
}
}
if (resolve) {
this.resolveClass(c);
}
return c;
}
- 整体是有一个过滤器
- 在过滤器的逻辑体内 (
Child-First
) 不是向原先的
parent.loadClass
再findClass
,而是先findClass
再loadClass
Other
Flink 中支持的两种类加载器 (
Parent - First
、Chid - First
)都是URLClassLoader
子类
修改 类加载器 方式
修改配置文件参数
- Flink尝试从应用程序隐藏类路径中的许多依赖项。
- 这有助于减少应用程序代码和类路径中的依赖关系之间的依赖关系冲突。
classloader.resolve-order : child-first / parent-first
修改源代码
- 使用maven-shade-plugin解决Flink的依赖冲突
- 用户代码手动类加载
getRuntimeContext().getUserCodeClassLoader()
- Flink 类加载器
- JVM 类加载器
参考链接
- 再谈双亲委派模型与Flink的类加载策略
- 简介 FLINK 上传与加载用户依赖的策略
- Debugging Classloading
Configuratio
Debugging & Expert Tuning
Other
解决
Linux - git: command not found
Centos下使用: yum install git -y 或者 yum install -y git
Ubuntu/Debian下使用: apt-get install git -y
Connect: network is unreachable
https://blog.csdn.net/liukun321/article/details/6662950
Yum: Loader plugins : fastestmirror
https://blog.csdn.net/totxian/article/details/45191091
https://blog.csdn.net/u010520146/article/details/85220785
Could not retrieve mirrorlist
https://jingyan.baidu.com/article/6c67b1d6f492d62786bb1e45.html
Failed to connect to xx :Network is unreachable
https://blog.csdn.net/qq_28641401/article/details/96305174
AUTHENTICATING FOR org.freedesktop.systemd1.manage-units
Failed to restart network.service: Access denied
```java [panel@panel5-2 ~]$ service network restart Restarting network (via systemctl): ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to manage system services or units. Authenticating as: Cloud User (gsadmin) Password: polkit-agent-helper-1: pam_authenticate failed: Authentication failure ==== AUTHENTICATION FAILED === Failed to restart network.service: Access denied See system logs and ‘systemctl status network.service’ for details.[FAILED]
[panel@panel5-2 ~]$ sudo service network restart Restarting network (via systemctl): [ OK ]
![image.png](https://cdn.nlark.com/yuque/0/2021/png/667110/1617533837765-2fad1447-4833-4642-a2a7-aa056a8e50b7.png#align=left&display=inline&height=400&margin=%5Bobject%20Object%5D&name=image.png&originHeight=799&originWidth=1202&size=104679&status=done&style=none&width=601)
```shell
# 查看文件大小
du -sh xxx
# 查看用户
cat /etc/passwd
# 查看网卡
nmcli d
# 重启网关
7.x 以下 : service network restart
7.x + : systemctl restart network
8.x : nmcli c reload [DEVICE]
centos8重启网卡命令nmcli
linux network配置