Kafka怎样保证消息不丢失?不重复?怎样保证消息顺序?

KLQ 2020-06-28 16:18:29 java常见问答 8363

你知道Kafka要如何才能够保证消息不丢失不重复,怎样保证消息顺序吗?在java面试当中这是比较常见的java面试题了,下面一起来看看答案吧。

对于这个问题,最首先要考虑的就是以下的几个问题,第一个就是消息丢失是因为什么?具体可以从生产端和消费端这两个角度来进行考虑,第二个就是消息重复是因为什么?具体从生产端和消费端这两个角度来进行考虑。

除此之外,怎样才可以保证消息有序?怎样保证消息不重不漏,损失的是什么?这些都是要考虑进去的。

先给大家来一个比较简单的总结。

1、消费端重复消费-建立去重表

2、消费端丢失数据-关闭自动提交offset,处理完之后受到移位

3、生产端重复发送-消费端消费之前从去重表中判重

4、生产端丢失数据

这个就比较麻烦了,解决方法:

(1)异步方式缓冲区满了,就阻塞在那,等着缓冲区可用,不能清空缓冲区

(2)发送消息之后,回调函数,发送成功则发送下一条;发送失败,记在日志当中,等着定时脚本来扫描,当然,这里也要注意一下,发送失败很有可能并不是真正的失败,只是因为没有收到反馈,定时脚本很有可能会重发

怎样保证有序呢?

假如,有一个发送失败了话,那么就免就不能够继续再发了,这样的,肯定就会乱序。

生产者在收到发送成功的反馈之前,不可以发下一条数据,但生产者是一个流,阻塞生产者感觉业务上不可行,那么又怎么会因为一条消息发出去没收到反馈,就阻塞生产者呢?

同步发送模式-发出消息之后,必须阻塞等待收到通知之后,才发送下一条消息;步发送模式-一直往缓冲区写,之后一把写到队列中去。

这两种都是各有利弊的,同步发送模式,虽然说,吞吐量小,可是,发一条收到确认之后,再发下一条,既可以保证不丢失消息,又可以保证顺序。

以上文章转载自网络,仅供参考。

好啦,那么关于Kafka保证消息不丢失不重复保证消息顺序的内容就给你介绍到这里了,更多关于Kafka的常见问题请继续来奇Q工具网进行了解吧。

推荐阅读:

rocketmq和kadka区别是什么?区别详细介绍

Kafka是什么?特性有哪些?

Kafka和mq的区别是什么?和rabbitmq有什么区别?