storm入门 第四章 消息的可靠处理
4.1 简介 storm可以确保spout发送出来的每个消息都会被完整的处理。本章将会描述storm体系是如何达到这个目标的,并将会详述开发者应该如何使用storm的这些机制来实现数据的可靠处理。 4.2 理解消息被完整处理 一个消息(tuple)从spout发送出来,可能会导致成百上千的消息基于此消息被创建。 我们来思考一下流式的“单词统计”的例子: storm任务从数据源(Kestrel queue)每次读取一个完整的英文句子;将这个句子分解为独立的单词,最后,实时的输出每个单词以及它出现过的次数。 本例中,每个从spout发送出来的消息(每个英文句子)都会触发很多的消息被创建,那些从句子中分隔出来的单词就是被创建出来的新消息。 这些消息构成一个树状结构,我们称之为“tuple tree”,看起来如图1所示: 图1 示例tuple tree 在什么条件下,Storm才会认为一个从spout发送出来的消息被完整处理呢?答案就是下面的条件同时被满足: tuple tree不再生长 树中的任何消息被标识为“已处理” 如果在指定的时间内,一个消息衍生出来的tuple tree未被完全处理成功,则认为此消息未被完整处理。这个超时值可以通过任务级参数 Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS 进行配置,默认超时值为30秒。 4.3 消息的生命周期