查看OutputFieldsDeclarer
类,我发现declare(...)
有一个带有布尔标志direct
的重载方法。
如果我使用方法declare(Fields fields)
,它会将此布尔标记设置为false
。
我不确定Storm在使用Spouts和Bolts进行处理时如何在内部解释此布尔字段。
有人能解释一下这面旗帜的意义吗?
答案 0 :(得分:1)
如果您声明直接流(即将标志设置为true
),则需要
通过
collector.emitDirect(...)
方法(直接流不允许collector.emit(...)
)。那些
方法需要指定应该接收的使用者任务ID
元组。
此外,在将消费者连接到直接流时,您需要 指定
builder.setBolt(....).directGrouping("direct-emitting-bolt", "direct-stream-Id");
直接流上不允许所有其他连接模式。
直接流具有优势,即您具有细粒度控制
从生产者到消费者的数据分布。你可以实现
任何可以想象的分布模式。当然,直接流很多
更难处理。例如,您需要知道的任务ID
订阅的消费者(可以在TopologyContext
中查找
通过Bolt.prepare
)提供。