diff --git a/docs/2.md b/docs/2.md index 83b26e5bbbc4d0182f4e92ce1576da56aa9a9833..be388a73163cfae1fa5adc9c6462a03d232377e6 100644 --- a/docs/2.md +++ b/docs/2.md @@ -73,7 +73,7 @@ Bolt 中最主要的方法是 `execute` 方法, 当有一个新 Tuple 输入的 topology(拓扑)定义中有一部分是为每一个 bolt 指定输入的 streams . stream grouping 定义了stream 如何在 Bolts tasks 之间分区. -Storm 中一共有8个内置的 Stream Grouping. 可聂以通过实现 [CustomStreamGrouping](javadocs/org/apache/storm/grouping/CustomStreamGrouping.html) 接口来自定义 Stream groupings. +Storm 中一共有8个内置的 Stream Grouping. 可以通过实现 [CustomStreamGrouping](javadocs/org/apache/storm/grouping/CustomStreamGrouping.html) 接口来自定义 Stream groupings. 1. **Shuffle grouping**: Tuple 随机的分发到 Bolt Task, 每个 Bolt 获取到等量的 Tuple. 2. **Fields grouping**: streams 通过 grouping 指定的字段来分区. 例如流通过 "user-id" 字段分区, 具有相同 "user-id" 的 Tuple 会发送到同一个task, 不同 "user-id" 的 Tuple 可能会流入到不同的 tasks. diff --git a/docs/5.md b/docs/5.md index b021d721555d09fd9d1cbe3000c46659f14f0681..afb115e2b6bc93ecd9c538266e8cd08ce3d926de 100644 --- a/docs/5.md +++ b/docs/5.md @@ -46,7 +46,7 @@ public interface ISpout extends Serializable { _collector.emit(new Values("field1", "field2", 3) , msgId); ``` -下一步,tuple被发送到消费的 bolts中,Storm 开始监控创建的 the tree of messages。如果 Storm 检测到 tuple被完全处理,Storm 会在原来的 Spout 上根据message id 调用 ack 方法.同样的,如果处理 tuple超时了,Storm会调用在 `Spout` 上调用 `fail` 方法.由于 tuple ack或者fail,都原来创建这个tuple 的 Spout task调用.所以如果一个 `Spout` 在集群上运行很多任务,tuple 不会被多个 `Spout` 任务 acked 或者 failed. +下一步,tuple被发送到消费的 bolts中,Storm 开始监控创建的 the tree of messages。如果 Storm 检测到 tuple被完全处理,Storm 会在原来的 Spout 上根据message id 调用 ack 方法.同样的,如果处理 tuple超时了,Storm会在 `Spout` 上调用 `fail` 方法.由于 tuple ack或者fail,都原来创建这个tuple 的 Spout task调用.所以如果一个 `Spout` 在集群上运行很多任务,tuple 不会被多个 `Spout` 任务 acked 或者 failed. 我们再通过 `KestrelSpout` 来看看 `Spout` 需要保证消息处理那些情况.当 `KestrelSpout` 从 Kestrel queue中读取消息的时候,它只是 "open" 了message.这意味着消息并没有真正从队列出来,而是处于一种 “pending” 状态,承认message 已经完成.在这种 pending 状态的时候,message不会将消息发送到队列的其他用 consumer.此外,如果客户端断开所有 pending 状态的消息,那么客户端将把消息放回到队列.当一条 message opened后,Kestrel 向客户端提供消息,并提供一个唯一性的id标识消息. 当发送 tuple 到 SpoutOutputCollector的时候,就用Kestrel 提供的id 作为 “message id”。当 KestrelSpout 调用 ack或者fail的时候,KestrelSpout会向Kestrel 发送一条ack 或者 fail消息,包括 message id,以让Kestrel 将消息从队列中取出,或者放回去.