`
文章列表
这里有一个关于java的检查异常和非检查异常的观点, 我比较赞同, 就是对于业务系统来说, 基本上用非检查异常来代替检查异常.而在一些被广泛使用的类库中, 可以采用检查异常. 对于业务系统在调用类库的时候, 一般会将检查异常转换成非检查异常, 然后在最外层统一对异常进行处理. 最后的总结: 如果能从异常中恢复的就采用检查异常, 如果不能从错误中恢复的, 就应该采用非检查异常.
大家都知道DateFormat是线程非安全的, 一般在多线程环境下, 必须为每一次日期时间的转换创建一个DateFormat, 这里有一个更高效的做法: package com.javacodegeeks.test; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class ConcurrentDateFormatAccess { private ThreadLoc ...
非常巧妙的一个使用枚举的例子.原文见这里 interface Context { ByteBuffer buffer(); State state(); void state(State state); } interface State { /** * @return true to keep processing, false to read more data. */ boolean process(Context context); } enum States implements State { ...
这个用的也比较少, 做一个参考, 原文见这里 private BlockingQueue workQueue = new LinkedBlockingQueue(); private Map commandQueueMap = new ConcurrentHashMap(); public SynchronousQueue addCommand(Command command) { SynchronousQueue queue = new SynchronousQueue(); commandQueueMap.put(command, queue); ...
用的比较少, 做一个参考. 原文在这里 public class Calculator { private int calculatedValue; private int value; private ReadWriteLock lock = new ReentrantReadWriteLock(); public void calculate(int value) { lock.writeLock().lock(); try { this.value = value; ...
原文在这里 下面是一个计算的框架代码: /** * A class that calculates the optimal thread pool boundaries. It takes the desired target utilization and the desired * work queue memory consumption as input and retuns thread count and work queue capacity. * * @author Niklas Schlimm * */ public abstract class ...
storm wiki //storm最权威, 最新资料 storm starter //storm的hello world storm邮件列表 //storm的stack overflow storm wiki中文版 // 更新最及时, 几乎与storm wiki同步, 也有不少原创 庄周梦蝶blog里storm相关内容 //storm的贡献者之一, 有不少storm比较深入的原创 Twitter storm性能测试报告与分析 // 可以做一些参考 一些storm相关的slides: Storm: distributed and fault-tolerant realtime compu ...
最近我们的storm在跑的过程中, 发现bolt的complete latency都非常低, 在1ms以下, 而spout却不断的增加, 达到了好几千ms, 最后导致整个spout挂掉(后来发现complete latency不断增加跟fail有关). 这是一个非常严重的问题, 于是在storm-user上google了一把, 发现这里(1,2)已经有了一些答案. nathan对complete latency也做了一个非常详细的解释: complete latency(这里主要针对spout)是一个tuple从发出, 到经过bolt处理完成, 最终调用spout的ack这个完整的过程所花的 ...
在storm-user中看到的一个关于Storm Bolt内部实现的执行顺序的提问, 觉得对理解Bolt内部实现有帮助, 记录一下. prepare方法在worker初始化task的时候调用. execute方法在每次有tuple进来的时候被调用 cleanup实际上仅用于本地模式(local mode), 在集群模式(cluster mode)下该方法很难保证每次被正确执行. declearOutputFields方法仅在有新的topology提交到服务器, 用来决定输出内容流的格式(相当于定义spout/bolt之间传输stream的name:value格式), 在topology执 ...
最开始对storm ui上展示出来的emit和transferred数量不是很明白, 于是在storm-user上google了一把, 发现有人也有跟我一样的困惑, nathan做了详细的回答: emitted栏显示的数字表示的是调用OutputCollector的emit方法的次数. transferred栏显示的数字表示的是实际tuple发送到下一个task的计数. 如果一个bolt A使用all group的方式(每一个bolt都要接收到)向bolt B发射tuple, 此时bolt B启动了5个task, 那么trasferred显示的数量将是emitted的5倍. 如果一个bo ...
一个storm topology运行起来之后, 会在supervisor 机器上启动一些进程来运行spout和bolt实例. 如果一个topology里面一共有一个spout, 一个bolt。 其中spout的parallelism是2, bolt的parallelism是4, 那么我们可以把这个topology的总工作量看成是6, 那么 ...
目前使用的是storm.0.6.0这个版本. 至于其他版本有没有这问题, 不做研究. ★ yaml跟我们一般用的属性配置文件有所不同, 它的要求更严格一些, 因此在往conf/storm.yaml中添加配置的时候必须注意. 比如必须注意开始位置和冒号后面的空格, 否则配置不会生效. 关于yaml相关的资料, 网上有很多资料可以参考 如何检查配置是否生效, 可以使用命令: storm localconfvalue 配置关键字 但是这个命令只能在nimbus上生效, 在supervisor看到的还是默认值. 不知道为什么 ★ 在部署storm节点的时候需要安装jzmq和0qm, 在安装这两个 ...
代码很简单, 直接看就明白了, 可以在实际工作中借鉴, 原文在这里. 这个例子使用两种方式来演示如何生成全量索引: 一个是从db中通过sql生成全量索引 一个是通过tika解析文件生成全量索引 package SolrJExample; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer; import org.apache.solr.client.solrj.impl.XMLRespons ...
为了保证数据能正确的被处理, 对于spout产生的每一个tuple, storm都会进行跟踪, 这里面涉及到ack/fail的处理, 如果一个tuple处理成功, 会调用spout的ack方法, 如果失败, 会调用fail方法. 而在处理tuple的每一个bolt都会通过OutputCollector来告知storm, 当前bolt处理是否成功. 为了了解OutputCollector的ack/fail与Spout的ack/fail之间的关系, 我调试跟踪了一下storm代码. IBasicBolt 实现类不关心ack/fail, spout的ack/fail完全由后面的bolt的ack/f ...
最近打算在项目中用storm从一个database生成多个搜索引擎的实时索引, 于是看了一些相关的资料就开始上手了. 按照以前熟悉的套路, 使用spring来管理对象之间的依赖, 于是我开始将topology, spout, bolt看成一个个bean, 然后放在spring容器中来完成初始化, 但是在本地模式运行的时候, 出现序列化的问题(抛出java.io.NotSerializableException异常), 以为是有些类忘记实现序列化接口了, 于是给相关类加上了序列化接口, 再跑, 还是抛java.io.NotSerializableException异常, 说另外一个依赖jar中的类 ...
Global site tag (gtag.js) - Google Analytics