Kafka的acks简述
Kafka的acks简述
[TOC]
Kafka的ack机制,指的是producer的消息发送确认机制,这直接影响到Kafka集群的吞吐量和消息可靠性。而吞吐量和可靠性就像硬币的两面,两者不可兼得,只能平衡。
ack有3个可选值,分别是 0,1,-1/all。默认是1。
ack=0
ack=0,简单来说就是,生产者能够通过网络把数据发送出去,那么就认为消息已经成功的希望如Kafka了。意味着producer不等待broker同步完成的确认,继续发送下一条(批)信息提供了最低的延迟。但是最弱的持久性,当服务器发生故障时,就很可能发生数据丢失。例如leader已经死亡,producer不知情,还会继续发送消息broker接收不到数据就会数据丢失
ack=1
ack=1,简单来说就是,producer只要收到一个分区副本成功写入的通知就认为推送消息成功了。这里有一个地方需要注意,这个副本必须是leader副本。只有leader副本成功写入了,producer才会认为消息发送成功。
注意:ack的默认值就是1。这个默认值其实就是吞吐量与可靠性的一个折中方案。生产上我们可以根据实际情况进行调整,比如如果你要追求高吞吐量,那么就要放弃可靠性。
ack=-1/all
producer只有收到分区内所有副本的成功写入的通知才认为推送消息成功了。如果和min.insync.replicas
参数结合起来,就阔以决定在返回确认前至少有多少个副本能够收到消息。但是效率低。阔以通过一部模式和更大的批次来就加快速度,但是这样做会降低吞吐量。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!