Kafka 快速上手:安装部署与 HelloWorld 实践(一)

news2025/6/8 7:16:15

一、Kafka 是什么?为什么要学?

**

在大数据和分布式系统的领域中,Kafka 是一个如雷贯耳的名字。Kafka 是一种分布式的、基于发布 / 订阅的消息系统,由 LinkedIn 公司开发,后成为 Apache 基金会的顶级开源项目 。它以高吞吐量、持久性、可靠性和分布式特性著称,在数据处理领域有着广泛的应用。

1.1 Kafka 的优势

  • 高吞吐量:Kafka 能够在普通硬件上实现每秒数百万的消息处理能力,这使得它非常适合处理大规模的数据流。例如,在一些大型电商平台的促销活动中,大量的订单消息、用户行为消息等都可以通过 Kafka 快速处理。
  • 持久性:Kafka 将消息持久化存储在磁盘上,并且支持数据备份,确保数据不会轻易丢失。通过配置不同的副本因子,可以实现数据的冗余存储,提高数据的可靠性。
  • 分布式与扩展性:Kafka 采用分布式架构,易于扩展。你可以通过增加 Broker 节点来轻松应对不断增长的数据量和吞吐量需求,而且在扩展过程中对业务的影响极小。
  • 实时处理:Kafka 具备实时处理大量数据流的能力,能够满足实时分析和处理的需求,在实时数据处理场景中表现出色。

1.2 Kafka 的应用场景

  • 日志收集:Kafka 可以收集、聚合和传输各种应用程序和系统的日志数据,为后续的日志分析、故障排查等提供支持。许多大型互联网公司都使用 Kafka 来收集服务器日志、应用程序日志等。
  • 消息系统:作为消息队列,Kafka 用于解耦应用程序的不同组件,实现异步通信和流量控制。在微服务架构中,各个微服务之间可以通过 Kafka 进行消息传递,降低服务之间的耦合度。
  • 实时数据分析:结合流处理框架如 Spark Streaming、Flink 等,Kafka 可以实时处理和分析海量的数据流,例如实时统计用户行为、监控系统指标等。
  • 用户行为追踪:Kafka 可以捕获用户在网站或应用上的各种行为数据,如点击、浏览、购买等,这些数据可用于用户画像、推荐系统等。

正是由于 Kafka 在大数据处理中的关键地位和广泛应用,掌握 Kafka 的安装部署与使用,对于后端开发人员、大数据工程师来说,就显得尤为重要。接下来,就让我们一起开启 Kafka 的学习之旅,从安装部署开始,逐步掌握这一强大工具。

二、安装前的准备工作

在安装 Kafka 之前,我们需要完成一些必要的准备工作,以确保 Kafka 能够顺利安装和运行。主要包括安装 Java 运行环境(JDK)和下载 Kafka 安装包。

2.1 安装 Java 运行环境(JDK)

Kafka 是基于 Java 开发的,因此需要在安装 Kafka 之前先安装 Java 运行环境。这里以安装 JDK 1.8 为例,介绍安装步骤(不同操作系统下的安装步骤可能略有差异):

  1. 下载 JDK 安装包:你可以从 Oracle 官方网站(Java Downloads | Oracle)下载适合你操作系统的 JDK 安装包。根据你的操作系统类型(32 位或 64 位)选择对应的安装包进行下载。
  1. 安装 JDK:下载完成后,双击安装包进行安装。在安装过程中,按照安装向导的提示进行操作,选择安装路径等选项。例如,在 Windows 系统中,一般可以选择默认安装路径,也可以自定义安装到其他磁盘分区。在 Linux 系统中,可以通过命令行解压安装包并进行配置。
  1. 配置环境变量:安装完成后,需要配置系统的环境变量。以 Windows 系统为例,右键点击 “此电脑”,选择 “属性”,在弹出的窗口中点击 “高级系统设置”,然后点击 “环境变量” 按钮。在 “系统变量” 中找到 “Path” 变量,点击 “编辑”,在变量值的开头添加 JDK 安装目录下的 “bin” 目录路径,例如 “C:\Program Files\Java\jdk1.8.0_291\bin”(根据你的实际安装路径填写)。另外,还需要新建两个系统变量:“JAVA_HOME”,变量值为 JDK 的安装目录,如 “C:\Program Files\Java\jdk1.8.0_291”;“CLASSPATH”,变量值为 “.;% JAVA_HOME%\lib\dt.jar;% JAVA_HOME%\lib\tools.jar”(注意前面有个英文点) 。
  1. 验证安装:打开命令提示符(CMD),输入 “java -version” 命令,如果显示出 Java 的版本信息,如 “java version "1.8.0_291"”,则说明 JDK 安装成功且环境变量配置正确。同时,也可以输入 “javac” 命令,查看是否能正常显示 javac 的帮助信息,以进一步验证安装。

2.2 下载 Kafka 安装包

可以从 Apache Kafka 的官方网站(http://kafka.apache.org/downloads)下载 Kafka 的安装包。在下载页面,你可以看到不同版本的 Kafka,建议选择最新的稳定版本进行下载。例如,目前最新版本是 2.8.1,你可以下载 “kafka_2.12-2.8.1.tgz”(其中 2.12 表示 Scala 的版本,Kafka 是用 Scala 编写的)。下载完成后,将安装包解压到你希望安装 Kafka 的目录,例如 “D:\kafka_2.12-2.8.1”(Windows 系统)或 “/usr/local/kafka”(Linux 系统)。解压后的目录结构如下:

 

kafka_2.12-2.8.1

├── bin # 存放Kafka的各种脚本文件,用于启动、停止Kafka以及创建主题、发送消息等操作

├── config # 存放Kafka的各种配置文件,如server.properties(Kafka服务器配置)、zookeeper.properties(ZooKeeper配置,Kafka依赖ZooKeeper)等

├── libs # 存放Kafka运行所需的各种依赖库

├── LICENSE # 许可证文件

├── NOTICE # 说明文件

└── site-docs # 存放Kafka的文档

完成上述安装前的准备工作后,我们就可以进入 Kafka 的安装部署阶段了。

三、一步一步带你完成 Kafka 安装部署

接下来,我们将详细介绍在 Linux 系统下 Kafka 的安装部署步骤。这里假设你已经完成了前面提到的安装前准备工作,即安装好 JDK 并下载了 Kafka 安装包。

(一)解压安装包

将下载好的 Kafka 压缩包解压到指定目录。例如,如果你将安装包下载到了 “/home/downloads” 目录,并且希望将 Kafka 安装到 “/usr/local/kafka” 目录,可以使用以下命令:

 

sudo tar -zxvf /home/downloads/kafka_2.12-2.8.1.tgz -C /usr/local/

sudo mv /usr/local/kafka_2.12-2.8.1 /usr/local/kafka

解压后,进入 Kafka 的安装目录 “/usr/local/kafka”,可以看到以下主要文件和目录结构:

 

kafka

├── bin # 存放各种脚本文件,用于启动、停止Kafka以及创建主题、发送消息等操作

├── config # 存放Kafka的各种配置文件

├── libs # 存放Kafka运行所需的各种依赖库

├── LICENSE # 许可证文件

├── NOTICE # 说明文件

└── site-docs # 存放Kafka的文档

其中,bin目录下的脚本文件是我们后续操作 Kafka 的重要工具,config目录下的配置文件则决定了 Kafka 的运行参数和行为 。

(二)配置 ZooKeeper

Kafka 依赖 ZooKeeper 来管理集群状态和元数据信息 ,因此在启动 Kafka 之前,需要先配置并启动 ZooKeeper。Kafka 安装包中已经包含了一个可直接使用的 ZooKeeper,我们只需要修改其配置文件即可。

进入 Kafka 安装目录下的config目录,找到zookeeper.properties文件,使用文本编辑器(如 vim)打开:

 

cd /usr/local/kafka/config

sudo vim zookeeper.properties

在zookeeper.properties文件中,主要修改以下几个关键参数:

  • dataDir:指定 ZooKeeper 的数据存储目录,默认是 “/tmp/zookeeper”,建议修改为一个稳定的存储路径,例如 “/data/zookeeper”。如果该目录不存在,需要手动创建。
 

dataDir=/data/zookeeper

  • clientPort:指定 ZooKeeper 监听的客户端连接端口,默认是 2181,一般不需要修改。
 

clientPort=2181

修改完成后,保存并退出文件。如果指定的dataDir目录不存在,需要创建该目录并赋予适当的权限:

 

sudo mkdir -p /data/zookeeper

sudo chown -R $USER:$USER /data/zookeeper

(三)配置 Kafka

同样在config目录下,找到server.properties文件,这是 Kafka 的核心配置文件,使用文本编辑器打开:

 

sudo vim server.properties

在server.properties文件中,有许多重要的参数需要理解和配置,以下是一些关键参数的说明及修改建议:

  • broker.id:每个 Kafka broker 都需要有一个唯一的 ID,用于在集群中标识自己。在单机环境下,一般设置为 0;如果是集群环境,则每个 broker 的 ID 都不能相同,且必须是大于等于 0 的整数。
 

broker.id=0

  • listeners:指定 Kafka broker 监听的地址和端口。格式为 “协议:// 主机名:端口”,例如 “listeners=PLAINTEXT://localhost:9092”,表示 Kafka broker 监听本地的 9092 端口,使用 PLAINTEXT 协议。如果是在集群环境中,需要将主机名改为真实的服务器 IP 地址。
 

listeners=PLAINTEXT://localhost:9092

  • log.dirs:指定 Kafka 存储消息日志的目录。默认是 “/tmp/kafka-logs”,建议修改为一个有足够磁盘空间的目录,例如 “/data/kafka-logs”。如果该目录不存在,需要手动创建,并赋予适当的权限。
 

log.dirs=/data/kafka-logs

  • zookeeper.connect:指定 ZooKeeper 的连接地址和端口,Kafka 通过这个配置来连接 ZooKeeper。默认值一般是 “localhost:2181”,如果 ZooKeeper 部署在其他服务器上,需要修改为对应的地址和端口。
 

zookeeper.connect=localhost:2181

此外,还有一些其他参数,如num.partitions(默认分区数)、auto.create.topics.enable(是否自动创建主题)等,可以根据实际需求进行调整。修改完成后,保存并退出文件。如果指定的log.dirs目录不存在,需要创建该目录并赋予适当的权限:

 

sudo mkdir -p /data/kafka-logs

sudo chown -R $USER:$USER /data/kafka-logs

(四)启动 Kafka

在启动 Kafka 之前,需要先启动 ZooKeeper。Kafka 提供了启动脚本,位于bin目录下。

启动 ZooKeeper,可以使用以下命令在前台启动(会将日志输出到终端):

 

cd /usr/local/kafka

bin/zookeeper-server-start.sh config/zookeeper.properties

如果希望在后台启动 ZooKeeper,可以使用 “&” 符号将进程放到后台运行,并将日志输出到指定文件(例如 “zookeeper.out”):

 

bin/zookeeper-server-start.sh config/zookeeper.properties &> zookeeper.out &

前台启动适合于调试和观察启动过程中的日志信息,方便及时发现问题;后台启动则适合在生产环境中使用,不占用终端会话,并且可以通过日志文件后续查看启动信息和运行状态。

ZooKeeper 启动成功后,会监听指定的端口(默认为 2181)。接下来启动 Kafka,同样有前台和后台两种启动方式。

前台启动 Kafka 的命令如下:

 

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

后台启动 Kafka 的命令如下:

 

bin/kafka-server-start.sh config/server.properties &> kafka.out &

当看到 Kafka 启动日志中出现 “[KafkaServer id=0] started” 字样时,说明 Kafka 已经成功启动。此时,Kafka 已经在指定的地址和端口(如localhost:9092)监听,等待接收生产者发送的消息和消费者的请求。

至此,Kafka 的安装部署就完成了。接下来,我们将通过一个简单的 HelloWorld 示例,来验证 Kafka 是否正常工作,并初步了解 Kafka 的使用方法。

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

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

相关文章

iOS、Android、鸿蒙、Web、桌面 多端开发框架Kotlin Multiplatform

Kotlin Multiplatform(简称 KMP)是 JetBrains 推出的开源跨平台开发框架 Kuikly 是腾讯开源的跨端开发框架,基于 Kotlin Multiplatform 技术构建,为开发者提供了技术栈更统一的跨端开发体验 KMP 不仅局限于移动端,它…

探索C++标准模板库(STL):String接口的底层实现(下篇)

前引:在C的面向对象编程中,对象模型是理解语言行为的核心。无论是类的成员函数如何访问数据,还是资源管理如何自动化,其底层机制均围绕两个关键概念展开:this指针与六大默认成员函数。它们如同对象的“隐形守护者”&am…

Flutter知识点汇总

Flutter架构解析 1. Flutter 是什么?它与其他移动开发框架有什么不同? Flutter 是 Google 开发的开源移动应用开发框架,可用于快速构建高性能、高保真的移动应用(iOS 和 Android),也支持 Web、桌面和嵌入式设备。。它与其他移动开发框架(如 React Native、Xamarin、原…

​线性注意力 vs. 传统注意力:效率与表达的博弈新解

​核心结论​:线性注意力用计算复杂度降维换取全局建模能力,通过核函数和结构优化补足表达缺陷 一、本质差异:两种注意力如何工作? ​特性​传统注意力(Softmax Attention)线性注意力(Linear At…

YOLO在QT中的完整训练、验证与部署方案

以下是YOLO在QT中的完整训练、验证与部署方案: 训练方案 准备数据集: 收集数据:收集与目标检测任务相关的图像数据集,可以是公开数据集如COCO、Pascal VOC,也可以是自定义数据集。标注数据:使用标注工具如…

增量式网络爬虫通用模板

之前做过一个项目,他要求是只爬取新产生的或者已经更新的页面,避免重复爬取未变化的页面,从而节省资源和时间。这里我需要设计一个增量式网络爬虫的通用模板。可以继承该类并重写部分方法以实现特定的解析和数据处理逻辑。这样可以更好的节约…

【JVM】三色标记法原理

在JVM中,三色标记法是GC过程中对象状态的判断依据,回收前给对象设置上不同的三种颜色,三色分为白色、灰色、黑色。根据颜色的不同,决定对象是否要被回收。 白色表示: 初始状态:所有对象未被 GC 访问。含义…

【uniapp开发】picker组件的使用

项目uniapp,结合fastadmin后端开发 picker组件的官方文档说明 https://en.uniapp.dcloud.io/component/picker.html#普通选择器 先看效果: 1、实现设备类型的筛选;2、实现设备状态的筛选; 前端代码(节选&#xff0…

【HarmonyOS Next之旅】DevEco Studio使用指南(三十一) -> 同步云端代码至DevEco Studio工程

目录 1 -> 同步云函数/云对象 1.1 -> 同步单个云函数/云对象 1.2 -> 批量同步云函数/云对象 2 -> 同步云数据库 2.1 -> 同步单个对象类型 2.2 -> 批量同步对象类型 3 -> 一键同步云侧代码 1 -> 同步云函数/云对象 说明 对于使用DevEco Studio…

go-zero微服务入门案例

一、go-zero微服务环境安装 1、go-zero脚手架的安装 go install github.com/zeromicro/go-zero/tools/goctllatest2、etcd的安装下载地址根据自己电脑操作系统下载对应的版本,具体的使用自己查阅文章 二、创建一个user-rpc服务 1、定义user.proto文件 syntax &qu…

Python控制台输出彩色字体指南

在Python开发中,有时我们需要在控制台输出彩色文本以提高可读性或创建更友好的用户界面。本文将介绍如何使用colorama库来实现这一功能。 为什么需要彩色输出? 提高可读性:重要信息可以用不同颜色突出显示更好的用户体验:错误信息…

开源之夏·西安电子科技大学站精彩回顾:OpenTiny开源技术下沉校园,点燃高校开发者技术热情

开源之夏2025编程活动正在如火如荼的进行中,当前也迎来了报名的倒计时阶段,开源之夏组织方也通过高校行系列活动进入各大高校,帮助高校开发者科普开源文化、开源活动、开源技术。 6月4日 开源之夏携手多位开源技术大咖、经验型选手走进西安电…

解决数据库重启问题

最近部署软件时,发现mysql会一直在重启,记录下解决办法: 1.删除/home/dataexa/install/docker/datas/mysql路径下的data文件夹 2.重新构建mysql docker-compose up -d --build mysql 3.停掉所有应用,在全部重启: do…

前后端交互过程中—各类文件/图片的上传、下载、显示转换

前后端交互过程中—各类文件/图片的上传、下载、显示转换 图片补充:new Blob()URL.createObjectURL()替代方案:FileReader.readAsDataURL()​​对比: tiff文件TIFF库TIFF转换通过url转换tiff文件为png通过文件选择的方式转换tiff文件为png 下…

数据库同步是什么意思?数据库架构有哪些?

目录 一、数据库同步是什么 (一)基本概念 (二)数据库同步的类型 (三)数据库同步的实现方式 二、数据库架构的类型 (一)单机架构 (二)主从复制架构 &a…

【数据结构】详解算法复杂度:时间复杂度和空间复杂度

🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》 🍉学习方向:C/C方向 ⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平 前言&…

Rest-Assured API 测试:基于 Java 和 TestNG 的接口自动化测试

1. 右键点击项目的文件夹,选择 New > File。 2. 输入文件名,例如 notes.md,然后点击 OK。 3. 选择项目类型 在左侧的 Generators 部分,选择 Maven Archetype,这将为你生成一个基于 Maven 的项目。 4. 配置项目基…

react public/index.html文件使用env里面的变量

env文件 ENVdevelopment NODE_ENVdevelopment REACT_APP_URL#{REACT_APP_URL}# REACT_APP_CLIENTID#{REACT_APP_CLIENTID}# REACT_APP_TENANTID#{REACT_APP_TENANTID}# REACT_APP_REDIRECTURL#{REACT_APP_REDIRECTURL}# REACT_APP_DOMAIN_SCRIPT#{REACT_APP_DOMAIN_SCRIPT}#pu…

chili3d 笔记17 c++ 编译hlr 带隐藏线工程图

这个要注册不然emscripten编译不起来 --------------- 行不通 ---------------- 结构体 using LineSegment std::pair<gp_Pnt, gp_Pnt>;using LineSegmentList std::vector<LineSegment>; EMSCRIPTEN_BINDINGS(Shape_Projection) {value_object<LineSegment&g…

创建一个纯直线组成的字体库

纯直线组成的字体&#xff0c;一个“却”由五组坐标点组成&#xff0c;存储5个点共占21字节&#xff0c;使用简单&#xff0c;只要画直线即可&#xff0c; “微软雅黑”&#xff0c;2个轮廓&#xff0c;55坐标点&#xff0c;使用复杂&#xff0c;还填充。 自创直线字体 “微软…