shell案例之一键部署kafka

Shell案例之一键部署kafka

一、案例问题

(1)Kafka是用Java编写的,需要配置jdk环境变量

(2)Kafka配置文件数目多

(3)命令安装繁琐

二、案例分析:

(1)检查Java环境

(2)下载并解压kafka

(3)设置环境变量

(4)启动Zookeeper和kafka

(5)验证启动是否成功

三、流程图:

四、案例实现:

(1)首先配置Java环境:

下载地址:Apache Kafka

选择需要的版本下载到本地,上传到虚拟机(wget拉取速度慢)

通过wget下载到本地,解压到/usr/local/jdk/文件下

(2)配置环境变量

打开/etc/profile在文件最后填写如下内容

export JAVA_HOME=/usr/local/jdk/jdk1.8.0_271

export PATH=$JAVA_HOME/bin:$PATH

当看到输入命令# which java,得到如下输出证明jdk环境配置完成

(3)编写一键部署脚本:

[root@localhost shell]# cat 1.sh

#!/bin/bash

installDir="/opt/module/kafka"

kafka_version="1.1.1"

scala_version="2.11"

#检查Java环境

if [ -z "$JAVA_HOME" ] || [ ! -f "$JAVA_HOME/bin/java" ]; then

  echo "JAVA_HOME未设置或无效,请安装JDK 1.8并设置Java环境变量再来执行此脚本"

  exit 1

fi

#检查并创建安装目录

if [ ! -d "${installDir}" ]; then

  sudo mkdir -p "${installDir}"

  if [ $? -eq 0 ]; then

    echo "安装目录${installDir}已创建"

  else

    echo "请确保您有足够的权限来创建目录,请增加权限后再次执行"

    exit 1

  fi

fi

#下载kafka压缩包

if [ ! -f /tmp/kafka_$scala_version-$kafka_version.tgz ]; then

  wget https://downloads.apache.org/kafka/$kafka_version/kafka_$scala_version-$kafka_version.tgz -P /tmp/

  if [ $? -eq 0 ]; then

    echo "kafka_$scala_version-$kafka_version.tgz下载成功"

  else

    echo "kafka_$scala_version-$kafka_version.tgz下载失败,请重试或手动下载到/tmp目录下再次执行"

    echo "下载地址:https://archive.apache.org/dist/kafka/$kafka_version/kafka_$scala_version-$kafka_version.tgz"

    exit 1

  fi

fi

#解压kafka压缩包

tar -zxvf /tmp/kafka_$scala_version-$kafka_version.tgz -C $installDir

if [ $? -eq 0 ]; then

  echo "/tmp/kafka_$scala_version-$kafka_version.tgz解压成功"

else

  echo "/tmp/kafka_$scala_version-$kafka_version.tgz解压失败,请查看异常信息后重试"

  exit 1

fi

#设置kafka环境变量

if [ -z "$KAFKA_HOME" ]; then

  echo >> ~/.bashrc

  echo '#KAFKA_HOME' >> ~/.bashrc

  echo "export KAFKA_HOME=$installDir/kafka_$scala_version-$kafka_version" >> ~/.bashrc

  echo 'export PATH=$PATH:$KAFKA_HOME/bin' >> ~/.bashrc

else

  echo "KAFKA_HOME已有设置:$KAFKA_HOME"

Fi

# 备份原始配置文件

cp "$installDir/kafka_2.11-1.1.1/config/server.properties" "$installDir/kafka_2.11-1.1.1/config/server.properties.bak"

#修改kafka配置文件

ip_addr=$(ip addr | grep 'inet ' | awk '{print $2}'| tail -n 1 | grep -oP '\d+\.\d+\.\d+\.\d+')

sed -i "s|#listeners=PLAINTEXT://:9092|listeners=PLAINTEXT://$ip_addr:9092|" "$installDir/kafka_$scala_version-$kafka_version/config/server.properties"

if [ $? -eq 0 ]; then

  echo "kafka配置文件修改成功"

else

  echo "kafka配置文件修改失败,请查看异常信息后重试"

  exit 1

fi

echo "kafka下载、安装、配置成功"

exit 0

五、实现解析:

确定完jdk环境后,运行一键部署脚本

1.检查并创建安装目录:

◎检查指定的安装目录是否存在,若不存在使用mkdir -p 创建

◎若创建成功,输出提示信息,否则,提示用户增加权限后重新执行

2.下载kafka压缩包:

◎检查/tmp目录下是否已经存在kafka压缩包,如果不存在使用wget下载

◎如果下载成功,输出提示信息,否则提示用户重试或手动下载

3.解压kafka压缩包:

◎使用tar命令将kafka压缩包解压到指定的安装目录

◎如果解压成功,输出提示信息,否则,提示用户查看异常信息后重试

4.设置kafka环境变量

◎检查KAFKA_HOME环境变量是否已经设置

◎若未设置,则将kafka的安装路径添加到~/.bashrc文件中,并更新PATH变量

◎若已经设置,输出当前的KAFKA_HOME值

5.修改kafka配置文件

◎获取主机的IP地址(最后一个匹配的IP地址)

◎使用sed命令修改server.properties文件中的listeners配置,将其设置为PLAINTEXT://9092

◎如果修改成功,输出提示信息,否则,提示用户查看异常信息后重试

下面是运行过程:


6.进入安装目录:

7.启动Zookeeper和kafka

六、测试结果:

(1)通过jps命令查看Java进程

(2)查看端口已被监听,启动成功

(3)测试创建一个topic

#移动工作目录

[root@localhost kafka]# cd /opt/kafka/bin

#创建topic

[root@localhost bin]# ./kafka-topics.sh --create --zookeeper 192.168.110.153:2181 --replication-factor 1 --partitions 1 --topic topic1

Created topic "topic1".

#查看topic信息

[root@localhost bin]# ./kafka-topics.sh --describe --zookeeper 192.168.110.153:2181 --topic topic1

Topic:topic1    PartitionCount:1        ReplicationFactor:1     Configs:

        Topic: topic1   Partition: 0    Leader: 0       Replicas: 0     Isr: 0

#启动生产者控制台

[root@localhost bin]# ./kafka-console-producer.sh --broker-list 192.168.110.153:9092 --topic1

>test

>123456

#启动消费者控制台(新开一个窗口)

[root@localhost bin]#  ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic yahei --from-beginning

test

123456

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

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

相关文章

elementUI,设置日期,只能选择过去的和今天的日期

在 el-date-picker 组件中加&#xff1a;:picker-options"pickerOptions" <el-form-item label"票据生成日期&#xff1a;"> <el-date-picker v-model"date1" type"daterange" range-separator"至" value-format&…

chatgpt搭建大模型技术知识解读与总结

搭建大型语言模型&#xff08;如ChatGPT&#xff09;的技术知识涉及多个领域&#xff0c;包括机器学习、自然语言处理&#xff08;NLP&#xff09;、深度学习、数据处理等。下面是一些关键概念和步骤的总结&#xff1a; ### 1. **基础知识** #### a. **自然语言处理 (NLP)** …

基于Qt/QChart实现折线图和散点图的绘制示例程序解析

1. 项目简介 本文讲解的是一个基于Qt框架的QChart模块实现的折线图与散点图结合的绘制程序。程序通过自定义类LineChartWithGradient实现折线图、散点图以及带有渐变填充的区域图&#xff0c;最终形成一个美观的数据可视化效果。 2. 类构造函数 LineChartWithGradient::LineC…

天锐绿盾VS Ping32数据安全新选择,用户体验分享

随着网络威胁日益严重&#xff0c;如何保护个人和企业的网络安全成为了一个迫在眉睫的问题。天锐绿盾和Ping32作为市场上两款备受欢迎的网络安全软件&#xff0c;各自拥有独特的特点和功能。本文将对这两款软件进行深入的使用体验分享&#xff0c;帮助用户做出最佳选择。 防护性…

Docker 拉取镜像时配置可用镜像源(包含国内可用镜像源)

文章目录 写在前面一、Docker 官方源二、更换Docker 国内可用镜像源 &#xff08;推荐使用&#xff09;参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04&#xff0c;docker-27.3.1 一、Docker 官方源 打开 /etc/docker/daemon.json文件&#xff1a; sudo gedit …

3.Three.js程序基本框架结构和API说明

Three.js程序基本框架结构和API说明 1.基本框架结构代码 一个基本的Three.js程序&#xff0c;基本都需要设置场景、渲染器、相机、灯光等等通用操作&#xff0c;因而我们可以把Three.js基本程序框架进行整理&#xff0c;如下。其中&#xff0c;我们可以用Three.js提供的Orbit…

JAVA 中的克隆对象

克隆对象就是复制一个一模一样的对象&#xff0c;但是复制出来的对象和原对象不是同一个对象&#xff0c;是两个对象&#xff0c;只不过复制过来的对象和原对象除了内存地址之外&#xff0c;其它的属性一模一样。 在超类 Object 中有一个 clone() 方法&#xff1a; protected…

NC 单据模板自定义项 设置参照(自定义参照)

NC 单据模板自定义项 设置参照&#xff08;自定义参照&#xff09; 如图下图&#xff0c;NC 单据模板自定义项 设置参照&#xff1a; 1、选择需要设置参照的自定义字段&#xff0c;选择高级属性页签&#xff0c;在类型设置中&#xff0c;数据类型选择参照信息&#xff0c;即bd…

Ubuntu-Ubuntu22.04下Anacodna3的qmake和Qt的qmake冲突问题

Ubuntu22.04下Anacodna3的qmake和Qt的qmake冲突问题 一、问题描述二、原因分析三、解决办法 一、问题描述 Ubuntu22.04下Anacodna3的qmake和Qt的qmake冲突问题 zhyzhy-HP:~/Sources/mpv-examples/libmpv/qt$ make g -c -pipe -g -Wall -Wextra -D_REENTRANT -fPIC -DQT_WIDGET…

python 基础笔记(其实有点内容的)

print(math.gamma(n)) # 求 (n-1) 的阶乘 数值, 数值计算 format(50, “b”) bin(50)[2:]&#xff0c; 这个“b” 就代表的是 binary format(14, ‘b’) ------> ‘1110’ 去除 0b 去掉前导零 str(000001) # 只适合python2.x ‘1’ “00000001”.lstrip(“0”) # python3…

图论day62|拓扑排序理论基础、117.软件构建(卡码网)、最短路径之dijkstra理论基、47.参加科学大会(卡码网 第六期模拟笔试)

图论day62|拓扑排序理论基础、117.软件构建&#xff08;卡码网&#xff09;、最短路径之dijkstra理论基、47.参加科学大会&#xff08;卡码网 第六期模拟笔试&#xff09; 拓扑排序理论基础117.软件构建&#xff08;卡码网&#xff09;最短路径之dijkstra理论基础47.参加科学大…

AI控制工业机器人入门教程

简介 AI控制的工业机器人正在改变现代制造业的面貌。与传统的编程控制不同&#xff0c;AI使机器人能够通过感知环境、自主决策和学习不断优化自身的操作。这篇教程将介绍实现AI控制工业机器人的必要知识和技能&#xff0c;帮助读者从基础开始构建起AI控制机器人的理解和能力。…

OceanBase + DolphinScheduler,搭建分布式大数据调度平台的实践

本文整理自白鲸开源联合创始人&#xff0c;Apache DolphinScheduler PMC Chair&#xff0c;Apache Foundation Member 代立冬的演讲。主要介绍了DolphinScheduler及其架构、DolphinScheduler与OceanBase 的联合大数据方案。 DolphinScheduler是什么&#xff1f; Apache Dolphi…

【论文速看】DL最新进展20241016-低光增强、自动驾驶、图像分割、Diffusion

目录 【低光增强】【自动驾驶】【图像分割】【Diffusion】 【低光增强】 [ACCV 2024] LoLI-Street: Benchmarking Low-Light Image Enhancement and Beyond 论文链接&#xff1a;https://arxiv.org/pdf/2410.09831 代码链接&#xff1a;https://github.com/tanvirnwu/TriFuse …

Pytest+selenium UI自动化测试实战实例

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 今天来说说pytest吧&#xff0c;经过几周的时间学习&#xff0c;有收获也有疑惑&#xff0c;总之最后还是搞个小项目出来证明自己的努力不没有白费 环境准备 1 …

【MySQL】表的查询操作——SELECT

目录 1.select的基本使用 1.1.查询所有列 1.2.查询特定列 1.3.DISTINCT关键字的使用——查询不重复的年级 1.4.带条件的查询 1.5.排序查询结果 1.6.LIMIT的使用——限制返回的行数 1.7.组合使用 WHERE、ORDER BY 和 LIMIT 1.8.查询字段为表达式 1.9.为查询结果指定别名…

攻上云端,独立数据库OceanBase的生存之道

文&#xff5c;白 鸽 编&#xff5c;王一粟 对于很多盲盒爱好者来说&#xff0c;应该都使用过泡泡玛特的线上抽盒机系统&#xff0c;也会发现即使在新品上市时期&#xff0c;其整体抽盲盒的体验也都非常顺畅。 事实上&#xff0c;泡泡玛特的抽盒机系统在2023年经历了一次核心…

【公共祖先】二叉树专题

里面涉及多个plus题 前言1.二叉树的最近公共祖先2.二叉搜索树的最近公共祖先3.二叉树的最近公共祖先II4.二叉树的最近公共祖先III5.二叉树的最近公共祖先IV 前言 公共祖先这一类题目&#xff0c;难度不大&#xff0c;但是非常实用&#xff0c;也是面试问到概率比较大的一类题目…

飞牛NAS未识别到网卡

最新都说国产免费的飞牛NAS非常好用&#xff0c;再也不用搞黑群辉了。 以前也没有搞过NAS&#xff0c;刚好借着这个机会学习一下NAS产品。 在虚拟机上安装&#xff0c;安装还挺顺利&#xff0c;就打算在买来的 也试试&#xff0c;结果系统都安装成功了&#xff0c;但是提示“…

进程通信——管道

文章目录 1. 管道简介2. 无名管道2.1 简介2.2 系统调用2.2.1 无名管道的创建和关闭2.2.2 pipe()2.2.3 无名管道读写说明2.2.4 代码示例 3. 命名管道3.1 简介3.2 mkfifo3.3 对于读进程3.4 对于写进程3.5 代码示例3.5.1 写管道3.5.2 读管道 1. 管道简介 管道是Linux中进程间通信…