`
distantlight1
  • 浏览: 43645 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表
1.问题背景 kafka是以高吞吐量著称的,但日前解决一个实际问题中,发现使用不当仍会无法充分利用起吞吐量。我们的场景如下: 有两个kafka集群,需要从上游kafka读一个topic的消息,做一些自定义处理,再写到下游kafka的特定topic(有人说用flume,确实可以,不过自定义处理比较复杂的时候用flume就有点麻烦了) 这里集中在写这一端(读没有问题),开始使用最简单的方式,配一个Producer的bean,然后Producer.send()写下游。压测的时候发现写出去的流量很低,单进程出口流量大概只有1-2Mbps,低的难以接受   2.配置项 开始以为是配置有问题 ...
1.背景 spark streaming有状态计算(如UV)通常采用DStream.updateStateByKey(实际是PairDStreamFunctions增强到DStream的),具体实现网上讲的很多。spark streaming是持续计算,有状态时不能通过简单的DAG/lineage容错,所以必须设置checkpoint(否则Job启动会报错) checkpoint会持久化当批次RDD的快照、未完成的Task状态等。SparkContext通过checkpoint可以重建DStream,即使Driver宕机,重启后仍可用SparkContext.getOrElse从chec ...
引子:在使用spark和hadoop的时候,遇到一些进程退出时的报错。因此顺便研究了一下jvm以及一些开源框架的关闭钩子的机制。这篇文章不涉及底层native实现,仅限Java层面   1.jvm关闭钩子 注册jvm关闭钩子通过Runtime.addShutdownHook(),实际调用ApplicationShutdownHooks.add()。后者维护了一个钩子集合IdentityHashMap<Thread, Thread> hooks ApplicationShutdownHooks类初始化的时候,会注册一个线程到Shutdown类   static { ...
在做一些后台服务的时候,有时候需要一些轻量级的Http入口,以便通过浏览器就能实现便捷的后台功能,例如   1.监控服务运行状态,如服务存在性、版本、配置、性能等 2.手动触发一些功能入口(特别适合测试环境的冒烟测试) 3.支持一些紧急操作,例如手动清缓存,有时候排查问题有用   这些操作通常数量不多,也没什么并发,专门搭一套web框架(如tomcat+spring mvc)有点浪费,一点不封装又不方便。以下用netty+javassist实现一个简单的http服务框架,使得在使用上达到接近spring mvc的体验。这里还使用了spring-bean,但只是为了托管实例方便,如 ...
最近在集群上跑spark时发现有些reduceByKey操作结果不符合预期,大致伪代码如下(公司统一用java,就没写成scala,用了scala的简写节省字数)。就是类似WordCount的简单计算,DimType是一个枚举类 JavaPairRDD<DimType, Long> rawRdd=...; JavaPairRDD<DimType, Long> reducedRdd = entryPairRDD .reduceByKey(_+_); List<Tuple2& ...
续上篇   Step 5-TaskSchedulerImpl override def submitTasks(taskSet: TaskSet) {   val tasks = taskSet.tasks   logInfo("Adding task set " + taskSet.id + " with " + tasks.length + " tasks")   this.synchronized {     // 创建TaskSetManager     val manager = createTaskSet ...
1.概述 Action算子是触发Spark计算的入口,属于Spark核心逻辑。本文梳理Action触发、计算、返回的整个数据流   本文涉及代码主体位于org.apache.spark.scheduler/rdd/executor几个模块。核心类:RDD、SparkContext、DAGScheduler、TaskSchedulerImpl、C ...
本系列文章为对Spark主要逻辑源码学习整理。主要参考《Spark技术内幕》一书(简称《内幕》)。《内幕》主要以源码模块为主线进行横向解析。本文则致力于由“事件”触发的纵向逻辑为主线,例如Action算子、Transform算子、集群启动等,这个角度基本Spark运行时的调用栈。各主线直接没有必然的先后联系   如无特别说明,本文基于Spark 2.10版本源码,并且仅讨论Standalone部署模式   文章内黄底部分表示重要调用栈逻辑,绿底部分表示比较重要但属其他模块逻辑,当前文章不做展开 除源码外,主要内容在注释中说明。包括对源码注释的翻译以及个人说明   例如 // ...
再接上篇,HashMap的最后一部分源码 主要是TreeNode逻辑实现,其中包含红黑树增删的相关算法(具体可以参考红黑树的相关介绍)   /** * TreeNode的Entry类 * * TreeNode维持为红黑树,保证树的高度为O(logN),并按hashC ...
本文是上一篇的继续,补全HashMap剩余部分源码 主要是KeySet实现以及一些java8特性方法签名(实现省略了) /** * 返回键值集合的一个视图 * * <pre> * 实际是实现key集合的一个引用迭代子,HashMap本身的变更可以在keySet中直接反映出来 * * 如果HashMap在keySet在遍历过程中发生改变(keySet本身的remove除外),则遍历会失败(fast-fail) * * 注意keySet不是一个全功能的java.util.S ...
HashMap是最常用的Map实现 因为源码很长,先列举一些关键点。这些信息在常规使用中可能不容易被了解到   1.HashMap中的元素按照hash值分为不同的“桶”(bin),如果散列特性好,元素在桶中分布会比较均匀 2.实际存储用的has ...
Ehcache支持方法注解方式管理缓存,使代码的侵入性很小。最常用的Ehcache注解是@Cacheable、@CacheEvict、@CachePut 本文通过分析源码整理了这几个注解的实现逻辑和关系,并指出一些组合使用时的限制   1注解类源码 1.1@Cacheable /** ...
本分类是对Java一些基础类源码的学习记录   很多平时用惯的类和方法,细看源码的话还是有不少细节和优化的(虽然用的时候很多时候不需要想这么多)。作为一个语言的基础代码,需要考虑非常全面;同时一些细小的优化可能带来很大的不同(因为使用的地方特别多),所以很多方面还是值得学习的,对于自己开发基础服务/基础模块是很有帮助的   文章内容主要是以对源码注释文档的翻译为主,也包含一些自己的理解  
package my.java.lang; /** * 所有类的基类,所有的对象(包括数组)都继承Object类 * * @author unascribed * @version 1.73, 03/30/06 * @see java.lang.Class * @since JDK1.0 */ public class Object { /** * 初始化 */ private static native voi ...
Global site tag (gtag.js) - Google Analytics