Kafka学习笔记之进阶篇

Kafka 消息幂等性

enable.idempotence=true。设置了这个参数后,Producer自动升级成幂等性Producer。
两个重要机制:
1、Producer Id,幂等性的生产者每个客户端都有一个唯一编号id。
2、sequence number,幂等性的生产者发送的每条消息都会带相应的sequence number,Server端就是根据这个值来判断数据是否重复。如果发现sequence number比服务端已经记录的要小,那么说明数据已经重复了。
这个sequence number并不是全局有序的,不能保证所有时间上的幂等。它的作用范围有限。
1、 只能保证单分区上的幂等性,一个幂等性Producer能够保证某个Topic的一个分区上不出现重复。
2、 只能实现单会话上的幂等性,这里指Producer进程的一次运行,当重启了Producer进程后,幂等性不保证。

分布式事务

1、 因为生产者的消息可能跨分区,所以这里的事务是属于分布式事务。分布式事务的实现方式有很多,kafka选择了最常见的两阶段提交(2PC)。如果大家都可以commit,那就commit,否则就abort。
2、 既然是2pc,那么就一定有一个协调者的角色,叫做Transaction Coordinator。
3、 事务管理必须有事务日志,来记录事务的状态,以便Coordinator在意外挂掉之后继续处理原来的事务。跟消费者offset的存储一样,kafka使用了一个特殊的topic_transcation_state来记录事务状态。
4、 如果生产者挂了,事务要在重启后可以继续处理,接着处理之前未处理完的事务,或者在其他机器上处理,必须有一个全局的唯一ID,这个就是transaction.id。配置了transaction.id,enable.idempotence会被设置为true。事务id相同的生产者,可以接着处理原来的事务。
分布式事务流程图

步骤:
1、 生产者通过initTransactions API向Coordinator注册事务id。
2、 Coordinator记录事务日志。
3、 生产者把消息写入目标分区。
4、 分区和Coordinator交互。当事务完成后,消息的状态应该是已提交,这样消费者才可以消费到。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值