StatusUpdaterBolt:无法找到ID的未应用元组

时间:2017-12-06 12:27:32

标签: web-crawler stormcrawler

我有一个非常简单的拓扑,它从ES索引(AggregationSpout)喷出,获取页面(FetcherBolt)并使用StatusUpdaterBolt将ES状态更新为“FETCHED”。

但是,我在日志文件中注意到了这样的警告:

  

[警告]无法找到357dc2fcb59c6457884a8f7a83794c4cf77f490a3acfd849a792a35153ed4665的非固定元组

相应的调试信息如下所示: ...

  

2017-12-06 12:44:53.572 o.e.t.T.tracer   elasticsearch [客户端] [transport_client_boss] [T#2] [TRACE]   [214] [indices:data / write / bulk]收到来自的回复   [{ESPatentNode-1} {S4C2h8WjRuu6MpM25oM-3W} {Fvjny3VaQl2w45hPXZ5A9g} {127.0.0.1} {127.0.0.1:9300}]   2017-12-06 12:44:53.572 c.d.s.e.p.StatusUpdaterBolt   elasticsearch [ client ] [listener] [T#1] [DEBUG] afterBulk [105] with 47   回复2017-12-06 12:44:53.572 c.d.s.e.p.StatusUpdaterBolt   elasticsearch [ client ] [listener] [T#1] [DEBUG] Acked 1 tuple(s)for ID   5967f802c84e3e9c6ac22a3184e0665b850779cba9050fa4ec910a41f9f90655   2017-12-06 12:44:53.573 c.d.s.e.p.StatusUpdaterBolt   elasticsearch [ client ] [listener] [T#1] [DEBUG] Acked 2 tuple(s)for ID   357dc2fcb59c6457884a8f7a83794c4cf77f490a3acfd849a792a35153ed4665   2017-12-06 12:44:53.573 c.d.s.e.p.StatusUpdaterBolt   elasticsearch [ client ] [listener] [T#1] [DEBUG] Acked 1 tuple(s)for ID   092e59cd1ebb004884babfaf1d6ca4b7505b3dcb1b3cb3a52b9072d647fb7a93   2017-12-06 12:44:53.573 c.d.s.e.p.StatusUpdaterBolt   elasticsearch [ client ] [listener] [T#1] [WARN]无法找到unacked   元组   357dc2fcb59c6457884a8f7a83794c4cf77f490a3acfd849a792a35153ed4665

我想了解的是:

  1. 为什么可以将多个元组附加到ID
  2. 在StatusUpdaterBolt的afterBulk方法中,如何通过两次相同的“waitAck”缓存元素循环遍历“response”
  3. 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这些警告很正常,请参阅下面的说明。

    如果元组具有相同的URL,则
  1. 元组将具有相同的ID。在调试级别的日志中,您应该看到mappings => '已发送到标识为{}'

    的ES缓冲区{}
    1. 因为状态是FETCHED,元组被多次发送到ES(unlike DISCOVERED),然后在pseudo ack method中我们将两个元组作为值存储在缓存中。当处理来自ES的返回时,我们得到2个不同的结果,第一个得到两个元组,第二个除了触发你看到的消息之外什么都没做。
  2. 问题是,如果你所做的只是提取,为什么你会多次获得相同的URL。这可能值得研究。

    谢谢!