storm的并发和消息保障性

Storm并发配置的优先级:

defaults.yaml < storm.yaml < topology-specific configuration < internal  component-specific configuration < external component-specific configuration

通过下图来理解并行度的一些配置:

image

消息的可靠处理机制

如何保证消息不被丢失?即什么条件下,storm会认为从一个spout发送出来的消息被完整处理了呢?

1.tuple tree不再生长

2.树中的任何消息被标识为 已处理。

同时被满足时即认为消息处理成功。

有三种方法可以去掉消息的可靠性:
1、将参数Config.TOPOLOGY_ACKERS设置为0,通过此方法,当Spout发送一
个消息的时候,它的ack方法将立刻被调用;
2、Spout发送一个消息时,不指定此消息的messageID。当需要关闭特定消息

可靠性的时候,可以使用此方法;
3、最后,如果你丌在意某个消息派生出来的子孙消息的可靠性,则此消息派生
出来的子消息在发送时丌要做锚定,即在emit方法中丌指定输入消息。因为这些
子孙消息没有被锚定在任何tuple tree中,因此他们的失败丌会引起任何spout
重新发送消息。

posted on 2015-04-12 13:42  tneduts  阅读(273)  评论(0编辑  收藏  举报

导航