Linux 搭建 Kafka 环境 - 详细教程

目录

一. Kafka介绍

1. 应用场景

2. 版本对比

二. Kafka安装

1. 前置环境

(1)安装JDK

2. 软件安装

(3)环境变量配置

(3)服务启动

三. Console测试

基础命令

(1)列出Kafka集群中所有存在的主题

(3)创建一个新的主题

(3)删除主题

(4)描述主题

(5)启动生产者

(6)启动消费者

四. 注册系统服务

1. Systemd服务配置

2. Kafka服务控制


一. Kafka介绍

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,这使它作为企业级基础设施来处理流式数据非常有价值。

1. 应用场景

Kafka可以看作是一个能够处理消息队列的中间件,适用于实时的流数据处理,主要用于平衡好生产者和消费者之间的关系。

  • 生产者

生产者可以看作是数据源,可以来自于日志采集框架,如Flume,也可以来自于其它的流数据服务。当接收到数据后,将根据预设的Topic暂存在Kafka中等待消费。对于接收到的数据将会有额外的标记,用于记录数据的被消费【使用】情况。

  • 消费者

消费者即数据的使用端,可以是一个持久化的存储结构,如Hadoop,也可以直接接入支持流数据计算的各种框架,如Spark - Streaming。消费者可以有多个,通过订阅不同的Topic来获取数据。

2. 版本对比

Kafka的0.x和1.x可以看作是上古版本了,最近的更新也是几年以前,从目前的场景需求来看,也没有什么特别的理由需要使用到这两个版本了。

  • 2.x

在进行版本选择时,通常需要综合考虑整个数据流所设计到的计算框架和存储结构,来确定开发成本以及兼容性。目前2.x版本同样是一个可以用于生产环境的版本,并且保持着对Scala最新版本的编译更新。

  • 3.x

3.x是目前最新的稳定版,需要注意的是,Kafka的每个大版本之间的差异较大,包括命令参数以及API调用,所以在更换版本前需要做好详细的调查与准备,本文以3.x的安装为例。

二. Kafka安装

解压安装的操作方式可以适用于各种主流Linux操作系统,只需要解决好前置环境问题。

1. 前置环境

此前,运行Kafka需要预先安装Zookeeper。在Kafka 2.8.0版本以后,引入了Kraft(Kafka Raft)模式,可以使Kafka在不依赖外部Zookeeper的前提下运行。除此之外Kafka由Scala语言编写,需要JVM的运行环境。

(1)安装JDK

 Ubuntu/Debian:

sudo apt install openjdk-8-jdk

  CentOS/RedHat:

sudo yum install java-1.8.0-openjdk

安装完成后可以使用java-version命令验证【可省去环境变量配置】。

2. 软件安装

  • 下载Kafka ,链接如下:
# 离线下载安装包
https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz# 在线利用wget远程下载​
wget https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz
  • 解压安装  
tar -zvxf kafka_2.12-3.5.2.tgz

(3)环境变量配置

需要在环境变量中指定Kafka的安装目录以及命令文件所在目录,系统环境变量与用户环境变量配置其中之一即可。

/etc/profile 文件最下方添加如下两行命令--配置全局环境。

export KAFKA_HOME=/home/ygsj/Config_files/kafka_server/kafka_2.12-3.5.2
export PATH=$PATH:$KAFKA_HOME/bin

在文件结尾添加以上内容后执行source命令,使其立即生效。

source /etc/profile[Ubuntu/Debian] source ~/.bashrc[CentOS/RedHat] source ~/.bash_profile

执行后可以输入kafka,然后按Tab尝试补全【需要按多次】,如果出现命令列表则证明配置成功。

(3)服务启动

使用Kraft模式,则需要先进行集群初始化【即使是单个节点】,以下为操作步骤:

  • 目录下创建 kafka-logs文件夹

  • 修改配置文件

修改Kafka的/config/kraft/server.properties文件,更换其中的log.dirs目录指向创建目录,防止默认的/tmp被清空:

log.dirs=/home/ygsj/Config_files/kafka_server/kafka-logs

  • 创建Kafka的集群ID 
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"

调用 kafka-storage.sh 生成一个UUID

将获得的 UUID 放到 kafka_2.12-3.5.2/config/kraft/server.properties 文件中 如下:

相同文件内修改:远程连接开启 (红框内写服务器ip)---自己测试0.0.0.0无效

进入到Kafka的家目录后,执行以下命令 

bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties# bin/kafka-server-start.sh config/kraft/server.properties

 这种方式并不是后台运行,需要保证终端开启,等测试稳定后可以在后台执行或者注册为系统服务。 

三. Console测试

基础命令

(1)列出Kafka集群中所有存在的主题

kafka-topics.sh --list --bootstrap-server localhost:9092

--bootstrap-server localhost:9092 指定了Kafka集群的连接地址(在这里是本地的Kafka服务器)
如果集群中没有主题,命令不会返回任何内容
当你创建主题后,这条命令会返回集群中存在的主题列表

(3)创建一个新的主题

kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092

这条命令用于创建一个名为 my-topic 的新主题。
--create 指定了创建操作。
--topic my-topic 指定了要创建的主题名称。
--bootstrap-server localhost:9092 指定了Kafka集群的连接地址。
Created topic my-topic. 表示主题 my-topic 已成功创建。

(3)删除主题

kafka-topics.sh --delete  --topic my-topic --bootstrap-server localhost:9092

--delete: 指定要删除一个主题。
--topic my-topic: 指定要删除的主题名称是 my-topic。
--bootstrap-server localhost:9092: 指定Kafka集群的连接地址(在此是本地的Kafka服务器)。

(4)描述主题

 kafka-topics.sh --describe  --topic my-topic --bootstrap-server localhost:9092

获取指定主题 my-topic 的详细信息。
--describe 指定了描述操作。
--topic my-topic 指定了要描述的主题名称。
--bootstrap-server localhost:9092 指定了Kafka集群的连接地址。

(5)启动生产者

kafka-console-producer.sh --bootstrap-server localhost:9092 --topic my-topic

启动一个基于console的生产者脚本,可以方便的进行数据输入的测试,直接进行数据输入即可。

(6)启动消费者

 kafka-console-consumer.sh --help  打印所有参数

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-topic --from-beginning

添加from-beginning参数来从头消费数据。

四. 注册系统服务

 为了方便的控制Kafka服务的启动和停止,可以将其注册为系统服务。

1. Systemd服务配置

创建Systemd服务文件

sudo vim /etc/systemd/system/kafka.service

在文件中添加以下内容,需要手动替换ExecStartExecStop中关于路径的部分:

[Unit]
Description=Apache Kafka
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
ExecStart=/home/ygsj/Config_files/kafka_server/kafka_2.12-3.5.2/bin/kafka-server-start.sh /home/ygsj/Config_files/kafka_server/kafka_2.12-3.5.2/config/kraft/server.properties
ExecStop=/home/ygsj/Config_files/kafka_server/kafka_2.12-3.5.2/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target

 重新加载Systemd配置 

sudo systemctl daemon-reload

2. Kafka服务控制

  • 开机自动启动
sudo systemctl enable kafka.service
  • 启动Kafka服务
sudo systemctl start kafka.service
  • 检查Kafka状态 
sudo systemctl status kafka.service

  • 停止Kafka服务
sudo systemctl stop kafka.service
  • 重启Kafka服务
sudo systemctl restart kafka.service

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

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

相关文章

【c++刷题笔记-贪心】day30:56. 合并区间 、 738.单调递增的数字

56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;覆盖区间问题&#xff0c;先排序再判断边界 重点&#xff1a;二维数组可以使用back&#xff08;&#xff09;函数直接更换边界值 class Solution { public:static bool cmp(const vector<int>&a…

上网监控软件有哪些?3款实力出众的上网监控软件

为什么需要上网监控软件&#xff1f; 据说&#xff0c;99%的员工上班都会摸鱼&#xff0c;1%的员工上班会窃取公司信息。 所以&#xff0c;因此&#xff0c;监控员工的上网行为是很有必要滴。 总结下来&#xff0c;上网监控软件的作用是&#xff1a; 1.提高生产力&#xff1…

天线罩作用

天线罩是安装在天线上的一个保护性结构&#xff0c;基本作用如下&#xff1a; 1.保护天线&#xff1a;天线罩可以保护天线免受外界环境的影响&#xff0c;如雨、雪、风、沙尘等&#xff0c;延长天线的使用寿命。 2.减少损伤&#xff1a;在天线遭受外力撞击时&#xff0c;天线…

前端位置布局汇总

HTML中脱离文档流的元素有&#xff1a; position: absolute - 元素相对于最近的已定位&#xff08;非 static&#xff09;祖先元素定位。 position: fixed - 元素相对于浏览器窗口定位。 float: left 或 float: right - 元素向左或向右浮动&#xff0c;周围的内容会环绕它。 …

shark云原生-日志体系-filebeat高级配置(适用于生产)-更新中

文章目录 1. filebeat.inputs 静态日志收集器2. filebeat.autodiscover 自动发现2.1. autodiscover 和 inputs2.2. 如何配置生效2.3. Providers 提供者2.4. Providers kubernetes2.5. 配置 templates2.5.1. kubernetes 自动发现事件中的变量字段2.5.2 配置 templates 2.6. 基于…

深度学习全景进阶:最新Python深度学习进阶与前沿应用

查看原文>>>深度学习全景进阶&#xff1a;最新Python深度学习进阶与前沿应用 近年来&#xff0c;伴随着以卷积神经网络&#xff08;CNN&#xff09;为代表的深度学习的快速发展&#xff0c;人工智能迈入了第三次发展浪潮&#xff0c;AI技术在各个领域中的应用越来越广…

IDEA发疯导致maven下载回来的jar不完整zip END header not found

IDEA发疯导致maven下载回来的jar不完整zip END header not found 具体报错 java: 读取D:\mavenRepository\com\alibaba\druid-spring-boot-starter\1.2.23\druid-spring-boot-starter-1.2.23.jar时出错; zip END header not foundjava: java.lang.RuntimeException: java.io.…

2024 JuniorCryptCTF reppc 部分wp

Random cipher 文本编辑器打开附件 比较简单。脚本 Mutated Caesar 文本编辑器打开附件 比较简单。脚本 Pizza 附件拖入dnSpy 比较简单。脚本 l33t Leet&#xff0c;又称黑客语&#xff0c;是指一种发源于欧美地区的BBS、线上游戏和黑客社群所使用的文字书写方式&#xff0c;通…

Linux:进程终止和进程替换

Linux&#xff1a;Linux&#xff1a;进程终止和进程替换 一、进程终止1.1 进程退出场景和创建退出方式 1.2 exit 和 _exit区别二、进程程序替换2.1 进程替换函数2.2 函数解释及命名解释函数解释命名解释 2.3 单进程程序替换&#xff08;无子进程&#xff09;2.3.1 带l函数进程替…

ArduPilot开源飞控之AP_VisualOdom

ArduPilot开源飞控之AP_VisualOdom 1. 源由2. 类定义2.1 类与构造函数2.2 枚举类型2.3 公共方法2.4 消息处理2.5 其他功能2.6 私有成员 3. 框架设计3.1 启动代码 AP_VisualOdom::init3.2 消息处理3.2.1 AP_VisualOdom::handle_vision_position_delta_msg3.2.2 AP_VisualOdom::h…

买的Google账号登录,修改辅助邮箱收不到验证码?可能是个简单的错误

这篇文章分享一个案例&#xff0c;购买了谷歌账号以后如何修改辅助邮箱&#xff0c;修改辅助邮箱的一些要点&#xff0c;以及常见的一个错误。 一、案例回放 这个朋友昨天在我的一个视频下面留言说买了谷歌账号以后&#xff0c;想修改辅助邮箱地址&#xff0c;但是输入了辅助…

中英双语介绍加拿大多伦多(Toronto)

中文版 多伦多概述 多伦多&#xff08;Toronto&#xff09;是加拿大最大的城市&#xff0c;也是北美地区重要的经济、文化和金融中心。以下是对多伦多的详细介绍&#xff0c;包括其经济地位、金融中心、人口、地理位置、高等教育、移民政策、著名景点和居住的名人等方面的信息…

【Git】本地版本控制

Git 是一个分布式版本控制系统&#xff0c;用于跟踪文件的更改&#xff0c;通常用于源代码管理。它的设计目的是为了协同工作和版本管理&#xff0c;让多个开发人员能够高效地合作开发和维护代码。 Git环境配置 在官网可以找到对应下载&#xff1a;Git - Downloads (git-scm.c…

【WebRTC实现点对点视频通话】

介绍 WebRTC (Web Real-Time Communications) 是一个实时通讯技术&#xff0c;也是实时音视频技术的标准和框架。简单来说WebRTC是一个集大成的实时音视频技术集&#xff0c;包含了各种客户端api、音视频编/解码lib、流媒体传输协议、回声消除、安全传输等。对于开发者来说可以…

avcodec_send_packet函数阻塞

用ffmpeg4.1.4开发一个播放器&#xff0c;解码过程如下&#xff0c;在每个函数前设置标志&#xff0c;测试发现程序阻塞在avcodec_send_packet函数。 while(true){av_read_frameavcodec_send_packetavcodec_receive_frameav_packet_unref } 解释如下&#xff1a; avcodec_se…

嵌入式Linux:如何学好嵌入式?

目录 方法步骤 1、 基础知识 2、 学习linux 3、 学习嵌入式linux 4、深入学习 嵌入式书籍推荐 Linux基础 Linux内核 研发方向 硬件基础 方法步骤 1、 基础知识 目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件。 科目:数字电路、计算机组成原理…

Unity3D游戏 RPG

丛林探险游戏 人物进行探险游戏 拥有登录&#xff0c;首页&#xff0c;3D物体旋转浏览的功能&#xff0c;还能进行种植树等功能

【异常错误】‘NoneType‘ object has no attribute ‘GetSubstructMatches‘

出现的错误信息&#xff1a; AttributeError: Caught AttributeError in DataLoader worker process 0. Original Traceback (most recent call last): File "/home/mapengsen/anaconda3/envs//lib/python3.8/site-packages/torch/utils/data/_utils/worker.py", l…

【matlab 路径规划】基于改进遗传粒子群算法的药店配送路径优化

一 背景介绍 本文分享的是一个基于订单合并的订单分配和路径规划联合优化&#xff0c;主要背景是骑手根据客户需求&#xff0c;从药店取药之后进行配送&#xff0c;配送的过程中考虑路径的长度、客户的服务时间窗、车辆的固定成本等要素&#xff0c;经过建模和优化得到最优的配…

C# WinForm —— 38 SplitContainer介绍

1. 简介 将页面拆分成两个大小可以调整的区域&#xff0c;中间有一个拆分条&#xff0c;可以拖动拆分条来调整左右区域的大小 2. 属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到BoderStyle边框样式&#xff1a;None、FixedSingle、Fixed3DAutoScroll当控件…