【问题标题】:Storm KafkaSpout fails when bolt is slow当 Bolt 很慢时,Storm KafkaSpout 失败
【发布时间】:2015-07-25 21:48:49
【问题描述】:

我正在使用 Kafka-Storm 集成。 Kafka 会将数据加载到队列中,Kafka Spout 将拉取数据和进程。我有以下设计。

Kafka -> Queue -> KafkaSpout -> Process1 Bolt -> Process2 Bolt

问题是,如果 Process2 Bolt 需要更长的时间来处理数据,KafkaSpout 就会失败,并且它再次尝试从队列中读取数据,这会导致重复记录。

如果 Bolt 处理缓慢,为什么 KafkaSpout 将其视为失败?解决办法是什么?我必须在storm中设置任何超时或任何类似属性吗?

【问题讨论】:

    标签: java apache-kafka apache-storm


    【解决方案1】:

    如果处理时间过长,Storm 将使元组失败,默认为 30 秒。由于 Storm guarantees processing,一旦失败,Kafka spout 将重播相同的消息,直到成功处理元组。


    From doc

    当一个元组的消息树在指定的超时时间内没有被完全处理时,它被认为是失败的。可以使用 Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS 配置在特定于拓扑的基础上配置此超时,默认为 30 秒

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 2015-10-25
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 2016-06-29
      相关资源
      最近更新 更多