kafka-常见问题


常见问题

一、核心概念和架构

1. Topic 如何实现高吞吐与负载均衡

2. Partition 的副本机制及数据同步原理?

3. ISR 的作用是什么?如何判断副本是否在 ISR 中?

4. 副本滞后时如何处理?replica.lag.time.max.ms 的作用?

5. HW 如何保证消费者读取一致性?LEO 如何影响生产者写入?

1.如何避免消息丢失

消息丢失主要是在这几种场景:

  1. Producer:Producer 发送到 Broker 丢失,消息没有成功投递

    • 使用带回调通知的发送 API,不要用 Fire and forget 模式
    • 发送时设置重试次数
  2. Broker:Broker 保存消息(持久化)丢失

    • Kafka 收到消息后会先存储在也缓存中(Page Cache)中,之后由操作系统根据自己的策略进行刷盘或者通过 fsync 命令强制刷盘。如果系统挂掉,在 PageCache 中的数据就会丢失。
      • acks=0:消息很可能会丢
      • acks=1:如果 follower 没有收到 leader 同步的消息,leader 就挂了,消息会丢失
      • acks=-1(all),只有所有副本全挂才会丢,基本不可能,可认为已经持久化
  3. Consumer:Consumer 消费消息丢失

    • 唯一原因:Consumer 没有正确消费消息,就把 Offset 提交了,导致 Kafka 认为该消息已经被消费了,从而导致消息丢失。

    • 不要开启自动提交,手动提交位移,确保休息消费完再提交

2.如何避免重复消费

3.消息传递语义

消息传递语义:Producer 和 Consumer 之间消息传递保证性,分为三种

  • at-least-once: 至少一次,消息不会丢,但可能重复传递
    • 默认 Kafka 保障,Producer ACK 机制 + Broker Replica 机制
  • at-most-once: 最多一次,消息可能丢,但不会重复传递
    • 用户在处理消息之前保存 Offset,实现该语义
  • exactly-once: 精准一次,消息不会丢,也不会重复传递
    • 用户自己实现幂等

如何实现 exactly-once 语义

4.Rebalance 触发时机

  1. 组成员数量发生变化
  2. 订阅主题数量发生变化,如正则匹配到了更多主题
  3. 订阅主题的分区数发生变化

Reference

[1] Top 35+ Most Asked Kafka Interview Questions and Answers


文章作者: xiangfei.xu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xiangfei.xu !
  目录