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是如何保障消息的可靠性的(一)的主要内容,如果未能解决你的问题,请参考以下文章