* localOrShuffleGrouping :发给同一个worker内部的bolt 不建议使用,如果有10个task的并发,但是碰巧有一个task在该worker内部,则所有数据都会发到本地的task,其他9个task则得不到任何数据) * 每个bolt类只会被实例化excutor个数次,每次task的被调用时,只是调用bolt类实例中的execute函数 所以每个bolt类中的变量,在task的每次调用过程中可以被共享 * 对于bolt中的静态成员可以在worker级别别共享(且静态对象无需支持序列化) * 当collect.emit(object)发送一个对象时,不要立即去更改object对象 * 因为emit()发送过程是异步的,真正发出去的可能(取决于是emit先执行,还是你修改的代码先执行)是你改之后的值 ---- * 每个bolt都可以有构造函数和prepare函数 * 构造函数是在jar分发之前就会被执行的 * prepare函数是jar分发到本地机器后,在本地执行的 如果要做数据共享,最好的方式是,通过构造函数把参数传入每一个bolt,然后在每个bolt内部的prepare函数中创建共享对象(尽量让对象在本地生成,因为有些类可能很大,或者无法序列化不方便在网络上传输) 有空时画一个完整的图 * bolt类,bolt实例,task 之间是什么关系 * 每次数据进来时,是如何调用execute函数的 * bolt变量共享方式,级别