使用Kafka-Storm集成。 Kafka将数据加载到队列中,Kafka Spout将提取数据和进程。我有以下设计。
Kafka -> Queue -> KafkaSpout -> Process1 Bolt -> Process2 Bolt
问题是,如果Process2 Bolt需要更长的时间来处理数据,KafkaSpout就会失败并再次尝试从队列中读取数据,这会导致重复的记录。
如果Bolt处理缓慢,为什么KafkaSpout将其视为失败?解决办法是什么?是否有任何超时或任何类似的属性我必须在风暴中设置?
答案 0 :(得分:3)
如果处理时间太长,Storm将失败一个元组,默认为30秒。自Storm guarantees processing以来,一旦失败,Kafka spout将重播相同的消息,直到成功处理元组。
如果在指定的超时内无法完全处理其消息树,则认为该元组失败。可以使用Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS配置在特定于拓扑的基础上配置此超时,默认为30秒