2

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

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

[警告] 找不到 357dc2fcb59c6457884a8f7a83794c4cf77f490a3acfd849a792a35153ed4665 的未确认元组

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

2017-12-06 12:44:53.572 oetTtracer elasticsearch[ client ][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 cdsepStatusUpdaterBolt elasticsearch[ client ][listener][T#1][DEBUG] afterBulk [105] with 47 responses 2017-12-06 12:44:53.572 cdsepStatusUpdaterBolt elasticsearch[ client ][listener][T#1] [DEBUG] Acked 1 tuple(s) for ID 5967f802c84e3e9c6ac22a3184e0665b850779cba9050fa4ec910a41f9f90655 2017-12-06 12:44:53.573 cdsepStatusUpdaterBolt elasticsearch[ client] [侦听器] [t#1] [debug] ID 357DC2FCB59C6457884A8F7A83794CF77F490A3ACFDD849A79A792A35151515153ED4665ED4665 2017-12-12-12-12-12:44:44:44:44:44:(s) for ID 092e59cd1ebb004884babfaf1d6ca4b7505b3dcb1b3cb3a52b9072d647fb7a93 2017-12-06 12:44:53.573 cdsepStatusUpdaterBolt elasticsearch[ client ][listener][T#1] [WARN] Could not find unacked tuple for 357dc2fcb59c6457884a8f7a83794c4cf77f490a3acfd849a792a35153ed4665

我想了解的是:

  1. 为什么可以将多个元组附加到一个 ID
  2. 如何在 StatusUpdaterBolt 的 afterBulk 方法中通过“响应”循环两次相同的“waitAck”缓存元素

在此先感谢您的帮助!

4

1 回答 1

1

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

  1. 如果元组具有相同的 URL,则它们将具有相同的 ID。使用调试级别的日志,您应该会看到映射 => 'Sent to ES buffer {} with ID {}'

    1. 因为状态是 FETCHED,元组被多次发送到 ES(不像 DISCOVERED),然后在伪 ack 方法中,我们将两个元组作为 ID 存储在缓存中。在处理来自 ES 的返回时,我们得到 2 个不同的结果,第一个对两个元组进行确认,第二个什么都不做,只是触发您看到的消息。

问题是,如果您所做的只是获取,为什么您会多次获得相同的 URL。这可能值得研究。

谢谢!

于 2017-12-06T13:25:19.877 回答