MST

星途 面试题库

面试题:消息队列Kafka生产者参数调优基础

在Kafka生产者中,acks参数有哪些取值,不同取值对消息可靠性和性能分别有怎样的影响?如果在一个对消息可靠性要求极高但对延迟有一定容忍度的场景下,该如何设置acks参数?
41.0万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试
  1. acks参数取值及影响
    • acks = 0
      • 可靠性:生产者发送消息后,不需要等待任何broker的确认。这意味着消息可能因为网络问题、broker故障等原因丢失,可靠性最低。
      • 性能:由于不需要等待确认,生产者可以快速发送消息,性能最高。
    • acks = 1
      • 可靠性:生产者发送消息后,只要分区的leader副本接收到消息并写入本地日志,就会向生产者发送确认。如果在leader副本将消息同步到其他副本之前leader发生故障,消息可能丢失,可靠性一般。
      • 性能:因为需要等待leader的确认,性能比acks = 0稍低,但比acks = -1(或all)高。
    • acks = -1 或 acks = all
      • 可靠性:生产者发送消息后,需要等待所有的ISR(In - Sync Replicas,与leader保持同步的副本集合)中的副本都确认接收到消息,才会认为消息发送成功。这保证了消息只要被成功发送就不会丢失,可靠性最高。
      • 性能:由于需要等待所有ISR副本的确认,性能最低,因为等待时间取决于最慢的副本。
  2. 高可靠性且一定延迟容忍度场景的设置:在对消息可靠性要求极高但对延迟有一定容忍度的场景下,应设置 acks = -1acks = all,以确保消息不会丢失。