Kafka如何防止消息丢失

  1. 持久化存储
    • Kafka 使用基于日志的存储模型。每个主题的分区都会被分割成多个片段(Segment),每个片段都是一个可追加的日志文件。
    • 生产者发送的每条消息都会被追加到对应分区的当前活跃片段(active segment)中。
    • 这种设计保证了消息在写入时是持久化的,即使在写入过程中发生故障,已经写入的消息也不会丢失。
  2. 副本机制
    • Kafka 使用副本来提高消息的可靠性和持久性。每个主题的分区可以配置多个副本,每个副本分布在不同的 Broker 上。
    • 每个分区都有一个 Leader 副本(Leader Replica)和多个 Follower 副本(Follower Replica)。
    • 生产者发送消息到 Leader 副本,然后 Leader 副本负责将消息复制到所有的 Follower 副本。
    • 如果 Leader 副本故障,Kafka 会从 Follower 副本中选举新的 Leader,确保分区的可用性和消息的持久性。
  3. 确认机制
    • Kafka 允许生产者配置消息的确认机制,以控制消息发送的可靠性和延迟:
      • acks=0:生产者发送消息后不等待任何确认,直接发送下一条消息。这种模式下消息丢失的风险较高,因为生产者不会知道消息是否成功接收。
      • acks=1:Leader 副本收到消息后会向生产者发送确认,生产者认为消息已经成功发送。
      • acks=all (或 acks=-1):Leader 和所有的 ISR(In-Sync Replicas,同步副本)都确认接收到消息后,生产者认为消息已经成功发送。
    • 较高的确认级别可以减少消息丢失的风险,但会增加延迟,因为需要等待多个副本的确认。
  4. ISR(In-Sync Replicas)机制
    • Kafka 使用 ISR 机制来处理副本的复制问题。
    • ISR 是一组与 Leader 副本保持同步的副本集合。只有在 ISR 中的副本才会被用来进行消息的读写操作。
    • 如果某个副本由于网络延迟或其他问题无法及时追赶 Leader 副本的进度,它将被移出 ISR,从而避免读取不一致的数据。
    • 这种机制确保了即使一些副本出现问题,仍然可以继续向客户端提供一致的数据。
相关推荐
子非鱼@Itfuture2 小时前
【Kafka】Kafka使用场景用例&Kafka用例图
分布式·中间件·kafka
kobe_OKOK_3 小时前
rabbitmq 入门知识点
分布式·rabbitmq·ruby
王嘉俊9253 小时前
深入浅出 全面剖析消息队列(Kafka,RabbitMQ,RocketMQ 等)
分布式·kafka·消息队列·rabbitmq·rocketmq
沧澜sincerely4 小时前
分布式3PC理论
分布式·一致性协议·3pc
掘金-我是哪吒5 小时前
分布式微服务系统架构第169集:1万~10万QPS的查当前订单列表
分布式·微服务·云原生·架构·系统架构
Zhao_yani5 小时前
RabbitMQ相关知识
分布式·rabbitmq
我就是全世界6 小时前
【存储选型终极指南】RustFS vs MinIO:5大维度深度对决,95%技术团队的选择秘密!
开发语言·分布式·rust·存储
楠枬7 小时前
zookeeper 实现分布式锁
分布式·zookeeper
milanyangbo10 小时前
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
分布式·后端·云原生·架构
失散1310 小时前
分布式专题——1.1 Redis单机、主从、哨兵、集群部署
java·数据库·redis·分布式·架构