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

KRaft模式下的Kafka启动指南:摆脱Zookeeper依赖

一、背景介绍

多年来,人们一直在同时使用Apache ZooKeeper和Apache Kafka。但是自Apache Kafka 3.3发布以来,它就可以在没有ZooKeeper的情况下运行。同时它包含了新的命令kafka-metadata-quorum和kafka-metadata-shell?该如何安装新版kafka,以及如何使用新命令,在本文中,我将回答这些和其他相关的问题。

历史背景和时间线

很久以前,Apache Kafka 服务器是一项独立的服务:一个简单而实用的应用程序,很快就受到许多人的喜爱。但是,它缺乏高可用性和复原能力。系统管理员解决该问题的标准方法通常是创建多个代理副本以进行复制,并由知名技术 Apache ZooKeeper 协调,该技术很快成为标准 Kafka 部署的一部分,两者共生。标准方法通常是创建多个代理副本用于复制目的,通过Apache ZooKeeper进行协调,该技术很快成为标准Kafka部署的一部分,两者协同工作。

尽管如此,Apache ZooKeeper 并非万无一失的解决方案。随着时间的推移,Apache Kafka 技术的弹性、可扩展性和性能期望发生了变化,导致了更加严格的需求。进行了许多变更,其中最重要的是将消费者偏移量从 ZooKeeper 迁移到 Kafka,逐步在 Kafka 工具中删除 ZooKeeper 连接主机,并实现了著名的 KIP-500(Kafka 改进提案 500)。

KIP-500 从 2.8 版本开始出现,当时 Kafka Raft(KRaft,Apache Kafka 用于管理元数据的共识协议 Raft 实现)作为早期访问功能出现,尽管它在 2022 年 10 月 3 日被标记为生产就绪。从 ZooKeeper 到 KRaft 功能的早期访问迁移计划在 Kafka 3.4 中发布。其生产就绪版本计划在 Kafka 3.5 版本中发布,同时弃用 ZooKeeper 支持。最后,计划是从 Kafka 4.0 开始的所有部署在没有 ZooKeeper 的情况下运行。

Kafka versionState
2.8KRaft early access
3.3KRaft production-ready
3.4Migration scripts early access
3.5Migration scripts production-ready; use of ZooKeeper deprecated
4.0ZooKeeper not supported

image-20240719132516986

在没有 ZooKeeper 的情况下设置 Kafka 集群,会有一种特殊类型的服务器 - 控制器(controller)。控制器服务器形成一个集群仲裁(quorum)。集群使用 KRaft 算法(我们不在范围内讨论算法的理论描述,更多详情请参考 KRaft 文档或 Raft 文档)选择一个领导者,该领导者开始为连接以拉取集群状态元数据的其他代理(broker)服务的请求提供服务。代理的模型已经发生了变化:以前,活动的控制器将更改推送到代理,而现在代理从领导者控制器中拉取元数据。
Kafka 社区在其最新发布版本中实现了许多内部更改,其中这些是最重要的之一:

  1. Kafka 集群的扩展限制已得到解决:Kafka 可以处理更多的主题和分区,并且启动和恢复时间得到了显着改善。Kafka 控制器不需要从 ZooKeeper 中读取所有的元数据 — 每个控制器都在本地保存元数据,这节省了将集群恢复运行所需的宝贵时间。
  2. 使用 Kafka 技术的知识要求和生产设置比同时使用 Kafka 和 ZooKeeper 更简单,因为每种技术都需要设置系统配置、安全性、可观察性、日志记录等。技术越少,依赖关系和相互连接就越少。

二、Kafka 如何下载

官网地址: https://kafka.apache.org/

目前Kafka最新的版本就是3.7.1

image-20240719132753490

可以看到下面这两个版本信息?

  • Scala 2.12 - kafka_2.12-3.7.1.tgz

  • Scala 2.13 - kafka_2.13-3.7.1.tgz

    我们知道,一个完整的Kafka实例,至少包含了3部分:

  • 生产者-ProducerBroker生产者-Consumer
    其中生产者和消费者是使用Java语言,Broker则是使用的Scala语言,这样是不是就明白了。2.12和2.13其实就是说的Scala的版本,3.7.1就是Kafka真正的正式版本号。

国内下载加速地址

  • kafka3.7.1 包下载地址: https://mirrors.nju.edu.cn/apache/kafka/3.7.1/kafka_2.13-3.7.1.tgz
  • openjdk11.0.2 下载地址: https://mirrors.nju.edu.cn/openjdk/11.0.2/openjdk-11.0.2_linux-x64_bin.tar.gz

三、安装Java环境

#创建openjdk 工作目录
mkdir -p /home/application#下载软件包
wget https://mirrors.nju.edu.cn/openjdk/11.0.2/openjdk-11.0.2_linux-x64_bin.tar.gz#解压至/home/application目录下
tar -xf openjdk-11.0.2_linux-x64_bin.tar.gz -C /home/application#查看jdkls -l /home/application/jdk-11.0.2/
总用量 28
drwxr-xr-x  2 root root 4096  7月  3  2023 bin
drwxr-xr-x  4 root root 4096  7月  3  2023 conf
drwxr-xr-x  3 root root 4096  7月  3  2023 include
drwxr-xr-x  2 root root 4096  7月  3  2023 jmods
drwxr-xr-x 72 root root 4096  7月  3  2023 legal
drwxr-xr-x  6 root root 4096  7月  3  2023 lib
-rw-r--r--  1 root root 1214  1月 18  2019 release#配置全局的环境变量
【需要注意⚠️从 JDK 9 开始 OpenJDK 和 Oracle JDK 都不再单独提供 JRE(Java 运行时环境),就不需要指定jre的环境变量了】vim /etc/profileexport JAVA_HOME=/home/application/jdk-11.0.2
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH#使环境变量生效
souce /etc/profile##验证java环境
[root@localhost ~]#  java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

四、KRaft模式下启动Kafka

#创建kafka工作目录
mkdir -p /home/application#下载软件包
wget https://mirrors.nju.edu.cn/apache/kafka/3.7.1/kafka_2.13-3.7.1.tgz#解压软件包至/home/application
tar -xf kafka_2.13-3.7.1.tgz -C /home/application#查看kafka3.7.1包下内容ls -l /home/application/kafka_2.13-3.7.1
总用量 80
drwxr-xr-x 3 root root  4096  7月 18 15:05 bin
drwxr-xr-x 3 root root  4096  7月 18 14:57 config
drwxr-xr-x 3 root root  4096  7月 18 15:24 kraft-combined-logs
drwxr-xr-x 2 root root 12288  7月 18 14:56 libs
-rw-r--r-- 1 root root 15260  6月 19 05:27 LICENSE
drwxr-xr-x 2 root root  4096  6月 19 05:35 licenses
drwxr-xr-x 2 root root  4096  7月 18 15:06 logs
-rw-r--r-- 1 root root 28359  6月 19 05:27 NOTICE
drwxr-xr-x 2 root root  4096  6月 19 05:35 site-docs#备份并修改config/kraft目录下的server.propertiescd /home/application/kafka_2.13-3.7.1/config/kraftcp server.properties server.properties-bak#修改配置文件,指定log.dirs 位置 和 advertised.listeners 监听地址【内网IP地址】vim  server.properties.........log.dirs=/home/application/kafka_2.13-3.7.1/kraft-combined-logsadvertised.listeners=PLAINTEXT://172.22.33.204:9092#生成存储目录唯一ID
[root@localhost bin]# /home/application/kafka_2.13-3.7.1/bin/kafka-storage.sh random-uuid
PgJbkdolTTywNePn8TBr6g#拿着得到的uuid,格式化存储目录
[root@localhost bin]# /home/application/kafka_2.13-3.7.1/bin/kafka-storage.sh format -t PgJbkdolTTywNePn8TBr6g -c /home/application/kafka_2.13-3.7.1/config/kraft/server.properties#使用systemd配置kafka开机自启动
vim /etc/systemd/system/kafka.service
[Unit]
Description=kafka
Requires=network.target
After=network.target[Service]
Environment="JAVA_HOME=/home/application/jdk-11.0.2" 
ExecStart=/home/application/kafka_2.13-3.7.1/bin/kafka-server-start.sh /home/application/kafka_2.13-3.7.1/config/kraft/server.properties
ExecStop=/home/application/kafka_2.13-3.7.1/bin/kafka-server-stop.sh[Install]
WantedBy=multi-user.target#systemd-reload,并添加开机自启动
chmod +x  /etc/systemd/system/kafka.service
systemctl enable kafka
systemctl start kafka
systemctl status kafka

五、kafka测试发送和接收消息

创建一个主题:Kafka使用主题来组织消息。可以使用以下命令创建一个主题:

bin/kafka-topics.sh --create --topic my_topic_srebro.cn --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

发送消息:使用生产者客户端发送消息到Kafka主题。可以使用以下命令发送消息:

bin/kafka-console-producer.sh --topic my_topic_srebro.cn --bootstrap-server localhost:9092

接收消息:使用消费者客户端接收Kafka主题中的消息。可以使用以下命令接收消息:

bin/kafka-console-consumer.sh --topic my_topic_srebro.cn --bootstrap-server localhost:9092 --from-beginning

image-20240718153521299

六、参考

  • https://redpanda.com/guides/kafka-tutorial/kafka-without-zookeeper

本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 运维小弟

相关文章:

KRaft模式下的Kafka启动指南:摆脱Zookeeper依赖

一、背景介绍 多年来,人们一直在同时使用Apache ZooKeeper和Apache Kafka。但是自Apache Kafka 3.3发布以来,它就可以在没有ZooKeeper的情况下运行。同时它包含了新的命令kafka-metadata-quorum和kafka-metadata-shell?该如何安装新版kafka&#xff0c…...

【数据库】MySQL-基础篇-函数

专栏文章索引:数据库 有问题可私聊:QQ:3375119339 目录 一、简介 二、字符串函数 三、数值函数 四、日期函数 五、流程函数 一、简介 函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在 M…...

dp练习【4】

最长数对链 646. 最长数对链 给你一个由 n 个数对组成的数对数组 pairs &#xff0c;其中 pairs[i] [lefti, righti] 且 lefti < righti 。 现在&#xff0c;我们定义一种 跟随 关系&#xff0c;当且仅当 b < c 时&#xff0c;数对 p2 [c, d] 才可以跟在 p1 [a, b…...

php 实现推荐算法

在PHP中实现推荐算法的应用场景通常包括电商、社交媒体、内容平台等。推荐算法可以帮助用户找到与其兴趣相关的内容&#xff0c;提高用户体验和平台黏性。以下是几种常见的推荐算法及其PHP实现方式&#xff1a; 1. 基于协同过滤的推荐算法 协同过滤&#xff08;Collaborative…...

相机光学(三十六)——光圈

0.参考链接 &#xff08;1&#xff09;Hall光圈和Piris光圈的区别 &#xff08;2&#xff09;自动光圈及P-IRIS原理 1.光圈分类 Hall光圈和Piris光圈是两种不同的光圈技术。它们之间的区别如下&#xff1a; Hall光圈&#xff1a;Hall光圈是一种传统的光电子元件&#xff0c;通…...

数据结构——树和二叉树

目录 一、树的概念 二、树结点之间的关系 三、二叉树 1、满二叉树 2、完全二叉树 四、二叉树的存储 1、顺序存储 2、链式存储 一、树的概念 如果数据和数据之间满足一对多的关系&#xff0c;将其逻辑结构称之为树 如下图&#xff1a;树的根与树的分支存在一对多的关系 将上…...

142. Go操作Kafka(confluent-kafka-go库)

文章目录 Apache kafka简介开始使用Apache Kafka构建生产者构建消费者 总结 之前已经有两篇文章介绍过 Go如何操作 kafka 28.windows安装kafka&#xff0c;Go操作kafka示例&#xff08;sarama库&#xff09; 51.Go操作kafka示例&#xff08;kafka-go库&#xff09; Apache ka…...

spring boot(学习笔记第十九课)

spring boot(学习笔记第十九课) Spring boot的batch框架&#xff0c;以及Swagger3(OpenAPI)整合 学习内容&#xff1a; Spring boot的batch框架Spring boot的Swagger3&#xff08;OpenAPI&#xff09;整合 1. Spring boot batch框架 Spring Batch是什么 Spring Batch 是一个…...

docker安装 redis 并且加密开启SSL/TLS通道

拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/redis:latest docker tag registry.cn-hangzhou.aliyuncs.com/qiluo-images/redis:latest redis:latest要在 Docker 容器中启动 Redis 并开启 SSL/TLS 加密&#xff0c;需按照以下步骤修改启动命令和配置…...

什么是ARM架构?什么是X86架构?两者的区别是什么?

一、什么是ARM架构 &#xff08;一&#xff09;起源于发展 ARM 架构由英国剑桥的 Acorn 计算机公司开发。因市场无合适产品&#xff0c;Acorn 自行设计出第一款微处理器&#xff0c;命名为 ARM。此后 ARM 架构不断发展&#xff0c;1990 年为与苹果合作成立 ARM 公司&#xff0…...

【vscode】vscode paste image插件设置

本文首发于 ❄️慕雪的寒舍 vscode编辑md文件的时候&#xff0c;如果想插入图片&#xff0c;自带的粘贴只会粘贴到当前目录下&#xff0c;也没有文件重命名&#xff0c;很不友好。 在扩展商店里面有mushan的Paste Image插件&#xff0c;相比自带的&#xff0c;更加友好一点。但…...

自定义string类

#include <iostream> #include <string> int main() { std::string str "Hello, World!"; // 使用 c_str() 将 std::string 转换为 C 风格字符串&#xff0c;并传递给 printf printf("The string is: %s\n", str.c_str()); // 尝试修改…...

Python | Leetcode Python题解之第387题字符串中的第一个唯一字符

题目&#xff1a; 题解&#xff1a; class Solution:def firstUniqChar(self, s: str) -> int:position dict()q collections.deque()n len(s)for i, ch in enumerate(s):if ch not in position:position[ch] iq.append((s[i], i))else:position[ch] -1while q and po…...

RocketMQ 消费时序列化报错问题分析及解决

问题背景 在2024年3月7日&#xff0c;系统消费 RocketMQ 消息时出现了序列化报错&#xff0c;错误信息显示为&#xff1a; java.io.InvalidClassException: com.xxx.xxx.bean.mg.GoodsChangeLogMessage; local class incompatible: stream classdesc serialVersionUID... 这是…...

全能与专精:探索未来AI模型的发展趋势与市场潜力

文章目录 每日一句正能量前言AI模型的全面评估和比较AI模型的专精化和可扩展性AI模型的合理使用和道德规范后记 每日一句正能量 一个人&#xff0c;如果没有经受过投资失败的痛楚&#xff0c;又怎么会看到绝望之后的海阔天空。很多时候&#xff0c;经历了人生中最艰难的事&…...

Python深度学习:【开源数据集系列】ImageNet数据集

ImageNet 是一个大规模的视觉数据集,是计算机视觉领域最重要的基准数据集之一。该数据集由普林斯顿大学和斯坦福大学的研究人员发起,于 2009 年推出。ImageNet 是用于物体分类、目标检测、图像分割、姿势估计等多种任务的通用数据集,尤其在深度学习和计算机视觉的突破性研究…...

微信小程序手写签名

微信小程序手写签名组件 该组件基于signature_pad封装&#xff0c;signature_pad本身是web端的插件&#xff0c;此处将插件代码修改为小程序端可用。 signature_pad.js /*!* Signature Pad v5.0.3 | https://github.com/szimek/signature_pad* (c) 2024 Szymon Nowak | Releas…...

Javascript 使用中点查找矩形的角(Find Corners of Rectangle using mid points)

考虑一个矩形 ABCD&#xff0c;我们给出了边 AD 和 BC 中点&#xff08;分别为 p 和 q&#xff09;的坐标以及它们的长度 L&#xff08;AD BC L&#xff09;。现在给定参数&#xff0c;我们需要打印 4 个点 A、B、C 和 D 的坐标。 例子&#xff1a; 输入&#xff1a;p (1,…...

【困难】 猿人学web第一届 第18题 jsvmp 洞察先机

文章目录 数据接口分析还原加密参数插桩调试分析日志插桩补充 python 代码 数据接口分析 数据接口 https://match.yuanrenxue.cn/match/18data 请求参数 {page: 页码, t: 时间戳, v: 加密值} 请求第一页不需要携带 t, v 参数 cookie 只需要携带 sessionid 只要 还原加密字段…...

IDEA Maven 源修改为国内阿里云镜像的正确方式

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

Copilot for Xcode (iOS的 AI辅助编程)

Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot&#xff0c;它能根据上下文补全代码&#xff0c;快速生成常用…...

spring boot使用HttpServletResponse实现sse后端流式输出消息

1.以前只是看过SSE的相关文章&#xff0c;没有具体实践&#xff0c;这次接入AI大模型使用到了流式输出&#xff0c;涉及到给前端流式返回&#xff0c;所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...

可下载旧版app屏蔽更新的app市场

软件介绍 手机用久了&#xff0c;app越来越臃肿&#xff0c;老手机卡顿成常态。这里给大家推荐个改善老手机使用体验的方法&#xff0c;还能帮我们卸载不需要的app。 手机现状 如今的app不断更新&#xff0c;看似在优化&#xff0c;实则内存占用越来越大&#xff0c;对手机性…...