akka 流是不是提供有保证的交付

Posted

技术标签:

【中文标题】akka 流是不是提供有保证的交付【英文标题】:do akka streams provide guaranteed deliveryakka 流是否提供有保证的交付 【发布时间】:2019-12-25 01:58:11 【问题描述】:

以下内容来自文档(akka):

交货保证

Stream refs 为其 trainsport 使用正常的 actor 消息传递,因此提供相同级别的基本交付保证。通过需求重新交付和序列错误检测,流引用确实在一定程度上扩展了语义。换句话说:

messages are sent over actor remoting
    which relies on TCP (classic remoting or Artery TCP) or Aeron UDP for basic redelivery mechanisms
messages are guaranteed to to be in-order
messages can be lost, however:
    a dropped demand signal will be re-delivered automatically (similar to system messages)
    a dropped element signal will cause the stream to fail

(链接->https://doc.akka.io/docs/akka/current/stream/stream-refs.html

读完之后,我很好奇。那么 akka 流是否提供保证交付。 例如。一堆参与者将事件存储在日志中,该日志将批处理消息的流(假设最多 1000 条消息的流程为 1 秒)提供给另一个参与者。这能保证交货吗?

另外,作为一个附带问题。如果系统消息自动重新传递丢弃的消息,这是否意味着事件流可以保证传递?

【问题讨论】:

【参考方案1】:

StreamRefs 目前(Akka 2.6.1)除了元素的序列号和要求重新发送信号外,不实现任何可靠性:

如果从元素序列号中检测到间隙或无序交付,则流将失败。没有元素的重新传递。 如果来自接收方的需求请求丢失,则会在超时后重新发送。

接收端有一个缓冲区,如果流发生故障,在发送端看到来自接收端的失败信号之前,除了飞行中的任何元素外,其中的所有元素都将丢失(该信号通过网络,因此不是立即的) )。

【讨论】:

以上是关于akka 流是不是提供有保证的交付的主要内容,如果未能解决你的问题,请参考以下文章

TCP可靠传输的保证

TCP可靠传输的保证

持续交付1-持续交付

使用 rabbitmq 客户端 Java API 保证交付

Debezium 是不是提供交货和订购保证?

Apple 不保证推送的交付?