布尔直接输出字段声明的意义(布尔直接,字段字段)

时间:2015-09-11 11:02:12

标签: apache-storm

查看OutputFieldsDeclarer类,我发现declare(...)有一个带有布尔标志direct的重载方法。

如果我使用方法declare(Fields fields),它会将此布尔标记设置为false

我不确定Storm在使用Spouts和Bolts进行处理时如何在内部解释此布尔字段。

有人能解释一下这面旗帜的意义吗?

1 个答案:

答案 0 :(得分:1)

如果您声明直接流(即将标志设置为true),则需要 通过

发出元组
collector.emitDirect(...)

方法(直接流不允许collector.emit(...))。那些 方法需要指定应该接收的使用者任务ID 元组。

此外,在将消费者连接到直接流时,您需要 指定

builder.setBolt(....).directGrouping("direct-emitting-bolt", "direct-stream-Id");

直接流上不允许所有其他连接模式。

直接流具有优势,即您具有细粒度控制 从生产者到消费者的数据分布。你可以实现 任何可以想象的分布模式。当然,直接流很多 更难处理。例如,您需要知道的任务ID 订阅的消费者(可以在TopologyContext中查找 通过Bolt.prepare)提供。