代码之家  ›  专栏  ›  技术社区  ›  sinedsem

Hazelcast喷气式飞机一次保证定制水槽

  •  1
  • sinedsem  · 技术社区  · 8 年前

    我需要处理一些不定式传入流并将结果发送到一些外部服务器,例如通过REST。我需要一个“一次到位”的保证。我能用hazelcast jet来实现这个目标吗?

    医生说

    我可以使用IMap作为接收器,但我不知道如何从中“提取”新数据。有“一次”IMap事件监听器吗?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Oliv    8 年前

    容错从不提供“精确执行一次”的保证,这是不可能的。如果一个集群成员崩溃,您不知道它是否执行了REST操作。即使REST操作本身失败了,它也可能是远程执行的,但是响应传递失败了——你不知道。

    相反,如果操作失败,则会重试。内部Jet顶点(如窗口累加器)将所有状态保存为快照。换句话说,不存在未保存到快照中的顶点的状态。因此,如果重新启动作业,则丢弃上次快照之后执行的操作,并还原状态,就像从未执行过该操作一样。这就是为什么我们可以称之为“一次”。

    我们称之为 IMap 只下沉一次,因为如果你执行 map.put("key", "value") 多次,key的值 "key" 仍然是 "value" . 这叫做等幂。即使 put 操作可能会执行多次,其效果就好像执行了一次一样。

    等幂可能是您的休息服务的方式。例如,可以通过忽略重复项来实现。使用IMap无法解决这个问题:即使您能够“只听一次”,REST操作可能会失败,您也不知道它是否在远程执行。

    推荐文章