Kafka生产者ACK参数与同步复制

目录

生产者的ACK参数

ack等于0

ack等于1(默认)

ack等于-1或all

Kafka的同步复制

使用误区


生产者的ACK参数

Kafka的ack机制可以保证生产者发送的消息被broker接收成功。

Kafka producer有三种ack机制 ,分别是 0,1,-1。这个配置可以在初始化producer时在config中进行配置。默认值是1。

ack等于0

producer不等待broker同步完成的确认,只要发送一次消息后就不再发送了,不管是否发送成功。这种方式延迟最低,但是持久性也最差,当服务器发生故障时,就很可能发生数据丢失。

例如leader已经宕机了,但producer还会继续发送消息,broker接收不到数据就会数据丢失。

ack等于1(默认)

producer只要收到一个分区副本成功写入的通知就认为推送消息成功了,这一个副本就是Leader。

当集群中Partition的Leader发生宕机时,此时由于follwer可能尚未同步到消息,数据可能就丢失了。此选项提供了较好的持久性较低的延迟性,实现了吞吐量和消息可靠性的平衡。

ack等于-1或all

这个值意味着开启同步复制机制后,你ISR列表里面的所有副本必须都要同步成功才会反馈给生产者这条消息发送成功了。

Kafka的同步复制

之前Kafka的Replication策略和ISR同步机制 已经写过关于同步复制的实现机制,本文再次提及是因为在实际使用场景下,kafka的生产者ack参数其实与同步复制的相关配置是相互配合才能起到真正的作用。

min.insync.replicas

min.insync.replicas这个参数指定了一个写操作被认为是成功时最小的ISR副本确认数。如不能满足这个条件producer将会触发异常(either NotEnoughReplicas or NotEnoughReplicasAfterAppend)。

当开启同步复制且生产者ACK参数设置为-1或all时,在消息发送时只要写入副本数满足了min.insync.replicas的数值即可返回给生产者消息发送成功的通知。

个人理解这个参数其实是用来平衡kafka集群的数据安全性和吞吐量的,以及可用性。min.insync.replicas配置控制的是同步复制ISR副本的下限,要使用同步复制机制需要合理配置min.insync.replicas的值,在此基础上kafka服务端可以实现同步复制并发挥其作用,但是生产者最终到底能不能把一条消息发送成功取决于生产者的acks参数配置。

场景举例:

topic中ISR副本数为4,min.insync.replicas设置为2,生产者ack设置为-1,当生产者发送消息时满足leader节点写入成功且另外3个ISR其中一个写入完成后即可完成消息发送成功的响应,无需等待全量ISR都写入完成。

使用误区

min.insync.replicas配置的默认值是1,这种情况并没有同步复制机制的作用。因为leader本身也是一个副本,所以1这个值表示leader写入成功后即可返回给生产者发送成功的标识。

此时即使生产者ack=all ,结果也是等同于ack=1的情况,即producer只要收到一个分区副本成功写入的通知就认为推送消息成功了,这一个副本就是Leader。

相关推荐
未秃头的程序猿1 天前
从零到一:深入浅出分布式锁原理与Spring Boot实战(Redis + ZooKeeper)
spring boot·分布式·后端
eSsO KERF1 天前
RabbitMQ之交换机
分布式·rabbitmq·ruby
Albert Edison1 天前
【RabbitMQ】Topics 通配符模式(使用案例)
分布式·rabbitmq
yaoyouzhong1 天前
分布式与集群,二者区别是什么?
分布式
橙露1 天前
SpringBoot 整合 MinIO:分布式文件存储上传下载
spring boot·分布式·后端
Ulyanov2 天前
Apache Kafka在雷达仿真数据流处理中的应用
分布式·python·kafka·apache·雷达电子战
路飞说AI2 天前
Kafka: 一条消息的完整“生命之旅”
kafka
Ssan PRIN2 天前
深度掌握 RabbitMQ 消息确认(ACK)机制,确保消息万无一失
分布式·rabbitmq
切糕师学AI2 天前
深入理解 CAP 定理:分布式系统中的一致性、可用性与分区容错
分布式·cap
indexsunny2 天前
互联网大厂Java面试实战:核心技术与微服务架构在电商场景中的应用
java·spring boot·redis·kafka·maven·spring security·microservices