今天和大家聊一下,kafka
对于消息的可靠性保证。作为消息引擎组件,保证消息不丢失,是非常重要的。
那么kafka
是如何保证消息不丢失的呢?
前提条件
任何消息组件不丢数据都是在特定场景下一定条件的,kafka
要保证消息不丢,有两个核心条件。
第一,必须是已提交的消息
,即committed message
。kafka
对于committed message
的定义是,生产者提交消息到broker
,并等到多个broker
确认并返回给生产者已提交的确认信息。而这多个broker
是由我们自己来定义的,可以选择只要有一个broker
成功保存该消息就算是已提交,也可以是令所有broker
都成功保存该消息才算是已提交。不论哪种情况,kafka
只对已提交的消息做持久化保证。
第二,也就是最基本的条件,虽然kafka
集群是分布式的,但也必须保证有足够broker
正常工作,才能对消息做持久化做保证。也就是说 kafka
不丢消息是有前提条件的,假如你的消息保存在 N 个kafka broker
上,那么这个前提条件就是这 N 个broker
中至少有 1 个存活。只要这个条件成立,kafka
就能保证你的这条消息永远不会丢失。