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

【Kafka】Windows+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

官网

  • 下载页面: https://kafka.apache.org/downloads
    在这里插入图片描述
  • 3.9.0下载地址: https://downloads.apache.org/kafka/3.9.0/kafka_2.13-3.9.0.tgz

快速开始

修改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.kler.cn/a/389236.html

相关文章:

  • 一文简单了解Android中的input流程
  • vivo 游戏中心包体积优化方案与实践
  • IEC60870-5-104 协议源码架构详细分析
  • PostgreSQL中的COPY命令:高效数据导入与导出
  • 深入剖析【C++继承】:单一继承与多重继承的策略与实践,解锁代码复用和多态的编程精髓,迈向高级C++编程之旅
  • 【前端】深入浅出的React.js详解
  • python manage.py命令集
  • 【微服务知识】开源RPC框架Dubbo入门介绍
  • 关于word 页眉页脚的一些小问题
  • 【论文笔记】The Power of Scale for Parameter-Efficient Prompt Tuning
  • 【Python】爬虫通过验证码
  • Python自动化运维项目管理实践:从需求分析到项目交付
  • 基于Springboot+微信小程序的健康管理系统 (含源码数据库)
  • ​ Xilinx 的开发工具Vivado开发流程​
  • Android 如何实现不编译指定的apk,不加载系统应用
  • 【Hive sql 面试题】求出各类型专利top 10申请人,以及对应的专利申请数(难)
  • 猎板PCB2到10层数的科技进阶与应用解析
  • NodeJS中process.nextTick()详解
  • redis中常见的命令有哪些?
  • 【STL】priority_queue的使用和模拟实现
  • 无网络安装ionic和运行
  • 【专题】事务与并发控制
  • 计算机视觉基础:OpenCV库详解
  • 【后端速成Vue】computed计算属性
  • Ardusub中添加自定义控制器
  • 计算机网络-1.2分层结构