zoukankan      html  css  js  c++  java
  • kafka学习总结006 --- 生产者事务

    前面提到了,kafka0.11.0版本引入的幂等性只能保证分区级别的at-exactly-once语义

     如图,producer向三个分区分别生产10条数据,前两个生产成功,写第三个分区时,producer挂掉;producer重启后,重新向三个分区写入数据;

    此时producer的PID变化,导致消息重复,因此引入了事务,解决该问题

    生产者事务

    生产者创建时,设置全局唯一的事务ID --- TransactionID;事务ID与PID绑定,当producer重启后,会根据事务ID查找PID,因此能够保证全局at-exactly-once语义

    配置方法:transactional.id(注:使用事务的前提是必须开启幂等性

    解决全局精确唯一语义是kafka事务引入的初衷,但是后期又引入的新的功能:producer生产消息的batch在一个原子单元内完成;

    也就是说:当前batch的消息要么全部生产成功,要么全部失败,并且故障恢复后,能够保证事务ID不变;

    这里需要提一下:事务ID是由用户指定的,而PID是生产者创建成功后,producer向kafka申请的;并且两者为1:1关系

  • 相关阅读:
    CrawlSpiders
    从抓取Tencent中学习Scrapy
    对象返回规范的url的两种方式的两种方式
    多对多关系的额外字段
    Django定时任务
    Scripy学习(一)
    Django开发博客一(搭建模型和准备数据)
    求并集
    求子集、交集
    java数学函数Math类中常用的方法
  • 原文地址:https://www.cnblogs.com/sniffs/p/13148690.html
Copyright © 2011-2022 走看看