
框架
文章平均质量分 93
代码届彭于晏
代码届彭于晏
展开
-
基于springboot的Mybatis源码分析 -----------------2 sql执行顺序
可以看到Mapper是一个MapperProxy的代理类执行mapper的方法最终会进入MapperProxy的invoke方法进入MapperMethods#execute。以select为例result = sqlSession.selectOne(command.getName(), param);这个sqlSession是一个SqlSessionTemplateS...原创 2019-12-19 19:39:18 · 565 阅读 · 0 评论 -
基于springboot的Mybatis源码分析 -----------------1 Mybatis初始化
直接找到MybatisAutoConfiguration这个类,至于为什么要找这个类,可以看下我springboot源码相关的文章。这个类上有一个注解@AutoConfigureAfter(DataSourceAutoConfiguration.class)说明在这之前会优先去解析DataSourceAutoConfiguration这个类,从名字也能看出这个和数据源有关系...原创 2019-12-19 17:19:10 · 320 阅读 · 0 评论 -
spark源码系列(9)BlockManager的原理
上一篇说到CacheManager和checkpoint来管理缓存和数据相关的东西。但实际上,他们底层都是通过BlockManger来管理数据的。找到RDD#getOrCompute中的SparkEnv.get.blockManager.getOrElseUpdate(blockId, storageLevel, elementClassTag,我们就可以看到最终是通过BlockMana...原创 2019-12-09 13:43:26 · 521 阅读 · 0 评论 -
两篇文章全面理解分布式事务问题(2) 柔性事务
上一篇文章讲述的是抛弃A,保证CP的刚性分布式事务解决方案,这一篇介绍柔性分布式事务解决方案。柔性事务遵循BASE理论,抛弃C,保证AP,以最终一致性来代替强一致性,柔性分布式事务解决方案中MQ承担非常重要的角色。1.本地化消息表A B两个分布式应用,各自有一个本地化消息表。A中的业务和消息处于同一个本地事务中,也就意味着A的事务提交之后,消息表中也存放了这条消息。存完之后A系统会...原创 2019-11-07 17:00:00 · 223 阅读 · 0 评论 -
两篇文章全面理解分布式事务问题(1) 刚性事务
关于ACID,CAP和BASE这边就不详细说明了,想了解的可以找网上的相关文章。分布式事务分为刚性事务和柔性事务两种类别,根据CAP理论刚性事务是会舍弃掉A,保证CP刚性事务严格一致性 执行时间短 实时性要求高首先,很自然的,我们可以把一个分布式事务理解成一个包含了若干分支事务的全局事务。全局事务的职责是协调其下管辖的分支事务达成一致,要么一起成功提交,要么一起失败回...原创 2019-11-07 15:10:33 · 468 阅读 · 0 评论 -
flink源码解析3 ExecutionGraph的形成与物理执行
flink在client端形成jobGraph之后会提交给JobMaster ,在这里会形成ExecutionGraphJobMaster的构造函数中有这么一句话:this.executionGraph = this.createAndRestoreExecutionGraph(this.jobManagerJobMetricGroup);一直追踪导EecutionGraphBul...原创 2019-11-04 20:10:29 · 654 阅读 · 0 评论 -
flink源码解读2 jobGraph的形成
接着上一篇:LocalStrteamEnviroment#execute()JobGraph jobGraph = streamGraph.getJobGraph(); 追踪导StreamingJobGraphGenerator#createJobGraphprivate JobGraph createJobGraph() { // make sure that all...原创 2019-11-04 15:24:56 · 205 阅读 · 0 评论 -
flink----11 Time 和wartermark
针对stream数据中的时间,可以分为以下三种•Event Time:事件产生的时间,它通常由事件中的时间戳描述。•Ingestion time:事件进入Flink的时间Processing Time:事件被处理时当前系统的时间l原始日志如下•2018-10-10 10:00:01,134 INFO executor.Executor: Finished task i...原创 2019-06-20 17:02:09 · 1061 阅读 · 1 评论 -
flink----10 window
Window:l聚合事件(比如计数、求和)在流上的工作方式与批处理不同。•比如,对流中的所有元素进行计数是不可能的,因为通常流是无限的(无界的)。所以,流上的聚合需要由 window 来划定范围,比如 “计算过去的5分钟” ,或者 “最后100个元素的和” 。•window是一种可以把无限数据切割为有限数据块的手段l窗口可以是 时间驱动的 【Time Window】(比如:每30秒...原创 2019-06-20 16:36:13 · 273 阅读 · 0 评论 -
flink--9 fink 容错机制
flink的容错机制主要是通过checkpoint和state来实现的checkpiont机制和容错性Flink使用流重放和检查点的组合来实现容错。检查点与每个输入流中的特定点以及每个操作员的相应状态相关。流数据流可以从检查点恢复,同时通过恢复操作员的状态和从检查点重放事件来保持一致性(正好一次处理语义)。检查点间隔是在执行期间利用恢复时间(需要重播的事件数)来权衡容错开销的一种方法。...原创 2019-06-20 16:12:58 · 442 阅读 · 0 评论 -
flink--8 fink的一些高级特性 Boradcast Accumulators Distributed Cache
l把元素广播给所有的分区,数据会被重复处理•类似于storm中的allGrouping•dataStream.broadcast()l广播变量允许编程人员在每台机器上保持1个只读的缓存变量,而不是传送变量的副本给tasksl广播变量创建后,它可以运行在集群中的任何function上,而不需要多次传递给集群节点。另外需要记住,不应该修改广播变量,这样才能确保每个节点获取到的值都是一致...原创 2019-06-20 15:30:03 · 251 阅读 · 0 评论 -
flink -------1 flink特点与其他流处理框架对比
Apache Flink 是一个开源的分布式,高性能,高可用,准确的流处理框架。 主要由 Java 代码实现。 支持实时流(stream)处理和批(batch)处理,批数据只是流数据的一个极限特例。 Flink原生支持了迭代计算、内存管理和程序优化。引用官方网站的一张图flink的架构图如下在大数据处理领域,批处理任务与流处理任务一般被认为是两种不同的任务,一个大数据框架...原创 2019-06-02 22:26:10 · 1379 阅读 · 0 评论 -
flink----12 wartermark 案例,接上一节
上一节的案例我们得到了触发window的条件watermark+window 处理乱序数据我们上面的测试,数据都是按照时间顺序递增的,现在,我们输入一些乱序的(late)数据,看看 watermark 结合 window 机制,是如何处理乱序的。nc -l 90000001,15383598820000001,15383598860000001,153835989200...原创 2019-06-20 17:21:29 · 671 阅读 · 1 评论 -
flink---7 flink的DataType和序列化
Flink支持的DataTypelJava Tuple 和 Scala case classlJava POJOs:java实体类lPrimitive Types•默认支持java和scala基本数据类型lGeneral Class Types•默认支持大多数java和scala classlHadoop Writables•支持hadoop中实现了org.apac...原创 2019-06-12 20:12:08 · 542 阅读 · 0 评论 -
flink---6 dataSet api (2)transformation和parallel和sink
transfromransformation Description Map data.map(new MapFunction<String, Integer>() { public Integer map(String value) { return Integer.parseInt(value); }...原创 2019-06-12 20:09:21 · 171 阅读 · 0 评论 -
从NIO到netty(17) 几种常见的编解码器
LineBasedFrameDecoder基于行的解码器,遇到 "\n"、"\r\n"会被作为行分隔符也就是说如果是传递过来的消息是两行,每一行消息就会做一个消息,解决粘包拆包问题FixedLengthFrameDecoder基于固定长度的解码器,比如一开始包分成四个+---+----+------+----+| A | BC | DEFG | HI |+---...原创 2019-05-07 19:37:49 · 530 阅读 · 0 评论 -
从NIO到netty(15) netty的编解码处理器
Netty处理器重要概念:* 1.Netty处理器可以分为两类,入站处理器和出站处理器,* 2.入站处理器的顶层是ChannelInboundHandler,出站处理器的顶层是ChannelOutboundHandler* 3.数据处理时常用的各种解码器本质上都是处理器* 4.编码:本质是一种出站处理器,因此编码一定是一种ChannelOutboundHandler* 5.解码:本质是...原创 2019-05-07 19:10:14 · 200 阅读 · 0 评论 -
从NIO到netty(14) ByteBuf和ReferenceCounted
ByteBuf是Netty提供的代替jdk的ByteBuffer的一个容器,首先看一下他的具体用法:public class ByteBufTest0 { public static void main(String[] args) { ByteBuf byteBuf = Unpooled.buffer(10);//堆缓冲区 for(int i=0;i&...原创 2019-05-07 19:02:34 · 323 阅读 · 0 评论 -
flink -----13 并行度和生产上的配置
TaskManager与SlotFlink的每个TaskManager为集群提供solt。 solt的数量通常与每个TaskManager节点的可用CPU内核数成比例。一般情况下你的slot数是你每个节点的cpu的核数。l一个Flink程序由多个任务组成(source、transformation和 sink)。 一个任务由多个并行的实例(线程)来执行, 一个任务的并行实例(线程)数...原创 2019-06-20 17:25:55 · 800 阅读 · 0 评论 -
flink -----14 Connector
Kafka-connectorKafka中的partition机制和Flink的并行度机制深度结合lKafka可以作为Flink的source和sinkl任务失败,通过设置kafka的offset来恢复应用Kafka Consumer消费策略设置setStartFromGroupOffsets()【默认消费策略】•默认读取上次保存的offset信息•如果是应用第一次...原创 2019-06-20 17:36:31 · 166 阅读 · 0 评论 -
flink----2 安装模式
flink有四种部署模式,jvm和local模式比较简单,这里就不说了,主要说standalone模式和yarn模式1.standaolne模式上图是官网上摘录得一张图片,其中master就是jobmananger,worker就是taskmanager,修改flink-conf.yaml中的jobmananger.rpc.address 指定ip作为jobmananger, sl...原创 2019-06-11 12:51:38 · 212 阅读 · 0 评论 -
工作流调度框架 oozie 和azkaban
先说oozieoozie一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop MapReduce、Pig Jobs的任务调度与协调。Oozie需要部署到JavaServlet容器中运行。主要用于定时调度任务,多任务可以按照执行的逻辑顺序调度。oozie分成三个模块1) Workflow顺序执行流程节点,支持fork(分支多个节点),join(...原创 2019-09-22 20:33:42 · 687 阅读 · 0 评论 -
spark源码系列(8) CacheMananger 和checkpoint
老规矩,一张图先说明全流程进入源码:RDD#iteratorfinal def iterator(split: Partition, context: TaskContext): Iterator[T] = { if (storageLevel != StorageLevel.NONE) { SparkEnv.get.cacheManager.getOrCompu...原创 2019-09-20 20:30:13 · 165 阅读 · 0 评论 -
spark源码系列(6) shuffle执行原理
看ShuffleMapTask#runTaskoverride def runTask(context: TaskContext): MapStatus = { 。。。。 val manager = SparkEnv.get.shuffleManager writer = manager.getWriter[Any, Any](dep.shuffleHandle, pa...原创 2019-09-19 19:51:10 · 218 阅读 · 0 评论 -
spark源码系列(5) TaskSchedule原理
接着上一讲进入TaskSchedule#submitTasksval manager = createTaskSetManager(taskSet, maxTaskFailures) 首先创建一个TaskSetManangerTaskMananger对一个单独的TaskSet进行任务调度,这个对象负责追踪每一个task,如果task失败的话会负责重试task,直到超过次数,并且会通过...原创 2019-09-19 12:43:09 · 196 阅读 · 0 评论 -
spark源码系列(4) spark stage划分
我们进入RDD.scala,随便找一个action,就拿count开刀吧def count(): Long = sc.runJob(this, Utils.getIteratorSize _).sum 这里会调用sparkContext#runJob方法。一直追踪这个方法最终会发现调用的是dagScheduler.runJob(rdd, cleanedFunc, partitio...原创 2019-09-18 20:11:56 · 258 阅读 · 0 评论 -
spark源码系列(2) Master
本节主要分两个模块来介绍1.Master的主备切换、注册与状态变更2.资源调度-------------------------------先看Master的主备切换。先来一张流程图找到Master.scalaonstart方法:val serializer = new JavaSerializer(conf)val (persistenceEngine_, l...原创 2019-09-17 19:07:22 · 173 阅读 · 0 评论 -
spark源码系列(1) SparkContext的初始化
我们先整体画一张spark程序执行的全流程1-2.我们通过spark-submit提交application时候,程序会通过反射的方式创建出一个DriverActor进程出来,Driver进程会创建一个SparkContext,SparkContext会初始化最重要的两个组件,DAGScheduler和TaskScheduler。3-7.TaskScheduler会通知Master,M...原创 2019-09-17 11:15:32 · 778 阅读 · 0 评论 -
spark源码系列(3) worker工作原理
这一篇分析worker的工作原理上一篇我们说到Master会给worker发出LaunchDriver和LaunchExecutor的消息先来一张总体的流程图这边我们先说launchDriverworker.scalacase LaunchDriver(driverId, driverDesc) => { logInfo(s"Asked to launch dr...原创 2019-09-18 19:28:39 · 164 阅读 · 0 评论 -
Java工程师学快速Python(5) 面向对象
类对象class MyClass: """一个简单的类实例""" i = 12345 def f(self): return 'hello world' # 实例化类x = MyClass() # 访问类的属性和方法print("MyClass 类的属性 i 为:", x.i)print("MyClass 类的方法 f 输出为:", x....原创 2019-06-27 12:54:53 · 168 阅读 · 0 评论 -
flink---4 dataStream api (1)source
lsource是程序的数据源输入,你可以通过StreamExecutionEnvironment.addSource(sourceFunction)来为你的程序添加一个source。lflink提供了大量的已经实现好的source方法,你也可以自定义source•通过实现sourceFunction接口来自定义无并行度的source,•或者你也可以通过实现ParallelSourceF...原创 2019-06-11 20:23:24 · 236 阅读 · 0 评论 -
flink----3 HA
jobManager协调每个flink任务部署。它负责任务调度和资源管理。l默认情况下,每个flink集群只有一个JobManager,这将导致一个单点故障(SPOF):如果JobManager挂了,则不能提交新的任务,并且运行中的程序也会失败。l使用JobManager HA,集群可以从JobManager故障中恢复,从而避免SPOF(单点故障) 。 用户可以在standalone或 Y...原创 2019-06-11 19:10:48 · 260 阅读 · 0 评论 -
flink---5 dataStream api (2)transformation和parallel和sink
常见transformationTransformation Description Map DataStream → DataStream 输入一个元素,然后返回一个元素,中间可以做一些清洗转换等操作 DataStream<Integer> dataStream = //...dataStream.map(new MapFunction&...原创 2019-06-12 09:56:53 · 150 阅读 · 0 评论 -
从servlet到springboot(2) springboot启动 run方法解析 之事件监听 listeners.starting()为止
上一篇中我们主要看了SpringApplication的初始化,接下去几篇我们着重看下run方法<---------public ConfigurableApplicationContext run(String... args) { // 计时工具 StopWatch stopWatch = new StopWatch(); stopWatch.start(...原创 2019-01-10 14:07:32 · 1517 阅读 · 0 评论 -
从servlet到springboot(14) Tomcat源码分析(1)。tomcat的启动与Lifecycle接口
前面几篇内容主要几种在springboot启动时,我们接下去会探讨下请求到达spring容器的过程。请求进入spring容器最先会进入tomcat,所以我们优先分析下tomcat 如图所示:tomcat的顶层容器是Server,一个tomcat顶多只有一个Server,一个Server下有多个Service,一个Service又包含多个Connectors和一个Container。...原创 2019-02-10 15:44:56 · 243 阅读 · 0 评论 -
从servlet到springboot(5) springboot启动 run方法解析之analyzers = new FailureAnalyzers(context);
上一篇我们分析到analyzers为止,发现analyzers中springboot自定义的有10种,这一节我们会依次分析这10种analyzers分析之前我们先看一下FailureAnalyzers 的继承体系接口只有一个方法 FailureAnalysis analyze我们看抽象类AbstractFailureAnalysis的analyzepublic FailureA...原创 2019-02-11 14:20:23 · 642 阅读 · 0 评论 -
从servlet到springboot(15) Tomcat源码分析(2)。Container和connectors
上一篇中我们分析了tomcat启动的整体流程和管理生命周期的系列组件,这一节,我们将要分析Container和Connectors先看下Container的类继承体系可以看到Container有四个子类,Context Engine Wrapper Host和一个默认的实现类 ContainerBase 这些类都继承LifecycleBase接口。所以符合tomcat的生命周期管理方...原创 2019-02-10 19:44:31 · 246 阅读 · 0 评论 -
从servlet到springboot(16) Tomcat源码分析(3).责任链模式与Pipeline-Value管道
之前我们已经把tomcat的源码分析完了,但是还有一个内容没有说,那就是Pipeline-Value管道,Tomcat中Container处理请求是使用Pipeline-Value管道模式来处理的。实际上这是责任链模式的一个变种,所以我们要优先说明下责任链模式责任链模式先讲一个故事:古代女子通常是比较没地位的,如果一个妇女要出门,首先必须经过他父亲的同意,如果父亲没有回应就交给丈夫,如...原创 2019-02-11 13:48:26 · 1484 阅读 · 0 评论 -
dubbo源码解析(6)dubbo服务暴露--- 本地暴露
在启动dubbo服务的时候我们可以看到这样一些日志第一行代码表示dubbo服务在 spring启动之后准备开始启动了,这行代码定位到ServiceBean#onApplicationEvent()中这个方法在spring启动过程的refresh方法中会执行到,具体可以看我spring系列文章这里关注this.export();直接定位到ServiceConfig#th...原创 2019-02-22 19:19:12 · 252 阅读 · 0 评论 -
dubbo源码解析(3) dubbo的ioc和aop
前两篇文章我们分析了dubbo的spi,这一篇文章我们将分析dubbo另外两个内核,ioc和aopdubbo的ioc主要是Extensionloader#injectExtension(T instance)private T injectExtension(T instance) { try { if (objectFactory != null) { ...原创 2019-02-18 10:21:10 · 616 阅读 · 0 评论