Skip to content

Commit

Permalink
fix picture format problem
Browse files Browse the repository at this point in the history
  • Loading branch information
rbmonster committed Jun 14, 2022
1 parent 89fe145 commit 48cd7c9
Show file tree
Hide file tree
Showing 85 changed files with 1,073 additions and 986 deletions.
10 changes: 5 additions & 5 deletions src/main/java/com/bigdata/FLINK.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Apache Flink

![image](https://github.com/rbmonster/file-storage/blob/main/learning-note/other/flink/architecture.png)
![image](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//other/flink/architecture.png)

## 概念
Apache Flink 是一个框架和分布式处理引擎,用于在**无边界和有边界数据流**上进行**有状态**的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
Expand All @@ -24,7 +24,7 @@ Apache Flink 是一个框架和分布式处理引擎,用于在**无边界和
2. 计数窗口(CountWindows):按照指定的条数来进行聚合,比如每来了10条数据处理一次。

### 有状态与无状态
![image](https://github.com/rbmonster/file-storage/blob/main/learning-note/other/flink/func-state.png)
![image](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//other/flink/func-state.png)

状态:只有在每一个单独的事件上进行转换操作的应用才不需要状态,换言之,每一个具有一定复杂度的流处理应用都是有状态的。任何运行基本业务逻辑的流处理应用都需要在**一定时间内存储所接收的事件或中间结果**,以供后续的某个时间点(例如收到下一个事件或者经过一段特定时间)进行访问并进行后续处理。
> 无状态:每次的执行都**不依赖**上一次或上N次的执行结果,每次的执行都是**独立**的。
Expand Down Expand Up @@ -84,7 +84,7 @@ Flink的水位线`waterMarks`:存在网络延迟等情况导致数据接收不
1. 事件驱动型应用无须查询远程数据库,本地数据访问使得它具有更高的吞吐和更低的延迟。
2. 传统分层架构下,通常多个应用会共享同一个数据库,因而任何对数据库自身的更改都需要谨慎协调。反观事件驱动型应用,由于只需考虑自身数据,因此在更改数据表示或服务扩容时所需的协调工作将大大减少。

![image](https://github.com/rbmonster/file-storage/blob/main/learning-note/other/flink/usecases-eventdrivenapps.png)
![image](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//other/flink/usecases-eventdrivenapps.png)

#### 数据分析应用
数据分析任务需要从原始数据中提取有价值的信息和指标。
Expand All @@ -95,14 +95,14 @@ Flink的水位线`waterMarks`:存在网络延迟等情况导致数据接收不
优点:
1. 流式分析省掉了周期性的数据导入和查询过程,因此从事件中获取指标的延迟更低
2. 导入数据的处理。批量查询必须处理那些由定期导入和输入有界性导致的人工数据边界,而流式查询则无须考虑该问题。
![image](https://github.com/rbmonster/file-storage/blob/main/learning-note/other/flink/usecases-analytics.png)
![image](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//other/flink/usecases-analytics.png)

#### 数据管道应用
提取-转换-加载(ETL)是一种在存储系统之间进行数据转换和迁移的常用方法。ETL 作业通常会周期性地触发,将数据从事务型数据库拷贝到分析型数据库或数据仓库。
数据管道和 ETL 作业的用途相似,都可以转换、丰富数据,并将其从某个存储系统移动到另一个。但数据管道是以持续流模式运行,而非周期性触发。因此它支持从一个**不断生成数据的源头**读取记录,并将它们以低延迟移动到终点。

优点:和周期性 ETL 作业相比,持续数据管道可以明显降低将数据移动到目的端的延迟。此外,由于它能够持续消费和发送数据,因此用途更广,支持用例更多。
![image](https://github.com/rbmonster/file-storage/blob/main/learning-note/other/flink/usecases-datapipelines.png)
![image](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//other/flink/usecases-datapipelines.png)

相关组件:Flink-CDC
## 参考资料
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/bigdata/SPARK.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ scala>
```

- master
![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/basic/sparkMaster.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/basic/sparkMaster.jpg)


- submit job
![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/basic/sparkWoker.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/basic/sparkWoker.jpg)



Expand Down
10 changes: 5 additions & 5 deletions src/main/java/com/book/CONCURRENT_BOOK.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 线程
## 线程状态
![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/concurrent/threadState.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/concurrent/threadState.jpg)

- 新建(NEW):创建后尚未启动。
- 可运行(RUNABLE):正在 Java 虚拟机中运行。但是在操作系统层面,它可能处于运行状态,也可能等待资源调度(例如处理器资源),资源调度完成就进入运行状态。所以该状态的可运行是指可以被运行,具体有没有运行要看底层操作系统的资源调度。
Expand Down Expand Up @@ -43,11 +43,11 @@
> java -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=summary -XX:+PrintNMTStatistics -version
- 用 Java8 的测试结果,19个线程,预留和提交的大概都是19000+KB,平均每个线程大概需要 1M 左右的大小

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/concurrent/threadState2.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/concurrent/threadState2.jpg)
## 线程池
### 线程池状态
线程池的5种状态:Running、ShutDown、Stop、Tidying、Terminated。
![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/concurrent/threadPool.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/concurrent/threadPool.jpg)

- RUNNING
1. 状态说明:线程池处在RUNNING状态时,能够接收新任务,以及对已添加的任务进行处理。
Expand Down Expand Up @@ -99,7 +99,7 @@ public ThreadPoolExecutor(int corePoolSize,//线程池的核心线程数量
- ThreadPoolExecutor.DiscardPolicy: 不处理新任务,直接丢弃掉。
- ThreadPoolExecutor.DiscardOldestPolicy: 此策略将丢弃最早的未处理的任务请求。

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/concurrent/threadPoolProcess.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/concurrent/threadPoolProcess.jpg)


### 阿里开发规范
Expand Down Expand Up @@ -151,7 +151,7 @@ public ThreadPoolExecutor(int corePoolSize,//线程池的核心线程数量

> 增加服务器核心数,与线程间的关系
![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/concurrent/threadPoolProcess.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/concurrent/threadPoolProcess.jpg)

> 假设: 1-p=5% 而n趋近于无穷大,实际起作用的最大线程数为20。
Expand Down
26 changes: 13 additions & 13 deletions src/main/java/com/book/JVM_BOOK.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Java虚拟机

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/heap-detail.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/heap-detail.jpg)

## 一、虚拟机数据区说明
1、程序计数器
Expand All @@ -21,7 +21,7 @@
- 定义:是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。
- 参数-Xmx和-Xms 最大堆内存和最小堆内存

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/hotstop-heap.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/hotstop-heap.jpg)

5、方法区
- 定义:是被各个线程共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
Expand Down Expand Up @@ -111,7 +111,7 @@

5. 经典的垃圾收集器

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/garbage-collector.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/garbage-collector.jpg)

5.1 Serial收集器
- 定义:一个单线程的垃圾收集器,在垃圾收集时必须暂停其他所有工作线程,直到收集结束。
Expand All @@ -125,7 +125,7 @@
- 定义:使用标记-整理算法。
- 用途:可以Parallel Scavenge收集器搭配使用,另一种是作为CMS收集器发生失败的后背方案。

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/serial-1.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/serial-1.jpg)

5.4 ParNew收集器
- 定义:Serial收集器的多线程并行版本。
Expand All @@ -134,7 +134,7 @@
- 新生代:标记复制。老年代:标记-整理
- 常使用参数:-XX:SurvivorRatio、-XX:PretenureSizeThreshold、-XX:HandlePromotionFailure

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/parNew-1.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/parNew-1.jpg)

5.5 Parallel Scavenge 收集器
- 定义:新生代收集器,同样基于标记-复制算法,能够并行收集的多线程收集器。特点是达到一个可控制的吞吐量。
Expand All @@ -151,7 +151,7 @@
- 定义:Parallel Scavenge收集器的老年版本,支持多线程并发收集,基于标记-整理算法。
- 与Parallel Scavenge搭配作为“吞吐量优先”的收集器搭配组合

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/parallel.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/parallel.jpg)

5.7 CMS(Concurrent Mark Sweep)收集器
- 定义:一种以获取最短回收停顿时间为目标的收集器,工作于老年代。
Expand All @@ -167,7 +167,7 @@
- -XX:CMSInitiatingOccupancyFraction 可以设置触发CMS收集的百分比。
- 参数-XX:CMSFullGCsBeforeCompaction:作用是要求CMS收集器在执行过若干次不整理的Full GC之后,下一次先进行碎片整理(默认值为0,表示每次FullGC都进行碎片整理)

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/cms-1.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/cms-1.jpg)

5.8 Garbage First 收集器
- 定义:面向服务端应用的垃圾收集器,基于Region的堆内存布局进行垃圾收集,每一个Region都可以根据需要扮演新生代的Eden空间、Survivor空间和老年代空间。Region中海油一类特殊的Humongous区域,专门用来存储大对象,G1认为只要超过了一个Region一半的对象即可认为是大对象。对于Humongous区域,正常当做老年代一部分。
Expand All @@ -187,8 +187,8 @@
5. 可靠停顿预测模型的建立:根据每个Region的回收成本,分析出收集的平均值、标准偏差、置信度等统计信息。
- 缺点:内存占用过高,在小内存应用上CMS的表现大于G1。

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/g1.jpg)
![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/g1-memory.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/g1.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/g1-memory.jpg)

5.9 其他的垃圾收集器
- Shenandoah 收集器:仅存在OpenJdk,区别G1的特点为支持并发整理,使用转发指针和读屏障实现。
Expand Down Expand Up @@ -327,7 +327,7 @@
- 工作内存 -> 虚拟机栈
- 从更基础层次上,主内存直接对应物理硬件的内存。

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/java-memory.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/java-memory.jpg)

#### 12.3. 内存交互的操作
- 相关动作
Expand Down Expand Up @@ -393,7 +393,7 @@ public class Singleton{
- 用户线程:完全建立在用户控件的线程库,优势不需要内核支持,劣势没有内核支援,需要自己定义线程操作。
- 混合实现:轻量级进程上支持多个用户线程。

![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/lwp.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/lwp.jpg)

java线程调度
- 抢占式调度。
Expand Down Expand Up @@ -431,7 +431,7 @@ java线程调度
- 轻量级锁:
- 定义:jdk6引入的新型锁机制,减少传统重量级锁使用操作系统互斥量产生的性能消耗。
- Hotspot的对象头存储对象自身的运行时数据,如HashCode、GC分带年龄等。官方成为Mark Word
![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/object-head.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/object-head.jpg)
- 步骤:
1. 判断对象没有被锁定,锁标志位为01
2. 在当前线程的栈帧创建一个锁记录(Lock Record)的空间,用于存储所对象目前的Mark Word的拷贝。
Expand All @@ -456,5 +456,5 @@ java线程调度
- 如果不再需要这个锁对象,那么将锁对象设置为无锁状态,重新进行偏向锁竞争。
- 例外:当对象被调用Object.hash()方法后,自动升级为轻量级锁。
- 锁膨胀: synchronize 偏向锁->轻量级锁-> 重量级锁 膨胀方向不可逆。
![avatar](https://github.com/rbmonster/file-storage/blob/main/learning-note/learning/jvm/lock-transfer.jpg)
![avatar](https://raw.githubusercontent.com/rbmonster/file-storage/main/learning-note//learning/jvm/lock-transfer.jpg)

Loading

0 comments on commit 48cd7c9

Please sign in to comment.