Kafka入门-集群基础环境搭建(JDK/Hadoop 部署 + 虚拟机配置 + SSH 免密+Kafka安装启动)

Kafka

简介

传统定义:Kafka是一个分布式的基于发布/订阅模式的消息队列,应用于大数据实时处理领域。

Kafka最新定义:Apache Kafka是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序

Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications

消息队列的应用场景:

  • 缓冲/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。比如双十一用户发送访问的请求速度和系统处理的速度也是不一样的,就需要消息队列作为缓冲。
  • 解耦:允许独立的扩展或修改两边的处理过程,只要保证他们遵守同样的接口约束。
  • 异步通信:允许用户把一个消息放入队列,但是不立即处理它,在需要的时候再进行处理。

消息队列的两种模式:

  • 点对点模式:一个生产者对应一个消费者,进行点对点的传输消息,消费者主动拉取数据,消息消费之后消除消息。
  • 发布/订阅模式:相当于可以分成多个不同的主题的消息,消费者只会接受自己想要的主题内的消息,消费者消费数据后不删除数据,每个消费者之间相互独立,都可以消费到消息。

基本结构

Kafka由以下几个部分构成

  • 生产者:向kafka发送消息的客户端称作生产者
  • 消费者:向Kafka获取消息的客户端称作消费者
  • Broker:每一台Kafka服务器称之为Broker,一个集群由多个Broker组成
  • Topic:主题,类似于存储消息的队列,生产者和消费者根据对应主题进行发送、接收消息
  • Partition:分区,每一个Topic主题可以对应多个分区,也就是将一个大的Topic拆分成几个小的partiton,可以存储到不同的Broker上
  • Replica:副本,为了让集群中节点发送故障时,该节点上的分区数据不丢失,每一个Topic的每个分区都有副本,副本之间存在一个Leader(生产者发送消息、消费者消费消息都是通过Leader)和若干Follower(实时从Leader同步数据,保存和Leader数据的同步)
  • Controller:Controller可以看作Broker的领导者,用于管理和协调Kafka集群,比如管理集群中所有分区的状态,当副本的Leader所在节点崩溃,Controller会发起选举。

环境配置

配置虚拟机

首先创建一个虚拟机,并克隆三台虚拟机
在这里插入图片描述

登录101虚拟机,进行配置端口

vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改IPADDR

IPADDR="192.168.27.101"

配置主机名

vim	/etc/hostname

修改主机名为centos101

centos101

然后reboot

reboot

其余两台虚拟机按照101的配置进行设置

安装JDK

在101虚拟机安装JDK

首先查看虚拟机有没有自带的jdk,如果有需要先删除再安装jdk

rpm -qa | grep -i java

获取jdk安装包

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

解压安装包

tar -zxvf jdk-8u131-linux-x64.tar.gz 

配置环境变量

sudo vim /etc/profile.d/my_env.sh

在my_env.sh中输入以下内容

#JAVA_HOME
export JAVA_HOME=/mydata/jdk/jdk1.8.0_131
export PATH=$PATH:$JAVA_HOME/bin

执行source命令

source /etc/profile

查看jdk是否安装完毕

java -version

安装Hadoop

使用华为云开源镜像获取安装包

https://mirrors.huaweicloud.com/home

wget https://mirrors.huaweicloud.com/apache/hadoop/core/hadoop-3.1.3/hadoop-3.1.3.tar.gz

解压安装包

tar -zxvf hadoop-3.1.3.tar.gz 

配置环境变量

sudo vim /etc/profile.d/my_env.sh

加入Hadoop的环境变量

#HADOOP_HOME
export HADOOP_HOME=/mydata/hadoop/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

执行source

source /etc/profile

查看是否安装完成

hadoop version

配置其余两台虚拟机

scp安全拷贝命令将安装好的jdk和hadoop拷贝到102和103

scp -r jdk/ root@192.168.27.102:/mydata
scp -r hadoop/ root@192.168.27.102:/mydata

注意:rsync远程同步工具可以只对差异文件做更新,而scp是复制所有文件

xsync集群分发脚本可以循环复制文件所有的节点的相同目录下

为了使用xsync,需要建立一个脚本来实现,脚本需要放在声明了全局变量的路径下,因此修改之前创建的my_env.sh,将/mydata/bin声明全局变量

#MYDATA_HOME
export MYDATA_HOME=/mydata
export PATH=$PATH:$MYDATA_HOME/bin

[root@centos101 mydata]# source /etc/profile
[root@centos101 mydata]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/mydata/jdk/jdk1.8.0_131/bin:/mydata/jdk/jdk1.8.0_131/bin:/mydata/hadoop/hadoop-3.1.3/bin:/mydata/hadoop/hadoop-3.1.3/sbin:/mydata/jdk/jdk1.8.0_131/bin:/mydata/hadoop/hadoop-3.1.3/bin:/mydata/hadoop/hadoop-3.1.3/sbin:/mydata/bin

可以看到现在已经加入成功,进入/mydata/bin,新建一个xsync脚本

[root@centos101 mydata]# cd bin/
[root@centos101 bin]# ls
[root@centos101 bin]# vim xsync
#!/bin/bash#1. 判断参数个数
if [ $# -lt 1 ]
thenecho Not Enough Arguement!exit;
fi#2. 遍历集群所有机器
for host in 192.168.27.101 192.168.27.102 192.168.27.103
doecho ====================  $host  ====================#3. 遍历所有目录,挨个发送for file in $@do#4. 判断文件是否存在if [ -e $file ]then#5. 获取父目录pdir=$(cd -P $(dirname $file); pwd)#6. 获取当前文件的名称fname=$(basename $file)ssh $host "mkdir -p $pdir"rsync -av $pdir/$fname $host:$pdirelseecho $file does not exists!fidone
done

配置脚本可执行权限

chmod 777 xsync

然后就可以直接使用xsync将新增的文件同步到其他主机,比如刚刚在101上面建立的/mydata/bin

xsync bin/

如果遇到rsync未找到命令可以先安装,同步和被同步的主机都需要安装这个命令

yum -y install rsync

完成之后将配置环境变量的文件my_env.sh同步到其他主机

进入到my_env.sh文件所在目录下执行命令

xsync my_env.sh

同步完成后,将刚同步的主机执行source命令即可

配置SSH免密

首先先ssh 访问别的主机,生成.ssh隐藏文件

ssh 192.168.27.102

然后可以在/root目录下,通过ls -al查看隐藏文件

ls -al

在这里插入图片描述

进入.ssh,生成公钥和私钥,输入命令执行三次回车即可

ssh-keygen -t rsa

可以查看公钥

cat id_rsa.pub

将公钥拷贝给其他主机

ssh-copy-id 192.168.27.102

这样就可以不需要密码访问别的主机了(自己也可以配置一下免密访问自己)

可以用xsync命令来测试一下,如果不需要使用密码就可以同步文件到其他主机则设置成功

安装Kafka

首先在官网下载Kafka

https://kafka.apache.org/downloads

然后将安装包放入/mydata/kafka

如果需要直接拖入文件到虚拟机,可以提前执行命令下载相应组件

yum -y install lrzsz
[root@localhost kafka]# yum -y install lrzsz

解压压缩包

tar -zxvf kafka_2.12-3.0.0.tgz

进入解压后的文件夹,配置kafka信息

[root@localhost kafka]# cd kafka_2.12-3.0.0
[root@localhost kafka_2.12-3.0.0]# ls
bin  config  libs  LICENSE  licenses  NOTICE  site-docs
[root@localhost kafka_2.12-3.0.0]# cd config

注意:如果发现vim:未找到命令情况

[root@localhost config]# vim server.properties 
-bash: vim: 未找到命令

显示未找到命令,则查看有什么安装包没有安装

[root@localhost config]# rpm -qa | grep vim
vim-minimal-7.4.629-7.el7.x86_64

正常情况下应该有以下安装包

[root@localhost config]# rpm -qa | grep vim
vim-minimal-7.4.629-8.el7_9.x86_64
vim-common-7.4.629-8.el7_9.x86_64
vim-filesystem-7.4.629-8.el7_9.x86_64
vim-enhanced-7.4.629-8.el7_9.x86_64

将缺少的安装包安装上即可

yum -y install vim-enhanced

执行vim命令,查看server.properties

vim server.properties 

其中有几个地方需要注意

  • broker.id=0 相当于kafka在集群中的唯一标识,不同kafka必须要不同,不能重复

  • log.dirs=/tmp/kafka-logs 日志的路径默认是在临时文件夹下,要进行修改,将文件放到kafka的安装目录中

    log.dirs=/mydata/kafka/datas
    
  • zookeeper.connect=localhost:2181 配置zookeeper的链接地址,后面加/kafka是为了规范管理kafka在zk中存储的路径

    zookeeper.connect=192.168.27.101:2181,192.168.27.102:2181,192.168.27.103:2181/kafka
    

将kafka文件夹分发到其他主机

xsync kafka/

然后修改其他主机的brokerid,依次设置为0,1,2

最后设置环境变量

vim /etc/profile.d/my_env.sh
#KAFKA_HOME
export KAFKA_HOME=/mydata/kafka/kafka_2.12-3.0.0
export PATH=$PATH:$KAFKA_HOME/bin

修改完之后执行source命令

source /etc/profile

分发到其他主机上,其他主机也需要执行source命令

xsync /etc/profile.d/my_env.sh

启动Kafka

先启动zk,然后在启动Kafka,zk启动使用之前在Zookeeper中编写的zk.sh脚本

zk.sh start

启动kafka,三台主机都要执行

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

查看是否启动成功

[root@centos101 kafka_2.12-3.0.0]# jps
1954 QuorumPeerMain
3605 Kafka
3641 Jps

为了方便集群控制,编写脚本

#!/bin/bash
case $1 in
"start")for i in 192.168.27.101 192.168.27.102 192.168.27.103doecho "-------------启动 $i kafka-------------"ssh $i "/mydata/kafka/kafka_2.12-3.0.0/bin/kafka-server-start.sh -daemon /mydata/kafka/kafka_2.12-3.0.0/config/server.properties"done
;;
"stop")for i in 192.168.27.101 192.168.27.102 192.168.27.103doecho "-------------停止 $i kafka-------------"ssh $i "/mydata/kafka/kafka_2.12-3.0.0/bin/kafka-server-stop.sh"done
;;
esac	

在/mydata/bin(自己配的具备环境变量的目录,专门存放脚本文件)下新建kf.sh,写入脚本

vim kf.sh

配置权限

chmod 777 kf.sh
[root@centos101 bin]# ll
总用量 12
-rwxrwxrwx. 1 root root 480 718 15:50 kf.sh
-rwxrwxrwx. 1 root root 766 714 15:10 xsync
-rwxrwxrwx. 1 root root 674 717 14:40 zk.sh

注意:如果要关闭时,要先关闭Kafka再关闭Zookeeper,并且要确认kafka已经完全关闭。

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

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

相关文章

【仿生机器人】建模—— 图生3D 的几个办法

两件事! 第一件: 强如 Gemini,在多模态和三维空间的理解中,如果不微调去做下游应用,直接 Zero-shot 的 效果是很差的 好处是有多视角图生3D,效果还可以,但是也没有很精细,&#xf…

简约商务通用宣传年终总结12套PPT模版分享

IOS风格企业宣传PPT模版,年终工作总结PPT模版,简约精致扁平化商务通用动画PPT模版,素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df

modelscope下载gguf格式模型

modelscope下载gguf格式模型 ollama加载模型 模型地址 https://www.modelscope.cn/models/okwinds/CompassJudger-1-7B-Instruct-GGUF-V3-LOT pip install modelscope modelscope download --modelokwinds/CompassJudger-1-7B-Instruct-GGUF-V3-LOT --include "CompassJ…

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…

解决Excel词典(xllex.dll)文件丢失或损坏问题的终极指南:从基础到高级修复技巧

在日常使用Microsoft Excel的过程中&#xff0c;许多用户可能会遇到一个令人沮丧的问题&#xff1a;Excel词典文件xllex.dll丢失或损坏。这不仅会影响到Excel的正常功能&#xff0c;还可能导致数据处理效率的降低。在这篇文章中&#xff0c;我们将深入探讨这一问题的原因&#…

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…

第11篇:数据库中间件系统可配置化设计与动态规则加载机制

11.1 引言&#xff1a;为什么需要可配置化&#xff1f; 数据库中间件在企业级环境中往往需要支持多租户、多业务场景、多数据库后端&#xff0c;因此固定逻辑会迅速过时或僵化。 为了提升 灵活性、可扩展性、部署效率&#xff0c;中间件系统亟需实现&#xff1a; ✅ 高度可配置…

C++信号处理程序解析与改进

这个程序演示了如何使用sigaction来捕获和处理信号&#xff08;特别是SIGINT&#xff0c;即CtrlC&#xff09;。以下是关键点和潜在问题的分析&#xff1a; 程序功能 信号捕获&#xff1a;注册自定义处理函数handler来捕获信号2&#xff08;SIGINT&#xff0c;通常由CtrlC触发…

Go爬虫开发学习记录

Go爬虫开发学习记录 基础篇&#xff1a;使用net/http库 Go的标准库net/http提供了完善的HTTP客户端功能&#xff0c;是构建爬虫的基石&#xff1a; package mainimport ("fmt""io""net/http" )func fetchPage(url string) string {// 创建自定…

ubuntu 系统分区注意事项

ubuntu 系统分区大小&#xff0c;注意事项&#xff1a; 安装ubuntu系统时&#xff0c;需要进行分区&#xff0c;手动分区时&#xff0c;有一点需要注意。一开始我也没有注意&#xff0c;长时间使用后才发现的问题。 需要注意一点&#xff0c;如果不对 /usr 进行单独分区&…

AI知识库调用全攻略:四种实战方法与技术实现

本文详细解析AI如何调用知识库解决实际问题&#xff0c;涵盖四种核心调用方式&#xff08;直接检索匹配、向量检索生成、工具调用知识库、多轮对话知识库&#xff09;&#xff0c;附具体业务样例与技术实现步骤&#xff0c;最后总结常见问题解决方案&#xff0c;助你快速搭建智…

WebRTC(一):整体架构

架构总览 模块划分 媒体采集模块 使用浏览器 API&#xff1a;getUserMedia()。采集摄像头&#xff08;video&#xff09;、麦克风&#xff08;audio&#xff09;。通过 MediaStreamTrack 管理单轨道。 媒体处理与编解码 编码器&#xff08;发送端&#xff09;&#xff1a; …

商品中心—1.B端建品和C端缓存的技术文档二

大纲 1.商品中心的专业术语 2.商品中心的基本业务系统 3.商品中心整体架构设计以及运行流程 4.商品B端—商品编码生成逻辑 5.商品B端—商品核心数据模型 6.商品B端—转换建品请求数据为商品模型数据 7.商品B端—商品建品时商品编号补全与审核配置 8.商品B端—商品审核前…

网络之交换机

定义与作用 交换机是一种为所连接的IT设备提供网络通信的设备&#xff0c;主要作用是转发传输数据&#xff0c;实现网络设备之间的通信互联&#xff0c;还能对网络进行分段和隔离&#xff0c;划分多个虚拟网段&#xff0c;提高网络安全性&#xff0c;以及对不同端口、用户和应用…

AI不会杀死创作,但会杀死平庸

作为一个敲了8年Java代码的普通本科程序员&#xff0c;日常主要泡在会议后台管理系统的开发里。从2023年底被朋友拽着试了第一把AI工具到现在&#xff0c;电脑手机上的AI软件比外卖App还多——写代码的Copilot、画时序图的工具、聊天的ChatGPT、Deepseek&#xff0c;基本市面上…

Golang——8、协程和管道

协程和管道 1、协程1.1、进程、线程和协程1.2、goroutine的使用以及sync.WaitGroup1.3、启动多个协程1.4、设置Golang并行运行的时候占用的cup数量1.5、goroutine统计素数 2、管道2.1、管道的操作2.2、协程和管道协同2.3、单向管道2.4、多路复用之select2.5、解决协程中出现的异…

深入理解Python内置模块及第三方库的使用与管理

Python 内置模块与第三方库 在 Python 编程中&#xff0c;模块和库是帮助开发者高效实现各种功能的基础工具。Python 提供了丰富的内置模块以及第三方库&#xff0c;能够支持从基础的文件操作到复杂的数据分析和机器学习等任务。本篇文章将深入介绍 Python 的内置模块与第三方…

二分查找-P2249 【深基13.例1】查找

文章目录 参考代码二分标准模板 题目来源-洛谷网 参考代码 #include<bits/stdc.h> using namespace std; const int N 1e65; int m,n,a[N],b; int find(int t) {int l1,rn;while(l<r){int mid(lr)/2;//防止溢出 mid l (r-l) /2 ;if(a[mid]>t) rmid;//中间值比…

手写muduo网络库(一):项目构建和时间戳、日志库

引言 本文作为手写 muduo 网络库系列开篇&#xff0c;聚焦项目基础框架搭建与核心基础工具模块设计。通过解析 CMake 工程结构设计、目录规划原则&#xff0c;结合时间戳与日志系统的架构&#xff0c;为后续网络库开发奠定工程化基础。文中附完整 CMake 配置示例及模块代码。 …

NLP学习路线图(三十二): 模型压缩与优化

一、 核心压缩与优化技术详解 1. 知识蒸馏:智慧的传承(Knowledge Distillation, KD) 核心思想:“师授徒业”。训练一个庞大、高性能但笨重的“教师模型”(Teacher Model),让其指导训练一个轻量级的“学生模型”(Student Model)。学生模型学习模仿教师模型的输出行为(…