kafka事务流程
流程
kafka事务使用的5个API
// 1. 初始化事务 void initTransactions(); // 2. 开启事务 void beginTransaction() throws ProducerFencedException; // 3. 在事务内提交已经消费的偏移量(主要用于消费者) void sendOffsetsToTransaction(Map<TopicPartition,OffsetAndMetadata> offsets, String consumerGroupId) throws ProducerFencedException; // 4. 提交事务 void commitTransaction() throws ProducerFencedException; // 5. 放弃事务(类似回滚事务的操作) void abortTransaction() throws ProducerFencedException;
(1)初始化事务 生产者带着自定义的transactional.id发起initTransactions(),事务协调器会分配一个Pid给生产者,同幂等性一样; (2)开启事务 生产者调用beginTransaction()开启事务,事务协调器会记录事务状态并保存在事务日志中,事务日志是存储与内部topic __transaction_state里的,对消费者不可见; (3)提交位移Offset 生产者发送OffsetCommitRequest 请求到消费组协调者,消费组协调者会把 offset 存储到 Kafka 内部主题 __consumer_offsets 中。 (4)提交事务or回滚事务 生产者在完成消息发送后,决定提交事务 调用commitTransaction()或者abortTransaction() 事务协调器会向每个分区Leader写入一个控制消息(abort或者commit),会先发送EndTransaction请求给事务协调器 TC会向内部主题写入prepare_commit或者prepare_abort消息,后会发送给主题分区Leader一个控制消息commit或者abort,告知消息是接受还是丢弃; 如果事务成功提交,事务的消息将对消费者可见,而中止的消息会不可见,消费者在read_committed隔离级别下对于中止消息是不可见的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库