【Kafka】Linux+KRaft集群部署指南

embedded/2025/1/17 6:24:09/

【Kafka】Linux+KRaft集群部署指南

  • 摘要
  • 本地环境说明
  • 官网
  • 准备工作
  • 快速开始
    • 修改config/kraft/server.properties
    • 初始化数据存储目录
  • 新节点加入集群
  • 启动
  • 停止
  • 测试
    • 创建topic
    • 创建生产者
    • 创建消费者

摘要

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

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

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

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

本地环境说明

依赖版本
JDK21
LinuxRed Hat Enterprise Linux release 8.0 (Ootpa)
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
  • 官方文档: https://kafka.apache.org/documentation/

准备工作

sudo sh -c 'cat >> /etc/hosts << EOF
10.34.88.110 kafka1
10.34.88.111 kafka2
10.34.88.112 kafka3
EOF'

快速开始

kraftserverproperties_34">修改config/kraft/server.properties

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

advertised.listeners参数里面的host一定要是其它节点能够访问通的地址,不要写localhost等回环地址,否则无法成功加入集群

初始化数据存储目录

cd /opt/elk/kafka_2.13-3.9.0
# 生成uuid,后面需要用
./bin/kafka-storage.sh random-uuidKAFKA_CLUSTER_ID=n7M-O9yUTi6DqJoFbopyUg
KAFKA1_UUID=DdF3W7v0RviSZj7k4H9yJw
KAFKA2_UUID=XZDIN4GzScmnfhjsYwMt3g
KAFKA3_UUID=HwsQUApfSbenMYBWS7j_-A
# 每个节点都需要运行
# If you would like the formatting process to fail if a dynamic quorum cannot be achieved, format your controllers using the --feature kraft.version=1. (Note that you should not supply this flag when formatting brokers -- only when formatting controllers.)
./bin/kafka-storage.sh format --feature kraft.version=1 --cluster-id ${KAFKA_CLUSTER_ID} \--initial-controllers "1@kafka1:9093:${KAFKA1_UUID},2@kafka2:9093:${KAFKA2_UUID},3@kafka3:9093:${KAFKA3_UUID}" \--config config/kraft/server.properties

新节点加入集群

./bin/kafka-storage.sh format --feature kraft.version=1 --cluster-id ${KAFKA_CLUSTER_ID} --config config/kraft/server.properties --no-initial-controllers

启动

# 格式化完毕后,可以启动节点了(守护进程启动加-daemon 参数)。
mkdir -pv logs
nohup ./bin/kafka-server-start.sh ./config/kraft/server.properties >logs/server.log 2>&1 & echo \$! > kafka.pid
tail -fn200 logs/server.log

停止

kill -9 \$(cat kafka.pid)

测试

创建topic

./bin/kafka-topics.sh --create --topic kafka-test --partitions 1 --replication-factor 1 --bootstrap-server 127.0.0.1:9092

创建生产者

./bin/kafka-console-producer.sh --bootstrap-server 127.0.0.1:9092 --topic kafka-test

在这里插入图片描述

创建消费者

./bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic kafka-test --from-beginning

在这里插入图片描述


http://www.ppmy.cn/embedded/154580.html

相关文章

如何在前端给视频进行去除绿幕并替换背景?-----Vue3!!

最近在做这个这项目奇店桶装水小程序V1.3.9安装包骑手端V2.0.1小程序前端 最近&#xff0c;我在进行前端开发时&#xff0c;遇到了一个难题“如何给前端的视频进行去除绿幕并替换背景”。这是一个“数字人项目”所需&#xff0c;我一直在冥思苦想。终于有了一个解决方法…

ADC(Analog-to-digital converter)模拟-数字转换器

ADC简介 ADC&#xff08;Analog-to-Digital Converter&#xff09;&#xff0c;即模拟-数字转换器&#xff0c;是一种将模拟信号转换成数字信号的电子设备。它在现代电子系统中扮演着至关重要的角色&#xff0c;广泛应用于传感器信号处理、通信系统、医疗设备、工业自动化等多…

RabbitMQ(四)

SpringBoot整合RabbitMQ SpringBoot整合1、生产者工程①创建module②配置POM③YAML④主启动类⑤测试程序 2、消费者工程①创建module②配置POM③YAML文件内配置&#xff1a; ④主启动类⑤监听器 3、RabbitListener注解属性对比①bindings属性②queues属性 SpringBoot整合 1、生…

解决 Mac 系统上的 node-sass 问题

解决 Mac 系统&#xff08;尤其是 M1/M2&#xff09;上的 node-sass 问题 问题描述 在 Mac 系统上使用 node-sass 时&#xff0c;经常会遇到以下错误&#xff1a; Node Sass does not yet support your current environment: OS X 64-bit with Unsupported runtime (108)或者…

java 迪米特法则,原理、思想、工作流程、实现细节、稳定性、优缺点、应用场景等

迪米特法则&#xff08;Law of Demeter&#xff0c;LoD&#xff09;&#xff0c;也被称为“最少知识原则”&#xff0c;是一种指导面向对象设计的原则&#xff0c;旨在减少对象之间的耦合度。以下是对迪米特法则的详细解析。 1. 定义 迪米特法则指出&#xff1a;一个对象应该…

鸿蒙中选择地区

1.首页ui import { CustomDialogExampleSelectRegion } from ./selectRegion/SelectRegionDialog;Entry Component struct Index {State selectedRegion: string 选择地区// 地区dialogControllerSelectRegion: CustomDialogController | null new CustomDialogController({b…

栈算法篇——LIFO后进先出,数据与思想的层叠乐章(下)

文章目录 前言第一章&#xff1a;比较含退格的字符串1.1 题目链接&#xff1a;https://leetcode.cn/problems/backspace-string-compare/description/1.2 题目分析&#xff1a;1.3 思路讲解&#xff1a;1.4 代码实现&#xff1a; 第二章&#xff1a;基本计算器||2.1 题目链接&a…

期权懂|场内期权合约行权价格是如何设定制度的?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 场内期权合约行权价格是如何设定制度的&#xff1f; 场内期权合约的行权价格是期权合约中的一个关键要素&#xff0c;它决定了期权买方在期权到期日或之前买入&#xff08;对于…