kafka是如何保障消息的可靠性的(一)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka是如何保障消息的可靠性的(一)相关的知识,希望对你有一定的参考价值。

参考技术A

我在rabbitMQ系列分别从生产者,队列和消费者三方面,讨论了消息可靠性保证。而本系列要讨论的kafka和rabbit系列有诸多相似之处。
RabbitMQ传送门
本系列主要从以下几个方面来讨论下kafka的消息可靠性保证:

使用过kafka的小伙伴很清楚,kafka一大功能就是存储数据。既然是存储数据,就会有存储失败的可能性。大家使用kafka都希望我的数据能够不多不少存储到kafka中,加入一次不成功,那多试几次就好了。
问题就出现在这多试几次,和rabbitMQ一样,kafka也有消息落盘confirm机制。假如我的消息已经成功写入磁盘,但在返回confirm时由于网络中断等原因,返回响应失败了,producer就会认为没有写入成功,浴室就会触发retry机制。
一般我们为了保证消息正确写入磁盘会配置重试如下:
spring.kafka.producer.retries=3
触发重试机制后,producer会重新发送发送上次的消息,于是就有了生产端重复消息,这是我们不愿看到的。

设置幂等性
大家都听说过这一名词,即f(x)=f(f(x)).
// 启用幂等性 configs.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true);

Kafka为了实现幂等性,它在底层设计架构中引入了 ProducerID SequenceNumber

以上是关于kafka是如何保障消息的可靠性的(一)的主要内容,如果未能解决你的问题,请参考以下文章

幂等性与事务性Producer区别(Kafka)

kafka消息的可靠性

kafka消息的可靠性

大数据之kafka生产者数据可靠性保障

大数据之kafka生产者数据可靠性保障

大数据之kafka生产者数据可靠性保障