Kafka是大型架构核心,下面我详解Kafka最终一致性@mikechen
最终一致性
最终一致性(Eventual Consistency),是分布式系统中一种弱一致性模型。

它保证:如果对某个数据项没有新的更新操作,那么最终所有对该数据的访问都会返回最后一次更新的值。
简单来说,系统允许短暂的不一致(例如不同节点暂时看到不同数据)。
但经过一段时间的传播和同步后,所有节点会收敛到相同状态。
Kafka实现最终一致性
利用 Kafka 的“可靠事件流”,把一个跨服务的大事务拆成多个服务自己的本地事务。
通过异步消息把这些本地事务串起来,只要求整个链路最终完成,而不是一步到位强一致。

比如:
生产端(业务服务)
在同一个数据库事务中,同时写业务表和一张本地消息表(outbox)。
例如:写入订单记录的同时,插入一条“订单已创建”的待发送消息。
事务提交成功后,可以确定:要么两个都成功,要么两个都失败,避免“订单写成了但消息没发出去”。
发送端

一个后台任务或独立服务轮询 outbox 表,读取“未发送”的记录。
发送到 Kafka 对应的 topic,成功后把这条记录标为“已发送”或删除。
如果发送失败就重试,即使机器宕机,重启后依旧能扫描到没发出去的记录。
保证消息最终进入 Kafka,从而实现“只要本地事务成功,消息迟早会发出”。
消费端
下游服务订阅这个 topic,收到消息后执行自己的本地事务更新自己的数据(例如扣库存、加积分等)。

为了应对至少一次投递和重复消费,下游要基于业务主键或事件 ID 做幂等。
例如在本地维护一张“已处理事件表”或通过版本号控制,做到“多次处理效果等同一次”。
mikechen睿哥
10年+一线大厂架构实战经验,就职于阿里、淘宝等一线大厂,操盘多个亿级大厂核心项目。