Kafka的ack机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka的ack机制相关的知识,希望对你有一定的参考价值。

参考技术A 简述kafka的ack机制

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

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

ack=1,简单来说就是,producer只要收到一个分区副本成功写入的通知就认为推送消息成功了。这里有一个地方需要注意,这个副本必须是leader副本。只有leader副本成功写入了,producer才会认为消息发送成功。

注意,ack的默认值就是1。这个默认值其实就是吞吐量与可靠性的一个折中方案。生产上我们可以根据实际情况进行调整,比如如果你要追求高吞吐量,那么就要放弃可靠性。

ack=0,简单来说就是,producer发送一次就不再发送了,不管是否发送成功。

ack=-1,简单来说就是,producer只有收到分区内所有副本的成功写入的通知才认为推送消息成功了。

接下来我们分析一下ack=1的情况下,为什么消息也会丢失?

ack=1的情况下,producer只要收到分区leader成功写入的通知就会认为消息发送成功了。如果leader成功写入后,还没来得及把数据同步到follower节点就挂了,这时候消息就丢失了。

Kafka中ACK机制

acks 参数配置

  • 0: producer 不等待 broker 的 ack,这一操作提供了一个最低的延迟, broker 一接收到还没有写入磁盘就已经返回,当 broker 故障时有可能丢失数据
  • 1: producer 等待 broker 的 ack, partition 的 leader 落盘成功后返回 ack,如果在 follower 同步成功之前 leader 故障,那么将会丢失数据
  • -1(all) : producer 等待 broker 的 ack, partition 的 leader 和 ISR 的 follower 全部落盘成功后才返回 ack。但是如果在 follower 同步完成后, broker 发送 ack 之前, leader 发生故障,那么会造成数据重复

以上是关于Kafka的ack机制的主要内容,如果未能解决你的问题,请参考以下文章

kafka 的ack 的三种机制

Kafka是靠什么机制保持高可靠,高可用的?

KafkaKafka 实现 Exactly-once (ack机制高水位)

Kafka3.x核心速查手册二客户端使用篇-5发送应答机制

Kafka3.x核心速查手册二客户端使用篇-5发送应答机制

Kafka3.x核心速查手册二客户端使用篇-5发送应答机制