当前位置: 首页 > 工具软件 > ack > 使用案例 >

Kafka的ack机制

越雨泽
2023-12-01


前言

Kafka的ACK机制,指的是producer的消息发送确认机制,这直接影响到Kafka集群的吞吐量和消息可靠性。而吞吐量和可靠性就像硬币的两面,两者不可兼得,只能平衡。

Kafka的ACK机制是针对producer的。

保证消息的吞吐量就是producer只负责发数据,不需要得知消息是否被集群接收,这样就会有大量的数据发送到Kafka的集群中,保证了Kafka集群的吞吐量。

保证消息的可靠性就是发送消息必须保证消息存储到了集群中,producer才能发送下一个消息。


一、ACK的三个可选值

ACK有3个可选值,分别是1,0,-1 。

1、ACK = 1 (默认)

等待leader接收成功即可。

只要收到一个分区副本成功写入的通知,就认为推送消息成功了。当然,这个副本必须是leader副本,只有leader成功写入后,producer才会认为消息发送成功。

ACK = 1 的情况,producer只要收到leader写入成功的通知,就会认为消息发送成功了,但是如果leader写入成功了,没来得及将数据同步到follower节点,原本的leader就死亡了,此时消息就会丢失。

ACK的默认值就说1 。这个默认值就说吞吐量与持久性的这种方案。

2、ACK = 0

发送一次,不论leader是否接收。

producer 不管发送成不成功,只发送一次就不再发送了。

提供了最低的延迟,保证了最大的吞吐量,但持久性最弱,无法保证broker是否接收到消息,无法确定leader是否死亡,也无法保证leader接收到消息后是否发送给follower。

3、ACK = -1

需要等待leader将消息同步给follower。

producer只有收到分区所有副本的成功写入的通知才认为推送消息成功了。

 类似资料: