【Kafka】Windows+KRaft部署指南

news/2024/11/8 19:58:49 标签: kafka, windows, 3.9.0, KRaft

【Kafka】Windows+KRaft部署指南

  • 摘要
  • 本地环境说明
  • 官网
  • 快速开始
    • 修改config/kraft/server.properties
    • 初始化数据存储目录
    • 启动
  • 测试
    • 创建topic
    • 创建生产者
    • 创建消费者
  • FAQ
    • 输入行太长。命令语法不正确。
      • 问题描述
      • 解决方案
  • 参考资料

摘要

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。其核心组件包含ProducerBrokerConsumer,以及依赖的Zookeeper集群。其中Zookeeper集群是Kafka用来负责集群元数据的管理、控制器的选举等。

用过kafka的开发者应该知道,每次启动kafka服务时,都是需要先把Zookeeper启动,然后启动kafka,步骤相当繁琐。

Kafka在使用的过程当中,会出现一些问题。由于重度依赖Zookeeper集群,当Zookeeper集群性能发生抖动时,Kafka的性能也会收到很大的影响。因此,在Kafka发展的过程当中,为了解决这个问题,提供KRaft模式3.0+版本,来取消KafkaZookeeper的依赖。

Kafka是依赖于JDK的,需要先把java环境配置一下。

本地环境说明

依赖版本
JDK21
Windows11
Kafka3.9.0

官网

快速开始

修改config/kraft/server.properties

# 表示此节点,既是broker又可以当controller
process.roles=broker,controller
# 节点id,不重名即可
node.id=1
# controller竞争者,也就是controller将从它们之中诞生(这里的kafka1是刚刚设置的本机的域名解析,或者直接写localhost也行)
controller.quorum.voters=1@localhost:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
# 监听地址(也就是客户端连接时访问的地址)
advertised.listeners=PLAINTEXT://localhost:9092
controller.listener.names=CONTROLLER
# kafka数据存放地址
log.dirs=data

初始化数据存储目录

# 生成一个uuid,后面需要用
.\bin\windows\kafka-storage random-uuid
# 示例如下:
yc9oGK5tQhakA90-ODilCA

# 格式化存储
.\bin\windows\kafka-storage format -t yc9oGK5tQhakA90-ODilCA -c ./config/kraft/server.properties

启动

# 格式化完毕后,可以启动节点了(守护进程启动加-daemon 参数)。
.\bin\windows\kafka-server-start ./config/kraft/server.properties

测试

创建topic

kafka-topics --create --topic kafka-test --partitions 1 --replication-factor 1 --bootstrap-server 127.0.0.1:9092

创建生产者

kafka-console-producer --bootstrap-server 127.0.0.1:9092 --topic kafka-test

在这里插入图片描述

创建消费者

kafka-console-consumer --bootstrap-server 127.0.0.1:9092 --topic kafka-test

在这里插入图片描述

FAQ

输入行太长。命令语法不正确。

问题描述

Windows 下运行 Kafka 时有可能报错输入行太长。命令语法不正确。出现这个问题的原因是 Windows 命令长度最长支持 8192 个字符,Kafka 的启动脚本中有命令拼接 classpath 变量,classpath 的内容是每个 jar 包的绝对路径拼接的字符串。当 Kafka 的位置比较深,也就是目录比较长的时候,classpath 的长度就会超长。之前版本的 Kafka 没有问题是因为新版本的 Kafkalibs 目录下的 jar 包数量增加了,也就是说之前版本也是存在这个隐患的。

解决方案

既然知道了是 classpath 过长引起的,那么缩短其长度就可以了。

在使用 IDEA 开发时已经遇到过这种情况了,IDEA 给出了三个方案:

  • JAR manifest
  • classpath file
  • @argfile(Java 9+)

由于 Kafka 的位置是不固定,所以需要动态生成 classpath,所以选择了 @argfile 方案。

  • 指定 classpath 时直接指定文件夹,kafka-run-class.bat 需要做以下修改:
  • 注释或删除 93 ~ 95 行,这三行的作用是拼接 classpath
  • 注释或删除 174 ~ 177 行,这四行的作用是判断 classpath 是否定义,如果未定义则退出。因为要直接指定目录了,所以不需要 classpath 了。
  • 修改179行,将%CLASSPATH%替换成%BASE_DIR%\libs\*

    这一行不能注释,因为注释还是会报输入行太长

参考资料

  • KRaft单机、集群部署Kafka

http://www.niftyadmin.cn/n/5744371.html

相关文章

挑选BPM软件秘籍,揭秘六大必备功能

BPM软件助力企业优化管理,需具备流程设计、角色权限定义、数据管理、系统集成、监测分析、定制扩展等功能。BPM管理员作用关键,低代码平台如ZohoCreator可简化这些工作。 您选择的任何业务流程管理软件都应该为您的管理员提供以下功能: 1、流…

数组类算法【leetcode】

704. 二分查找 2024.11.06 题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。力扣题目链接 二分查找 用…

实现 Nuxt3 预览PDF文件

安装必要的库,这里使用PDF.js库 npm install pdfjs-dist --save 为了解决跨域问题,在server/api 下 创建一个请求api, downloadFileByProxy.ts import { defineEventHandler } from h3;export default defineEventHandler(async event >…

前端Web用户 token 持久化

用户 token 持久化 业务背景:Token的有效期会持续一段时间,在这段时间内没有必要重复请求token,但是pinia本身是基于内存的管理方式,刷新浏览器Token会丢失,为了避免丢失需要配置持久化进行缓存 基础思路&#xff1a…

【数据结构】构造函数和析构函数

在一个宁静的小镇上,有一座神奇的玩具工厂。这个工厂每天都能制造出各种有趣的玩具。玩具工厂有两个重要的角色:一位是“玩具制造师”,另一位是“玩具清理师”。他们的工作就像我们在编程中使用的构造函数和析构函数。 ### 玩具制造师&#…

基于Springboot的学生宿舍管理系统的设计与实现-计算机毕设 附源码 26991

基于Springboot的学生宿舍管理系统的设计与实现 摘 要 学生宿舍管理系统在高校管理中具有重要的作用,为提高宿舍管理效率和服务质量,本文基于Springboot框架开发了一款学生宿舍管理系统。该系统主要分为管理员、学生用户和宿管用户三类角色,每…

计算机网络——SDN

分布式控制路由 集中式控制路由

搭子小程序定制开发:全新找搭子之旅

在快节奏生活下,年轻人的社交渠道逐渐减少,为了能够获得志同道合的好友,满足社交需求,找搭子成为了当下年轻人的社交潮流,不管出去旅游、拍照、吃饭、打游戏等都可以寻求搭子,获得更高的情绪价值体验。 随…