kafka--基础知识点--6.1--幂等性producer、 事务producer

1 Exactly Once

在这里插入图片描述
幂等性producer & 事务producer是保证Exactly Once的两种机制。

2 幂等性producer

2.1 什么是幂等性

在这里插入图片描述
幂等性producer 可以保证同一次会话同一分区的精确一次性。

2.2 如何启用

要启用幂等性,只需要对Producer的参数进行设置即可。

props.put("enable.idempotence", true)或
props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true)

2.3 原理

  • 空间换时间,在Broker端多保存一些字段
  • 当Producer发送了具有相同字段值的消息后,Broker能够自动发现这些重复消息,然后默默丢弃

在这里插入图片描述

2.4 作用范围

  • 幂等性Producer只能保证单分区上的幂等性
    • 即只能保证某个主题上的一个分区上不出现重复消息,无法实现多个分区的幂等性
  • 幂等性Producer只能实现单会话上的幂等性,不能实现跨会话的幂等性
    • 会话:Producer进程的一次运行,如果重启Producer进程,将丢失幂等性保证

3 事务producer

3.1

事务
  • 数据库事务提供了ACID的安全性保障:Atomicity、Consistency、Isolation、Durability
  • Kafka在0.11版本开始提供了对事务的支持,目前主要在Read Committed的隔离级别上做事情
    • 保证多条消息原子性地写入目标分区,同时也保证Consumer只能看到事务成功提交的消息
事务producer
  • 事务Producer能够保证一批消息原子性地写入多个分区,这批消息要么全部写入成功,要么全部写入失败
  • 事务Producer允许进程重启,Producer重启后,Kafka依然保证它们发送的消息的精确一次性

3.2 如何启用

props.put("enable.idempotence", true)或
props.put("transactional.id", "my-transactional-id")

3.3 原理

在这里插入图片描述
为了实现这种效果,应用程序必须提供一个稳定的(重启后不变)唯一的ID,也即Transaction ID。Transactin ID与PID可能一一对应。区别在于Transaction ID由用户提供,而PID是内部的实现对用户透明。

3.4 作用范围

  • 事务Producer能保证跨分区上的幂等性
    • 即能保证某个主题上的不同分区上不出现重复消息,实现多个分区的幂等性。
  • 事务Producer能实现跨会话的幂等性
    • 会话:Producer进程的一次运行,如果重启Producer进程,不会丢失幂等性保证。

3.5 consumer的读取

record1和record2会被当作一个事务统一提交到Kafka,要么全部提交成功,要么全部写入失败

即使写入失败,Kafka也会把它们写入到底层日志中,即Consumer还是会看到这些消息。

因此在Consumer端,读取事务Producer发送的消息,需要设置isolation.level参数

  • read_uncommitted
    • 默认值,Consumer能够读取到Kafka写入的任何消息,不论事务Producer提交事务还是终止事务。
  • read_committed
    • Consumer只会读取到事务Producer成功提交事务写入的消息,也能读取到非事务Producer写入的所有消息

4 总结

  • 幂等性Producer和事务Producer都是Kafka社区为了实现精确一次处理语义所提供的工具,只是作用范围不同而已。
  • 幂等性Producer只能保证单分区、单会话上的消息幂等性;而事务Producer能够保证跨分区、跨会话的幂等性。
  • 事务Producer与幂等性Producer相比,性能更差

P17 17_尚硅谷_Kafka高级_ExactlyOnce
Kafka – 幂等性生产者 + 事务生产者

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值