2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

【干货】Kafka 事务特性分析(上)

  • 2019-10-21
  • 本文字数:1888 字

    阅读完需:约 6 分钟

【干货】Kafka 事务特性分析(上)

特性背景

消息事务是指一系列的生产、消费操作可以要么都完成,要么都失败,类似数据库的事务。这个特性在 0.10.2 的版本是不支持的,从 0.11 版本开始才支持。华为云 DMS 率先提供 Kafka 1.1.0 的专享版服务,支持消息事务特性。


支持事务消息有什么作用?消息事务是实现分布式事务的一种方案,可以确保分布式场景下的数据最终一致性。例如最常用的转账场景,小王 转账到小明,实际操作是小王账户减去相应金额,小明的账户增加相应金额,在分库分表的前提下,2 个账户存储在不同的数据库中,这时需要分布式事务才能保证数据库一致性,单个数据库的事务无法保证跨库之间的原子性。如果小王账户先扣钱,再去发送消息到小明所在的数据库去通知增加钱,在没有事务消息的情况下,无论是先扣钱或者先发送通知增加钱,都会有数据不一致的问题,因为无法保证两者的原子性。而有了事务消息,可以保证发送通知与本地事务(扣钱)是一个原子操作,本地事务与发送通知可以同时成功或者同时失败,确保数据一致。


除了数据最终一致性外,还实现了消息 Exactly once 语义。所谓 Exactly once 语义是消息传递语义中最难实现的一种,包括 At most once:最多一次(不会重复,但是可能丢失数据); At least once:至少投递一次(不会丢失,但是会导致重复)和 Exactly once: 刚好一次(不丢不重),也即幂等性。Kafka 的幂等性可以保证生产只对一个分区实现 Exactl once 语义,需要多个分区也实现这个语义,还需要引入消息事务确保原子性。

分布式事务介绍

当前系统架构主流是分布式架构与微服务架构,在这种架构下数据源不是单一的数据库,业务逻辑往往需要在多个数据库中实现原子操作,单个数据库中的强大的本地事务无法保证多节点原子操作。 此时需要分布式事务来确保数据的一致性。目前使用较多的分布式事务解决方案有几种:

01 XA 事务:两阶段/三阶段提交

XA 是由 X/Open 组织提出的分布式事务的规范。XA 规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接口。XA 接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信桥梁。实现 XA 事务的关键是两阶段和三阶段提交协议。


两阶段提交协议(Two-phase Commit,2PC)经常被用来实现分布式事务。一般分为协调器 C 和若干事务参与者 Si 两种角色,这里的事务参与者就是具体的数据库,协调器可以和事务参与者在一台机器上,如下图



二阶段提交协议主要包括由 2 个阶段:第一个阶段为准备阶段(prepare),第二阶段为提交阶段。准备阶段由事务协调者向事务参与者发送 prepare 消息,各个参与者处理本地事务但不提交,然后向事务协调者返回事务状态。 提交阶段根据准备阶段各参与者的执行请求,协调者确定事务是提交或者回滚,向各个参与者发送命令。


二阶段提交协议主要的问题是在提交执行过程中,所有的参与者都需要听从协调者的统一调度,期间处于阻塞状态而不能从事其他操作,这样效率及其低下。特别是当协调者发出提交通知到部分参与者后宕机,其他参与者就会阻塞。


针对二阶段提交存在的问题,三阶段提交协议在 prepare 与 commit 阶段之间增加一个 pre-commit 阶段。Prepare 阶段只询问参与者而不做事务,而在 pre-commit 阶段各个参与者才会执行本地事务但不提交。Commit 阶段就是直接提交。这样做可以避免二阶段当协调者迟迟没有发出 commit 或者 rollback 通知,参与者在超时后可以自行提交或者回滚,避免阻塞事务(这是因为经过了 prepare 阶段已经确认了各个参与者是可以执行的,最后第三阶段直接执行即可)。 三阶段提交也存在很多问题,也不能完全保证数据一致,完全一致需要用到 Paxos 算法。

02 TCC 补偿性事务解决方案

TCC 分别对应 Try、Confirm 和 Cancel 三种操作,含义如下:


  • Try:预留业务资源

  • Confirm:确认执行业务操作,执行事务

  • Cancel:取消执行业务操作


TCC 解决了跨应用业务操作的原子性问题,在诸如组合支付、账务拆分场景非常实用。TCC 实际上把数据库层的二阶段提交上提到了应用层来实现,对于数据库来说是一阶段提交,规避了数据库层的 2PC 性能低下问题。TCC 需要业务提供使用,开发复杂和成本高。

03 事务消息

基于消息中间件的事务消息来完成分布式事务。事务消息可以确保本地执行事务与消息发送是原子的:先发送一条消息到消息中间件,然后执行本地事务,当本地事务成功后再发送提交确认到消息中间件,然后这条消息才能被其他业务消费者所能感知,从而确保原子性。


本文转载自公众号中间件小哥(ID:huawei_kevin)。


原文链接:


https://mp.weixin.qq.com/s/wbEr6IWuSwbEg3Ut3ahVjw


2019-10-21 14:511377

评论

发布
暂无评论
发现更多内容

用Dify搭建自动化工作流,每天节省3小时

测试人

软件测试

电子签唯一入选企业!e签宝上线浙江省海外综合服务平台,助力浙江建设高能级开放强省

科技汇

新晋社区之星何晨阳:从使用者到贡献者,我是如何理解并反哺开源?

隐语SecretFlow

开源 程序人生 采访 人生故事 贡献者

评估工程正成为下一轮 Agent 演进的重点

阿里巴巴云原生

阿里云 云原生 agent

静默复制淘口令小程序系统:淘客高效推广的全新解决方案

微擎应用市场

火山引擎发布Data Agent新能力,推动用户洞察进入“智能3.0时代”

极客天地

从流媒体机制看:如何高效、安全地保存推特/X视频

So...

推特视频下载 推特 x

使用gdb调试core文件

天翼云开发者社区

CDN

网络安全防护措施之等保测评是什么?

等保测评

信息安全 数据安全 网络安全」 黑龙江等保测评 哈尔滨等保测评

季度报告:海外网红营销服务公司最新趋势与平台政策解读

Wolink

跨境电商 海外社媒营销 海外营销推广 海外红人营销 品牌推广

护航“苏超”票务稳健运行!这朵云,靠谱!

天翼云开发者社区

公有云

政府机关如何选购RFID智能钥匙柜保障使用留痕?

斯科信息

RFID智能钥匙柜

快递鸟打印电子面单 API 深度解析:技术文档对接指南

快递鸟

阿里面试题思路解析-高并发场景下的JVM调优实战

测试人

软件测试

专家管理系统

深圳亥时科技

中小企业 RPA 选型的 3个真相和 7个落地步骤

Techinsight

ngx.location.capture()变量继承

天翼云开发者社区

CDN 网络

从工具逻辑到架构思维:企业级低代码的演进与重塑

JeeLowCode低代码平台

低代码 低代码报告 低代码选择

Ovi:双骨干跨模态融合的音频-视频生成技术详解

qife122

视频生成 多模态AI

TOP 5海外网红推广营销平台深度评测:功能、价格与适用场景全解析

Wolink

跨境电商 海外社媒营销 海外营销推广 品牌出海 海外红人营销

多云架构时代:解码企业网络安全的全新基因

光联世纪

信息安全 SD-WAN

Coze的“插件宇宙”有多强?一个工作流,打通我的全部办公软件

测吧(北京)科技有限公司

黑龙江企业必看!哪些信息系统需要做等保测评?

等保测评

网络安全 信息安全 数据安全 黑龙江等保测评 哈尔滨等保测评

预算有限?这几个海外平台的免费推广方法也能带来精准流量

Wolink

跨境电商 海外营销推广 海外推广 海外社媒推广 达人营销

聚势AI,赋能企业穿越周期稳增长:「AI 共创 三生万物」司马阅2025企业AI落地应用峰会北京站圆满收官

司马阅

跨境出海战略全景图:2025从0到1的完整路径与核心决策点

Wolink

跨境电商 海外社媒营销 海外营销推广 品牌出海

火山引擎多模态数据湖解决方案,以新一代数据基座迎接AI Agent时代

极客天地

手机背面敲两下,直接召唤豆包截屏答疑!deepseek也适用!

阿星AI工作室

学习 AI 工具 快捷指令

技术驱动:海外网红营销服务公司如何用AI工具筛选网红与优化广告投放

Wolink

海外营销推广 跨境电商运营 品牌出海 海外红人营销

数字先锋 | 职业教育大有可为!

天翼云开发者社区

云计算 教育IT基础设施

为什么要做等保?黑龙江等保测评服务的核心目标

等保测评

网络安全 信息安全 数据安全 黑龙江等保测评 哈尔滨等保测评

【干货】Kafka 事务特性分析(上)_文化 & 方法_李浩_InfoQ精选文章