Kafka事务

本文介绍了Kafka从0.11版本开始引入的幂等和事务特性。幂等确保了单个生产者在同一分区上的多次写入只保留第一条消息,而事务则提供了跨多个分区的原子性保证。在Kafka中,通过producerid和序列号实现幂等,而事务则通过transactional.id和producerepoch确保操作一致性。设置isolation.level为read_committed可保证读取已提交的数据。
摘要由CSDN通过智能技术生成

Kafka在0.11版本开始引入幂等和事务的特性

幂等

  • 简单来说就是,无论我新增多少条数据,结果都是一条。
  • 对于Kafka来说,通过producer id(PID)和序列号sequence number来实现。每个producer都有一个pid,当他们往分区发送消息时,会携带一个sequence number,这个序列号是递增的。当一个producer多次发送一个数据时,这个数据的sequence number是一样的。此时Kafka的broker,只会接受第一次发送的数据(在broker里,会为每个producer他们所对应的分区维护一个序列号的值SN_old,当SN_new = SN_old+1时,broker才会接受此数据)。
  • Kafka的幂等只能保证单个生产者会话(session)中单分区的幂等。幂等性不能跨多个分区运作,而事务可以弥补这个缺陷。

事务

  • 事务可以保证对多个分区写入操作的原子性。操作的原子性是指多个操作要么全部成功,要么全部失败,不存在部分成功、部分失败的可能。
  • 用户在客户端为producer设置一个transactional.id,此时当往broker发送消息时就会开启事务。
  • 为了保证新的生产者启动后具有相同transactional.id的旧生产者能够立即失效,每个生产者通过transactionalId获取PID的同时,还会获取一个单调递增的producer epoch。如果使用同一个transactionalId开启两个生产者,那么前一个开启的生产者会报错。
  • 在Kafka中设置参数isolation.level为read_committed。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值