1

我想知道三叉戟批次是否并行执行,即多个批次可以一次运行?

除此之外,我有几个问题太小而无法单独发布。如果它们足够大,请随时发表评论以单独发布它们。

  1. 如果只处理批处理中的特定元组失败怎么办?

    那么batch会被replay,导致之前处理成功的tuples被重新处理?例如,字数统计,其中每个元组都包含一个单词,但只有几个元组被成功计数?例如,如果有三个单词叫man并且计数只显示 2 表示一个元组处理失败?

  2. 仅在本教程中,之前的txid被存储。之前的交易ID呢?

    例如,有 1、2、3、4 三个批次。现在,在第 1 批之后,第 2 批被执行,第 1 批被重播。那么 txid 将为 2,因为最近处理的批次是批次 #2,并且无法识别批次 #1 是否先前已处理。如果是这样,那么批次必须按顺序执行。这意味着在第 1 批成功完成之前,第 2 批无法执行。如果是这样,那么执行批处理的并行性在哪里?

  3. 如果拓扑中的批处理没有正确执行特定功能怎么办?

    例如,我有两个功能,一个是将消息持久化到数据库中,另一个是生成到 kafka 队列。在这里,在数据库中持久化是成功的,但是由于某些节点故障(例如),推送到 kafka 队列失败。然后,我只希望为该特定批次执行推送到 kafka 队列的函数。有没有办法在三叉戟中做?为此,我不仅需要存储 txid,还需要存储要为该 txid 处理的函数列表。怎么可能做到?

4

1 回答 1

0

据我所知:

  1. 任何失败都被认为是批处理失败,并将由 spout 重播。事务状态存储上次操作的值和事务 id。如果计数“man”失败,它的 txid 将小于当前 txid,它应该将此批次数据添加到存储的值中。否则,它可以忽略重播,因为它知道该批次中的数据已经为此键计数。

  2. 状态事务以严格的 txid 顺序处理,但仅由有状态组件处理。函数可以在即将到来的事务元组上执行。

  3. 听起来你想要状态而不是函数。状态会记住它已经完成了批处理,并在重播时忽略它。

于 2015-02-12T01:25:58.957 回答