storm常见问题解答
最近有朋友给我邮件问一些storm的问题,集中解答在这里。 一、我有一个数据文件,或者我有一个系统里面有数据,怎么导入storm做计算? 你需要实现一个Spout,Spout负责将数据emit到storm系统里,交给bolts计算。怎么实现spout可以参考官方的kestrel spout实现: https://github.com/nathanmarz/storm-kestrel 如果你的数据源不支持事务性消费,那么就无法得到storm提供的可靠处理的保证,也没必要实现ISpout接口中的ack和fail方法。 二、Storm为了保证tuple的可靠处理,需要保存tuple信息,这会不会导致内存OOM? Storm为了保证tuple的可靠处理,acker会保存该节点创建的tuple id的xor值,这称为ack value,那么每ack一次,就将tuple id和ack value做异或(xor)。当所有产生的tuple都被ack的时候, ack value一定为0。这是个很简单的策略,对于每一个tuple也只要占用约20个字节的内存。对于100万tuple,也才20M左右。关于可靠...
