MST

星途 面试题库

面试题:消息队列Kafka架构中Producer客户端acks参数的作用及常见配置值分析

在Kafka Producer客户端中,acks参数用于控制Producer发送消息时的确认机制。请阐述acks参数的具体作用,以及acks=0、acks=1、acks=all(或acks=-1)这几种常见配置值在可靠性、性能方面的特点及应用场景。
14.0万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

acks参数作用

acks参数用于指定Producer发送消息后,需要等待多少个副本确认消息已成功接收,以此来控制消息发送的确认机制。它确保消息在一定程度上不会丢失,同时也影响着Producer的性能。

acks=0

  • 可靠性:可靠性最低。Producer发送消息后,无需等待任何Broker的确认,直接继续发送下一条消息。如果此时Broker发生故障,消息可能丢失。
  • 性能:性能最高。因为不需要等待确认,消息发送速度非常快,适用于对消息可靠性要求不高,追求高吞吐量的场景,如日志收集等。
  • 应用场景:适合对数据丢失不敏感,需要高吞吐量的场景,例如收集网站访问日志,即使少量日志丢失也不影响整体数据分析。

acks=1

  • 可靠性:可靠性适中。Producer发送消息后,只要Leader副本成功接收消息,就会收到确认。如果此时Leader副本所在的Broker发生故障,而该消息还未来得及复制到Follower副本,消息可能丢失。
  • 性能:性能较高。相比acks=0,由于需要等待Leader确认,性能略有下降,但在大多数场景下可以接受。适用于对可靠性有一定要求,同时也关注性能的场景。
  • 应用场景:适用于对数据准确性有一定要求,但允许少量数据丢失的场景,如实时监控系统,偶尔丢失一些监控数据对整体影响不大。

acks=all(或acks=-1)

  • 可靠性:可靠性最高。Producer发送消息后,需要等待ISR(In-Sync Replicas,与Leader保持同步的副本集合)中的所有副本都成功接收消息后,才会收到确认。只要ISR中有一个副本存活,消息就不会丢失。
  • 性能:性能最低。因为需要等待所有副本确认,网络延迟和副本同步延迟会显著影响消息发送速度。适用于对数据可靠性要求极高,不容许数据丢失的场景。
  • 应用场景:适合金融交易等对数据准确性和完整性要求极高的场景,如银行转账记录,任何一笔交易数据都不能丢失。