当前位置: 首页 > 知识库问答 >
问题:

当一个bolt无法确认它从一个spout的特定流中消耗的元组时,会发生什么?

鲜于允晨
2023-03-14

假设我有一个喷口,它将一个主题中的消息发送到两个流(stream1和stream2),两个bolt消耗来自这些流的消息(Bolt1->stream1,bolt2->stream2)。现在,如果bolt 2没有对元组进行确认,那么消息会只被重放到bolt 2吗?根据storm中新的消费者API(apache-storm-1.0.2)实现了一个重试机制,在这个机制中,如果numfail>maxRetry,那么元组将被storm加密。我的疑问是,消息被这样加密后会发生什么?它本身会被从Kafka队列中移除吗?如果是这样的话,我们就会释放一些失败的消息。谁能告诉我一个元组的生命周期,以及一个从kafka到storm的消息在失败时会发生什么。

共有1个答案

步弘和
2023-03-14

如果只有一个bolt对元组进行ack,而第二个bolt没有对元组进行ack,则该元组将被重播给两个bolt。

此外,如果达到最大重试,Storm将不会尝试再次发送此消息并丢弃。但它不会被删除的原始来源(在您的情况下,它似乎是Kafka,因为删除消息是不可能的首先)。

 类似资料:
  • > 每x秒发出一批元组(或单个元组中的字符串列表)。我如何实现这一点?我读了一些关于Storm Trident的文章,但它的似乎不允许我以特定的时间间隔批量发出元组。 如果没有新的数据进来,喷口应该怎么做?它不能阻挡线程,因为它是Storm的主线程,对吧?

  • 我是阿帕奇Storm的新手。 请救命!! 我的拓扑: TopologyBuilder builder=new TopologyBuilder(); 这里,我试图从事件流中获取长度为3的窗口中的第一个和最后一个事件。但是我得到的第一个和最后一个事件是一样的,因为KafkaSpout一次只发送一个元组。

  • 如果在ActiveMQ中创建了一个队列,该队列具有一个生产者(即客户端确认模式)和一个侦听器,在成功处理消息后,其onMessage方法中仅对其进行确认。假设存在异常,并且消息未被确认,因此仍在队列中。是否会再次发送给消费者?或者这些信息会发生什么?

  • 问题内容: 我有两个卡夫卡喷口,我要将其值发送到同一螺栓。 可能吗 ? 问题答案: 是的,有可能: 您也可以使用任何其他分组。 更新: 为了区分使用者螺栓中的元组(即topic_1或topic_2),有两种可能性: 1)您可以使用操作员ID(如@ user-4870385所建议): 2)您可以使用流名称(@zenbeni建议)。对于这种情况,两个喷口都需要声明命名流,而螺栓需要通过流名称连接到喷口

  • 我刚从Storm开始。我有一个简单的一个喷口(1个执行器)和一个螺栓(4个执行器)的拓扑结构。喷口与螺栓通过“混排”连接。 从我所看到的情况来看,spout只将元组发送到bolt执行器的子集--这些执行器与spout运行在同一主机上。 这是意料之中的吗?有没有一种方法可以将负载分散到所有的bolt执行器上,无论它们运行在哪里?

  • 这三个方法包含相同的参数,所以不应该重载。它们都有执行不同功能的代码。这怎么可能?java如何知道调用哪个方法?在命令行中通过java jar命令执行此代码时,我没有得到任何错误。