当前位置: 首页 > news >正文

RAFT 共识算法

Leader - Follower 消息同步

image

以Kafka为例子
在 Kafka 中,Leader 节点确保所有 Follower 节点成功接收消息的机制,主要通过 ISR(In-Sync Replicas,同步副本列表)acks 消息确认机制 实现,具体流程如下:

1. 核心机制:ISR 列表与同步确认

  • ISR 列表:每个分区的 Leader 会维护一个 ISR 列表,记录与自己保持同步的 Follower 节点(包括 Leader 自身)。
    Follower 需满足两个条件才能留在 ISR 中:

    • 与 Leader 保持网络连接(通过定期 heartbeat 心跳机制确认存活);
    • 消息同步进度不落后于 Leader 太多(可通过 replica.lag.time.max.ms 配置容忍的最大同步延迟,默认 30 秒)。
  • 消息同步流程

    1. 生产者发送消息到 Leader 后,Leader 将消息写入本地日志;
    2. Follower 定期向 Leader 发送拉取请求(FetchRequest),同步新消息并写入本地日志;
    3. Follower 同步完成后,向 Leader 返回确认(FetchResponse);
    4. Leader 收到 Follower 的确认后,更新该 Follower 的同步进度,确保其留在 ISR 中。

2. 确保所有 Follower 接收的关键配置:acks 参数

生产者通过设置 acks 参数,控制 Leader 何时向生产者返回“消息发送成功”的确认,从而间接确保 Follower 同步状态:

  • acks=all(或 -1)时
    Leader 必须等待 ISR 中所有副本(包括所有 Follower) 都成功写入消息后,才向生产者返回确认。
    这是最严格的配置,可确保消息被所有同步的 Follower 接收(只要它们在 ISR 中)。

  • 其他 acks 配置的区别

    • acks=1(默认):仅 Leader 写入成功后即返回确认,不等待 Follower 同步(可能存在 Follower 未收到的风险);
    • acks=0:Leader 接收消息后立即返回确认,不等待写入本地日志(可靠性最低)。

3. 异常处理:Follower 同步失败的情况

  • 若某个 Follower 长时间未同步(超过 replica.lag.time.max.ms),Leader 会将其从 ISR 中移除;
  • 此时若 acks=all,Leader 只需等待 剩余 ISR 中的副本 确认即可(无需等待已脱离 ISR 的 Follower);
  • 若需严格确保“最初配置的 2 个 Follower 都必须收到”,需结合以下配置:
    • min.insync.replicas=N(例如设置为 3,即 Leader + 2 Follower 都在 ISR 中才允许写入);
    • 同时保证 acks=all,此时若任何一个 Follower 脱离 ISR,生产者会收到异常(NotEnoughReplicasException),需重试直到所有 Follower 同步完成。

总结

要确保 2 个 Follower 都收到消息,需满足:

  1. 生产者配置 acks=all
  2. 2 个 Follower 均处于 ISR 列表中(同步正常);
  3. 可选配置 min.insync.replicas=3(强制要求 Leader + 2 Follower 都同步成功,否则拒绝写入)。

通过这套机制,Kafka 既能保证消息可靠同步到 Follower,又能通过 ISR 动态调整同步范围,避免因个别节点故障导致整个集群不可用。

投票

当client端写请求给follower,请求会被重定向到leader
follower 150-300 ms收不到leader请求,就转化为候选人角色,开启投票。

投票的信息内容:日志的数据量,term的轮数

http://www.jsqmd.com/news/11712/

相关文章:

  • 【Vue】LangChain4j大模型对话-前端页面完成(vite+vue3+router)
  • 【Vue】LangChain4j大模型对话-前端页面完成(vite+vue3+router)
  • 【gradio】使用Gradio快速开发前端界面:基础知识
  • 2025风机盘管厂家口碑推荐榜:高效节能与稳定性能的行业首选
  • Open WebUI:打造友好且强大的自托管 AI 平台
  • 直流微电网运行控制仿真算法设计与实现
  • 车载360环视平台:米尔RK3576开发板支持12路低延迟推流
  • 基于MATLAB的多棵树分类器(随机森林)
  • TDengine 3.3.6.0 使用Docker部署3节点集群
  • 05-字符设备驱动之ioctl
  • 文本切割方案进化概览:从“机械切割”到“智能解构”
  • 2025氧化镁厂家最新推荐榜:高纯度与稳定性能的行业佼佼者!
  • 大模型RAG的上下文压缩与过滤
  • iOS 26 设备文件管理实战指南,文件访问、沙盒导出、系统变更与 uni-app 方案适配
  • 从“视频孤岛”到“统一视界”:解析视频汇聚平台EasyCVR的核心功能与应用场景
  • 个人博客作业 1:就《现代软件工程》提 5 个问题
  • 2025 年锅炉优质厂家最新推荐榜单:高效节能与环保性能全方位剖析,助您选到靠谱锅炉供应商
  • 2025 年商用洗碗机源头厂家最新推荐榜:聚焦实力企业,为餐饮及企事业单位选购提供可靠参考
  • EHOME平台EasyCVR视频诊断功能指南:一文读懂其可识别的所有视频质量问题
  • 解决FinalShell无法本地连接虚拟机(VMware)中的Linux的问题
  • html介绍+运用
  • 2025 年 氨糖软骨素厂家哪家好?傦力宝产品选购指南,解析研发实力与品质优势
  • 【SPIE出版】2025年信息工程、智能信息技术与人工智能国际学术会议(IEITAI 2025)
  • go读取二进制文件编译信息
  • 2025锯床厂家最新推荐榜:精准切割与高效性能的行业首选!
  • 基于LangChain 实现 Advanced RAG-后检索优化(下)-上下文压缩与过滤
  • 2025.10.10 图论
  • xshell把界面转发到xming
  • 基于LangChain 实现 Advanced RAG-后检索优化(上)-Reranker
  • 使用AI创建angular项目