扩展BeanFactoryPostProcessor类定义已经加载,但未实例化
1234567891011@Componentpublic class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { System.out.println("MyB...
AOP123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134...
生命周期指定初始化和销毁方法12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758/** * bean的生命周期: * bean创建---初始化----销毁的过程 * 容器管理bean的生命周期; * 我们可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法 * * 构造(对象创建) * 单实例:在容器启动的时候创建对象 * 多实例:在每次获取的时候创建对象 * * ...
分布式存储系统基础分布式存储系统首先要面对的问题就是数据分片,即将数据均匀地分布到多个存储节点。另外,为了保证可靠性和可用性,需要将数据复制多个副本,这就带来了多个副本的数据一致性问题。
大规模系统的重要目标是节省成本,因而只能采用性价比较高的PC服务器。这些服务器性能很好,但是故障率很高,要求系统能够在软件层面实现自动容错。当存储节点出现故障时,系统能够检测出来,并将原有的数据和服务迁移到集群中其他正常工作的节点。
基本概念异常在分布式存储系统中,往往将一台服务器或者服务器上运行的一个进程称为一个节点,节点与节点之间通过网络互联。然而,服务节点是不可靠的,网络也是不可靠的,它们之间通...
数据流转——Flink的数据抽象及数据交换过程本章打算讲一下flink底层是如何定义和在操作符之间传递数据的。
1. flink的数据抽象
1.1 MemorySegmentFlink作为一个高效的流框架,为了避免JVM的固有缺陷(java对象存储密度低,FGC影响吞吐 和响应等),必然走上自主管理内存的道路。
这个 MemorySegment 就是Flink的内存抽象。默认情况下,一个MemorySegment可以被看做 是一个32kb大的内存块的抽象。这块内存既可以是JVM里的一个byte[],也可以是堆外内存 (DirectByteBuffer)。
如果说byte[]数组和dir...
为执行保驾护航——Fault Tolerant与保证ExactlyOnce语义
1.Fault Tolerant演进之路对于7×24小时不间断运行的流程序来说,要保证fault tolerant是很难的,这不像是离线任 务,如果失败了只需要清空已有结果,重新跑一次就可以了。对于流任务,如果要保证能够重 新处理已处理过的数据,就要把数据保存下来;而这就面临着几个问题:比如一是保存多久的数据?二是重复计算的数据应该怎么处理,怎么保证幂等性? 对于一个流系统,我们有以下希望:
最好能做到exactly-once
处理延迟越低越好
吞吐量越高越好
计算模型应当足够简单易用,又具有足够的表达力
...
StreamOperator的抽象与实现
1. 数据源的逻辑——StreamSource与时间模型StreamSource抽象了一个数据源,并且指定了一些如何处理数据的模式。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990public class StreamSource<OUT, SRC ...
任务的调度与执行关于flink的任务执行架构,官网的这两张图就是最好的说明:
Flink 集群启动后,首先会启动一个 JobManger 和多个的 TaskManager。用户的代码会由 JobClient 提交给 JobManager,JobManager 再把来自不同用户的任务发给 不同的 TaskManager 去执行,每个TaskManager管理着多个task,task是执行计算的最小结构, TaskManager 将心跳和统计信息汇报给 JobManager。TaskManager 之间以流的形式进行 数据的传输。上述除了task外的三者均为独立的 JVM 进程。 要注意的...
1.flink的图结构事实上,flink总共提供了三种图的抽象,我们前面已经提到了StreamGraph和JobGraph,还 有一种是ExecutionGraph,是用于调度的基本数据结构。
上面这张图清晰的给出了flink各个图的工作原理和转换过程。其中最后一个物理执行图并非 flink的数据结构,而是程序开始执行后,各个task分布在不同的节点上,所形成的物理上的关 系表示。
从JobGraph的图里可以看到,数据从上一个operator流到下一个operator的过程中,上 游作为生产者提供了IntermediateDataSet,而下游作为消费者需要JobEdge。事实...
1. wordcount 例子123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051public class SocketTextStreamWordCount { public static void main(String[] args) throws Exception { /*if (args.length != 2) { System.err.println("USAGE:\...