Advertisement

RabbitMQ与Kafka的消息可靠性和对比分析

阅读量:

RabbitMQ和Kafka都支持持续性的消息保障。两者均支持最少一次到最多一次的消息保证。值得注意的是,在特定限制条件下,Kafka能够实现精确的一次消息传输(exactly-once message transmission)。

让我们首先理解一下上述术语的含义:

至多一次投递 :消息绝对不会被重复投递,但是消息可能丢失

至少一次投递 :消息绝对不会被丢失,但是有可能重复被消费

精确的一次投递 :消息系统的圣杯。所有的消息精确的被投递一次。

提交似乎是更为恰当的技术术语。因此,在此过程中涉及的操作步骤较多值得注意的是,在此过程中涉及的操作步骤较多为了避免混淆建议采用更为统一的技术术语以减少歧义

其次,在采用"管理"这一表述方式下,则会令个别情况下的"部分故障(partial failure)"显得更为棘手。消息通常涉及多个阶段进行管理:从应用程序内部到外部的消息传输过程涵盖了各种操作环节。其中包含的应用层面故障,在某些情况下(如事务性操作),则由应用程序自身来解决;但若应用程序采取的是基于事务的操作模式,在所有或无的情况下出现故障,则可避免个别故障现象的发生;然而,在实际场景中由于各个环节通常依赖不同的系统组件,并且实现完全事务化并非易事;综合考虑信息流中的通信机制、应用程序行为、缓存策略以及数据库交互等要素后发现,并非能够实现精确的一次性数

全部评论 (0)

还没有任何评论哟~