kafka怎么避免重复消费 JAVA面试如何保证消息不被重复消费?如何保证消息消费的幂等性?
JAVA面试如何保证消息不被重复消费?如何保证消息消费的幂等性?
我是闲着没事干,来这里玩的,开始在各个网络找技术资料,后就以《头条》为主了。由找资料转向了交朋友了。因为我想的东西落后了时代,有些的想的,由于自己程度不高。在脑子里只是勾思,达不到实际!!!
消息队列,如何保证消息不被重复消费?
现在消息机制一般都是靠中间件实现的,比如kafka、activemq等等。消息的消费策略一般有至少一次和至多一次两种。
第一、至少一次。这种情况用于消息比较重要,不能容忍丢失。消费方从中间件集群拉取消息,内部消费,消费结果需要知会到集群。如果此时消费方机器重启或者网络丢包,此时就会拉取重复消息。一般的解决方案为消费方业务逻辑保证幂等处理。
第二、至多一次。此时可能会丢失消息,不会出现重复消费情况。
作为接收方来讲,保持接口幂等是比较基础的功能。可以应对一些突发情况,比如说集群故障,或者需要追溯历史消息数据重新处理等等。
kafka的一致性为什么不替换成raft?
一:更早的起源时间
kafka是2011 年被捐献给 Apache 基金会,而raft论文是2013年由斯坦福大学发表的《In Search of an Understandable Consensus Algorithm》,kafka在raft之前诞生
二:更少的可容错副本数量。raft当有1/3个节点数目不可用时,服务不可用,kafka中维护的ISR(in-sync-replica),即便副本均不可用,只剩下Leader,也可以对外提供服务
三:更大的数据吞吐量。raft适合强一致性
kafka分布式的情况下,如何保证消息的顺序?
Kafka分布式的单位是partition,Kafka保证一个partition内的数据是有序的,而partition间的数据不能保证有序性,而多partition的特点使得Kafka可以一定程度上拥有分布式消息传递能力。
在业务上我们需要将需要严格顺序排列的数据放置在一个partition上,同时将可以分布式处理的消息放置到其他partition上以保证高性能。
kafka怎么避免重复消费 kafka重复消费解决方案 kafka重复消费原因
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。