KRaft模式

目录标题

    • Kraft模式
      • **1. 什么是Kraft模式?**
      • **2. 为什么引入Kraft模式?**
      • **3. 核心优势**
      • **4. 架构与工作原理**
      • **5. 部署与配置要点**
      • **6. 适用场景与最佳实践**
      • **总结**
      • KIP-833: Mark KRaft as Production Ready
      • 除了Kraft模式,Kafka还有以下常用模式:
    • 启用 Kafka KRaft 模式
      • 1. 配置 `server.properties` 文件
      • 2. 初始化集群元数据
      • 3. 启动 Kafka 服务
      • 生产环境注意事项

Kraft模式

Kafka Kraft模式(KRaft)是Apache Kafka自2.8版本引入的核心功能,旨在通过移除对ZooKeeper的依赖,简化集群架构并提升性能。以下是其核心内容的总结:

1. 什么是Kraft模式?

Kraft模式(Kafka Raft元数据模式)是Kafka内置的分布式共识协议,基于Raft算法实现集群元数据(如主题、分区、副本状态等)的自主管理。它替代了传统ZooKeeper模式,使Kafka集群无需外部协调服务即可运行。

2. 为什么引入Kraft模式?

  • 简化架构:消除对ZooKeeper集群的依赖,减少运维复杂度。
  • 提升扩展性:通过Raft协议实现元数据的高效同步,支持百万级分区(远超ZooKeeper的数万限制)。
  • 增强可靠性:控制器故障恢复时间缩短至毫秒级,且元数据变更通过Raft协议保证强一致性。
  • 统一管理:将元数据管理与Kafka自身深度整合,统一安全模型和配置管理。

3. 核心优势

  • 部署与管理更简单:仅需维护Kafka节点,无需额外部署ZooKeeper。
  • 性能优化:元数据存储本地化,减少跨系统通信延迟。
  • 高可用性:通过Raft协议的多数派选举机制,确保集群在部分节点故障时仍正常运行。
  • 快速恢复:控制器故障后,新控制器可直接从内存加载元数据,无需从外部存储恢复。

4. 架构与工作原理

  • 控制器节点
    • 集群中指定部分节点(如3个)作为控制器候选,通过Raft协议选举产生主控制器(Active Controller),其余为备用(Standby)。
    • 控制器节点通过controller.quorum.voters配置定义,格式为id@host:port
  • 元数据存储
    • 元数据通过名为__cluster_metadata的主题存储,支持日志压缩和快照,确保数据持久化。
  • Broker通信
    • Broker通过心跳机制与控制器保持会话,主动拉取元数据更新,而非被动接收广播。

5. 部署与配置要点

  • 关键配置
    • process.roles:定义节点角色(controllerbroker或混合模式)。
    • node.id:唯一标识节点,需与controller.quorum.voters中的ID一致。
    • listeners:配置控制器通信端口(如CONTROLLER://host:9093)。
  • 初始化集群
    使用kafka-storage initialize命令生成元数据,需指定配置文件和引导服务器。
  • 生产建议
    • 控制器节点数建议为3或5(奇数),确保多数派存活。
    • 避免混合模式(同时作为控制器和Broker),推荐隔离部署以提升稳定性。

6. 适用场景与最佳实践

  • 适用场景
    • 大规模集群(百万级分区)。
    • 对延迟敏感的实时数据处理。
    • 需要简化运维的边缘计算或小型部署。
  • 最佳实践
    • 迁移前充分测试,优先新建KRaft集群。
    • 监控控制器状态和Raft日志同步情况。
    • 定期备份元数据存储目录。

总结

Kraft模式是Kafka架构的重大演进,通过自管理的Raft协议显著提升了集群的可扩展性、可靠性和运维效率。随着Kafka版本的迭代(如3.3+),KRaft已成为生产环境的首选模式,尤其适合需要高性能、低延迟的分布式消息系统场景。

KIP-833: Mark KRaft as Production Ready

在这里插入图片描述
在这里插入图片描述

KIP-833: Mark KRaft as Production Ready

除了Kraft模式,Kafka还有以下常用模式:

  • ZooKeeper模式:这是Kafka在KRaft出现之前长期使用的模式。Kafka依赖ZooKeeper来管理元数据,比如集群成员信息、主题(Topic)配置、分区(Partition)分配等。ZooKeeper为Kafka提供了分布式协调服务,帮助Kafka处理诸如选举领导者(Leader)副本、监控Broker状态等任务。但随着Kafka集群规模扩大,ZooKeeper可能成为性能瓶颈,并且其复杂的配置和维护也增加了管理难度。
  • 消息消费模式
    • 发布订阅模式(Publish/Subscribe):一对多的关系,消费者消费完消息后,消息不会立即被删除,而是会存储一段时间,该模式下的消息会被所有订阅该主题的消费者消费。比如在实时数据分析场景中,多个数据分析应用可以同时订阅同一个主题的业务数据,进行各自维度的分析 。此模式下又分为推模式(queue直接将消息推给消费者,可能出现消费者处理不过来的情况)和拉模式(消费者主动去拉取queue中的消息,可按自身消费能力拉取,但需持续维护拉取任务)。
    • 点对点模式(Point-to-Point,P2P):一对一的关系,消费者主动拉取数据,消息确认被消费后,消息队列会删除该消息,一条消息只会被一个消费者消费。在Kafka中,同一消费者组里面的消费者,消费消息类似点对点模式,不过消费完消息后消息不会被删除。
  • 数据可靠性模式(基于生产者角度,通过acks参数设置)
    • acks = 0:生产者无需等待来自Broker的确认就继续发送下一批消息,传输效率最高,但可靠性最低,可能丢数据,不会重复发送,因为这种模式下重试机制会失效。
    • acks = 1(默认):生产者在ISR(In-Sync Replicas,副本同步队列 )中的Leader已成功收到数据并得到确认后,才发送下一条消息。如果Leader宕机,可能会丢失数据。
    • acks = -1或all:生产者需要等待ISR中的所有Follower都确认接收到数据后,才算一次发送完成,可靠性最高,但不能完全保证数据不丢失(如ISR中只剩Leader时,就类似acks = 1的情况),且开启失败重试可能导致消息重复发送。
  • 消费者消费语义模式
    • at most once(最多一次):保证每一条消息commit成功之后,再进行消费处理。设置自动提交为false,接收到消息之后,首先commit,然后再进行消费。特点是不会重复发送,但可能丢失消息。
    • at least once(至少一次):保证每一条消息处理成功之后,再进行commit。设置自动提交为false,消息处理成功之后,手动进行commit。特点是会重复发送,但消息不会丢失。
    • exactly once(恰好一次):发送端数据发送成功,并且成功的消息只发送一次(重复的数据被服务器拒绝),消费端结合幂等性实现。例如,Kafka 0.11.0.0 及以后版本通过生产者幂等性和事务机制来实现Exactly - once语义,确保消息在生产和消费过程中都只被处理一次。

启用 Kafka KRaft 模式

启用 Kafka KRaft 模式需按以下标准流程操作:

1. 配置 server.properties 文件

  • 核心配置项
    • process.roles:定义节点角色,取值:
      • controller,broker:节点同时作为控制器和代理(测试场景)。
      • controller:仅作为控制器(生产环境推荐多节点)。
      • broker:仅作为代理。
    • node.id:为节点设置唯一 ID,集群内所有节点(控制器、代理)的 node.id 不可重复。
    • controller.quorum.voters:以 {id}@{host}:{port} 格式定义控制器仲裁列表,例如 1@host1:9093,2@host2:9093,3@host3:9093,其中 id 需与节点的 node.id 一致。
    • 其他基础配置:如 listeners(监听地址)、inter.broker.listener.name(代理间通信协议)、log.dirs(日志存储路径)等。

2. 初始化集群元数据

使用 kafka-storage 工具初始化 KRaft 集群元数据:

# 命令格式
bin/kafka-storage initialize \-bootstrap-server localhost:9093 \-cluster-id <自动生成,首次可不填> \-configuration config/kraft/server.properties
  • 执行后会生成集群元数据,存储在 log.dirs 配置的目录中。

3. 启动 Kafka 服务

bin/kafka-server-start.sh config/kraft/server.properties

生产环境注意事项

  • 控制器节点数量:至少 3 个控制器节点,确保仲裁机制正常(遵循多数原则)。
  • 网络与端口:控制器间通过 controller.quorum.voters 配置的端口通信,需开放对应端口。
  • 迁移场景:若从 ZooKeeper 模式迁移,需参考官方迁移文档逐步操作,避免数据丢失。

完整流程参考 Apache Kafka 官方文档:KRaft Documentation。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机电路中常见的英文术语及缩写

以下是单片机电路中常见的英文术语及缩写的解释及其作用说明&#xff0c;按功能分类整理&#xff0c;便于理解&#xff1a; 一、核心术语 MCU (Microcontroller Unit) • 中文&#xff1a;微控制器单元 • 作用&#xff1a;单片机的核心芯片&#xff0c;集成CPU、存储器、外设接…

常见框架漏洞之一:Thinkphp5x

ThinkPHP是为了简化企业级应⽤开发和敏捷WEB应⽤开发⽽诞⽣的&#xff0c;是⼀个快速、兼容⽽且简单的轻量级国产PHP开发框架&#xff0c;诞⽣于2006年初&#xff0c;原名FCS&#xff0c;2007年元旦正式更名为 ThinkPHP&#xff0c;遵循Apache2开源协议发布&#xff0c;从Stru…

2025年优化算法:龙卷风优化算法(Tornado optimizer with Coriolis force,TOC)

龙卷风优化算法&#xff08;Tornado optimizer with Coriolis force&#xff09;是发表在中科院二区期刊“ARTIFICIAL INTELLIGENCE REVIEW”&#xff08;IF&#xff1a;11.7&#xff09;的2025年智能优化算法 01.引言 当自然界的狂暴之力&#xff0c;化身数字世界的智慧引擎&…

面试中如何回答性能优化的问题

性能问题和Bug不同,后者的分析和解决思路更清晰,很多时候从应用日志(文中的应用指分布式服务下的单个节点)即可直接找到问题根源,而性能问题,其排查思路更为复杂一些。 对应用进行性能优化,是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。一个简单的应用…

CMake 函数和宏

CMake 函数 CMake 函数定义语法如下, 其中 name 为函数名, <arg1> 为参数名, <commands> 为函数体. 函数定义后, 可以通过 name 调用函数. 函数名允许字母数字下划线, 不区分大小写. function(name [<arg1> ...])<commands> endfunction()如下的样例…

【QA】Qt有哪些迭代器模式的应用?

在 Qt/C 中&#xff0c;迭代器模式的设计主要分为 标准 C 风格 和 Qt 框架特有风格&#xff0c;以下结合代码详细说明两种实现方式的关键设计及其应用场景&#xff1a; 一、Qt 框架中的迭代器模式设计 Qt 提供了两种迭代器风格&#xff1a;Java 风格&#xff08;显式迭代器&am…

Mysql表的简单操作

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 3.1 创建表 3.2 查看表结构 3.3 修改表 1. 添加字段 2. 修改字段 3…

【云馨AI-大模型】自动化部署Dify 1.1.2,无需科学上网,Linux环境轻松实现,附Docker离线安装等

Dify介绍 官网&#xff1a;https://dify.ai/zh生成式 AI 应用创新引擎开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力&#xff0c;轻松构建和运营生成式 AI 原生应用。 Dify安装脚本 目录创建 mkdir -p /data/yunxinai &&a…

WordPress上传图片时显示“未提供数据”错误

在WordPress中上传图片时显示“未提供数据”的错误&#xff0c;通常是由多种原因引起的&#xff0c;以下是一些常见的问题及其解决方法&#xff1a; 1. 文件权限问题 WordPress需要正确的文件和目录权限才能正常上传图片。如果权限设置不正确&#xff0c;可能会导致无法上传图…

python3面试题20个(python web篇)

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 1.python asyncio的原理?2.对Flask蓝图(Blueprint)的理解?3.Flask 和 Django 路由映射的区别?4.什么是wsgi,uwsgi,uWSGI?5.Django、Flask、Tornado的对比?6.CORS 和 CSRF的区别?7.Session,Cookie,JWT的理解8.简…

RedisTemplate和RedissonClient适用的场景有什么不同

在 Spring Boot 项目中&#xff0c;RedisTemplate 和 RedissonClient 分别针对不同的使用场景设计&#xff0c;以下是它们的核心区别和适用场景分析&#xff1a; 一、RedisTemplate&#xff08;Spring Data Redis&#xff09; 定位 Spring 官方提供的 Redis 操作工具&#xf…

人脸表情识别系统分享(基于深度学习+OpenCV+PyQt5)

最近终于把毕业大论文忙完了&#xff0c;众所周知硕士大论文需要有三个工作点&#xff0c;表情识别领域的第三个工作点一般是做一个表情识别系统出来&#xff0c;如下图所示。 这里分享一下这个表情识别系统&#xff1a; 采用 深度学习OpenCVPyQt5 构建&#xff0c;主要功能包…

GitHub供应链攻击事件:Coinbase遭袭,218个仓库暴露,CI/CD密钥泄露

此次供应链攻击涉及GitHub Action "tj-actions/changed-files"&#xff0c;最初是针对Coinbase的一个开源项目的高度定向攻击&#xff0c;随后演变为范围更广的威胁。 攻击过程与影响 Palo Alto Networks Unit 42在一份报告中指出&#xff1a;“攻击载荷主要针对其…

Redis 核心源码解析:从设计哲学到企业级应用实践

一、Redis 的核心设计哲学 Redis 的成功源于其 「用内存换时间」 的核心理念&#xff0c;围绕以下三个核心原则构建&#xff1a; 极简主义&#xff1a;单线程模型避免锁竞争&#xff0c;代码保持高度内聚。 性能至上&#xff1a;所有数据常驻内存&#xff0c;网络层采用事件驱…

GZCTF平台搭建及题目上传

前言 我用手里的Ubuntu虚拟机搭建的&#xff0c;大家根据自己的实际情况来吧 安装及部署 首先&#xff0c;你的虚拟机需要有Docker和Docker-Compose&#xff0c;前者可以看我之前的文章&#xff0c;另外一个可以输入下面的命令安装&#xff0c;注意先获取管理员权限&#xff…

Pycharm社区版创建Flask项目详解

一、创建工程项目 二、配置工程目录 新建的空项目下创建目录。 1、新建app.py文件 2、app.py代码如下&#xff1a; from flask import Flask, render_templateapp Flask(__name__)app.route("/") def root():"""主页:return: Index.html"&qu…

CentOS 7 64位安装Docker

以下是在已有的 CentOS 7 64 位虚拟机上安装 Docker 并配置华为镜像源的详细步骤&#xff1a; 1. 备份原有 Yum 源&#xff08;可选&#xff0c;建议操作&#xff09; # 备份原有仓库文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backu…

运动仿真——phased.Platform

在雷达仿真过程中&#xff0c;运动仿真的必要性&#xff0c;以及运动仿真可以实现哪些功能&#xff0c;在matlab对应的user guide中已经讲的很清楚了&#xff0c;这里不再赘述。 本文主要介绍phased.Platform的一些“坑”&#xff0c;和典型的用法。 第一坑&#xff1a;系统对…

缓存删除三级补偿方案:延迟队列+消息队列+定时任务兜底

问题背景: 在 Cache-Aside 模式中&#xff0c;更新数据库后删除缓存失败会导致数据不一致。本文提供工业级三级补偿方案&#xff0c;实现最终一致性保障。 整体架构: 更新操作触发 → 一级延迟队列 → 二级消息队列 → 三级定时任务方案实现: 一、第一级补偿&#xff1a;延迟队…

从零开始实现 C++ TinyWebServer 数据库连接池 SqlConnectPool详解

文章目录 数据库连接池是什么&#xff1f;Web Server 中为什么需要数据库连接池&#xff1f;SqlConnectPool 成员变量实现 Init() 函数实现 ClosePool() 函数SqlConnectRAII 类SqlConnectPool 代码SqlConnectPool 测试 从零开始实现 C TinyWebServer 项目总览 项目源码 数据库连…