作者:禅与计算机程序设计艺术
1.简介
Kafka 是一种高吞吐量、分布式、可分区、多副本的消息系统。它在使用上非常灵活,可以作为 Pulsar、RabbitMQ 的替代品。但同时也带来了一些复杂性和问题,比如Exactly Once 语义。从本质上说,Exactly Once 就是对消费者读取的数据只要不丢失,就一定能得到一次完整的处理,而且不会被重复处理。确保 Exactly Once 语义一直是企业级应用中必须考虑的问题。本文通过具体分析Kafka 提供的 Exactly Once 消息传递保证机制,阐述其中的机制原理及其相关的算法和实现方法。此外,我们还会结合实际案例,对比 Kafka 和其他消息系统提供的 Exactly Once 支持情况,分析其区别与局限。
2.基本概念及术语
2.1 Exactly Once
在业务系统中,数据经常需要处理多个事务,而事务又有可能产生错误,尤其是在出现网络或者服务器故障时。比如用户下单后,订单服务收到订单请求,并发送商品库存消息给物流服务;而物流服务可能因为网络故障导致部分商品没有正确送达;当用户查询订单状态时,查询服务可能由于缓存失效或其他原因无法及时同步到最新订单信息。这类问题在传统的关系型数据库中很难处理,因为事务的隔离性和原子性难以满足。因此,为了解决这个问题,很多基于消息队列的分布式系统提出了 Exactly-Once(或 At Least-Once) 语义。
Exactly Once,即“精准一次”或“至少一次”,意味着每个消息都被精确地消费一次且仅一次,也就是说,对于每条消息,消费者都只能接
版权归原作者 禅与计算机程序设计艺术 所有, 如有侵权,请联系我们删除。