归档之于 ‘ 2015 年7月 ’
Apache Storm 官方文档 —— FAQ
Storm 最佳实践
关于配置 Storm + Trident 的建议
- worker 的数量最好是服务器数量的倍数;topology 的总并发度(parallelism)最好是 worker 数量的倍数;Kafka 的分区数(partitions)最好是 Spout(特指
KafkaSpout
)并发度的倍数 - 在每个机器(supervisor)上每个拓扑应用只配置一个 worker
- 在拓扑最开始运行的时候设置使用较少的大聚合器,并且最好是每个 worker 进程分配一个
- 使用独立的调度器(scheduler)来分配任务(关于Scheduler 的知识请参考 xumingming 的博客 —— 译者注)
- 在每个 worker 上只配置使用一个 acker —— 这是 0.9.x 版本的默认特性,不过在早期版本中有所不同
- 在配置文件中开启 GC 日志记录;如果一切正常,日志中记录的 major GC 应该会非常少
- 将 trident 的 batch interval 配置为你的集群的端到端时延的 50% 左右
- 开始时设置一个很小的
TOPOLOGY_MAX_SPOUT_PENDING
(对于 trident 可以设置为 1,对于一般的 topology 可以设置为 executor 的数量),然后逐渐增大,直到数据流不再发生变化。这时你可能会发现结果大约等于“2 × 吞吐率(每秒收到的消息数) × 端到端时延”
(最小的额定容量的2倍)。
Apache Storm 官方文档 —— 配置
Storm 有大量配置项用于调整 nimbus、supervisors 和拓扑的行为。有些配置项是系统级的配置项,在拓扑中不能修改,另外一些配置项则是可以在拓扑中修改的。
每一个配置项都在 Storm 代码库的 defaults.yaml 中有一个默认值。可以通过在 Nimbus 和 Supervisors 的环境变量中定义一个 storm.yaml 来覆盖默认值。最后,在使用 StormSubmitter 提交拓扑时也可以定义基于具体拓扑的配置项。但是,基于拓扑的配置项仅仅能够覆盖那些以 “TOPOLOGY” 作为前缀的配置项。
Java中如何避免空指针异常
原文地址 首发博客地址 译者:aCoder2013 校对:方腾飞
这个问题对于我来说是一个很常见的问题,这也是由初级程序员成长到中级程序员的时候经常会遇到的问题。程序员不知道或不信任正在使用的约定,并且小心的检查着null。还有当程序员写代码的时候,总是会依赖于通过返回空(NULL)来表明某些意义,因此需要调用者去检查Null。换种方式来说,有两种空指针的检查场景:
- 期望的结果就是null。
- 期望的结果不是null。
第二种很简单,可以通过用assert或者允许程序报错,例如抛出NullPointerException。Assertions是一个从Java1.4加进来的高度未被利用的特性,语法是:
Java Date Time 教程-时间测量
原文链接 作者:Jakob Jenkov 译者:魏嘉鹏
在Java中,用System.currentTimeMillis()
来测量时间最方便。
你要做的是在某些操作之前获取到时间,然后在这些操作之后你想要测量时间,算出时间差。下面是一个例子:
[code lang=”java”]
long startTime = System.currentTimeMillis();
callOperationToTime();
long endTime = System.currentTimeMillis();
long totalTime = endTime – startTime;
[/code]
阅读全文
图解 Java IO : 二、FilenameFilter源码
Writer :李强强
从上一篇 图解 Java IO : 一、File源码 并没有把所有File的东西讲完。这次讲讲FilenameFilter,关于过滤器文件《Think In Java》中写道:
更具体地说,这是一个策略模式的例子,因为list()实现了基本功能,而按着形式提供了这个策略,完善list()提供服务所需的算法。
java.io.FilenameFilter是文件名过滤器接口,即过滤出符合规则的文件名组。
Java Date Time 教程
原文链接 作者:Jakob Jenkov 译者:魏嘉鹏
目录
- Java 8 Date Time API
- Java 7 Date Time API
当你初次尝试弄明白怎么去使用Java的date time 的API的时候,那是相当令人困惑的。Therefore I have put together this little trail on Java’s date and time classes。希望这会让你对Java’的date类和time类有个总体的认识。我也希望这能消除一些Sun所制造的关于Java中许多date和time类的困惑。
实际上,在Java8中,随着一整套新的类的引入,旧有的date time API已经发生了改变(清除)。这个教程将会一起解释Java8和Java7的date time API.