kafka是通过ack应答机制来确保可靠性的,以下是三种确认应答机制:
1.ack=0
这种方式有点类似于UDP,就是发送数据完成后,就立马回送ack,不管消息是否成功,消息是否在broker处落盘成功。
2.ack=1
这种方式就是确保leader将消息落盘后就回送ack,但是这种方式会出现消息丢失的情况,如果leader刚回送ack,但是leader挂了,follow没办法进行同步。这种情况下会丢失数据。
3.ack=all
这种方式是所有的leader+follower都落盘之后才会回送ack确认机制,但是这种情况下仍然会丢数,因为如果isr只有leader的时候,这个时候就和ack=1一样。要确保数据完全可靠是ack=-1+分区副本大于等于2+isr里应答的最小副本数量大于等于2.