数据岗位面试题更新 2026-08-05

请解释 Kafka 中 acks 参数的不同取值(如 0、1、all)对数据可靠性和性能的具体影响,以及在实际生产环境中如何选择合理的 acks 配置。

数据风险判断技术原理方案权衡Apache Kafka

考察说明

考查对 Kafka 消息确认机制的理解,以及如何在可靠性和性能之间做出权衡。

回答思路

  1. 【回答框架 1】acks 是 Kafka 生产端的重要参数,用于控制生产者发送消息后需要等待多少个分区副本确认收到消息,才认为发送成功。它直接决定了消息的持久性保证和端到端延迟。
  2. 【回答框架 2】acks=0:生产者不等待任何 broker 确认,立即返回,吞吐量最高但可能丢失消息(如网络故障或 broker 不可用)。acks=1:等待 leader 分区副本确认即可,若 leader 崩溃但数据未同步到 follower,则可能丢失消息,是在可靠性和性能之间的折中。acks=all(或 -1):需要等待所有参与副本(根据 min.insync.replicas 配置)确认,可靠性最高,但延迟增加、吞吐量降低。
  3. 【回答框架 3】选择 acks 配置时需结合业务场景:对数据丢失要求极高的场景(如金融交易)应使用 acks=all 并设置 min.insync.replicas=2 以避免单点故障;但对日志或监控数据等允许少量丢失的场景,acks=1 即可在性能和可靠性间取得平衡。
  4. 【回答框架 4】需要说明 acks 仅保证消息“已提交”的语义,不直接决定消息的幂等性或最终一致性,实际可靠性还取决于复制因子、ISR 机制、重试策略等。
  5. 【关键点 1】acks=0 不等待确认,性能最高但最易丢消息。
  6. 【关键点 2】acks=1 等待 leader 确认,可能因 leader 崩溃丢失数据。
  7. 【关键点 3】acks=all 等待所有同步副本确认,可靠性最强,但延迟和资源开销最大。
  8. 【关键点 4】生产环境中常结合 min.insync.replicas 使用 acks=all 保证持久性。
  9. 【关键点 5】选择需权衡业务对可靠性和吞吐的需求,无绝对最优解。
  10. 【易错点 1】误认为 acks=all 完全不会丢消息,忽略 min.insync.replicas 配置可能带来的 ACK 失败。
  11. 【易错点 2】将 acks 设置为 1 并盲目认为安全,未考虑 leader 切换时的数据丢失风险。
  12. 【易错点 3】混淆 acks 和幂等性,acks 只保证确认,不保证消息不重复或顺序绝对一致。