书接上回,第二次作业比较容易解决,我问了ai,让他对我进行指导,按照它提供的步骤,我完成了本次实验,接下来我会标注出需要注意的细节,指导大家完成此次任务。

🎯 一、作业目标

✔️ 目标关键词:

✅ 搭建 Kafka 实现环境
✅ 使用 Java 写一个“网站订购数据实时统计程序”
✅ 保证数据可以:实时采集 → 实时消费 → 实时统计
✅ 提供完整演示文档、录屏资料

🚩 二、从头到尾的执行步骤 & 细节

✅准备阶段

要点:

第一步:Kafka 官方下载二进制版本

Apache Kafka我下的是3.9.1版本

  • 第二步:JDK 必须安装(推荐 Oracle JDK 8 或 11,版本要和 IDEA 保持一致)我用的是8

要用邮箱注册一下Oracle账号,才能下载,不用虚拟机的话用windows版本的installer,下载后要记得目标文件的地址,下一步要用。

Java Downloads | Oracle 中国

  • 第三步:配好 JAVA_HOME 和 PATH必须 java -version 有输出

Win+r后cmd,检查你java成没成,

之后你电脑设置,高级系统设置,配置环境变量

✅ 配置环境变量(最重要)

1️⃣ 找到 系统环境变量 → Path
2️⃣ 把这个 JDK 的 bin 目录加进去,比如:

C:\Program Files\Java\jdk-11.0.20\bin

3️⃣ 新建 JAVA_HOME(可选但最好有):

变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk-11.0.20

✅启动服务端

第四步:ZooKeeper

  • 先启动 ZooKeeper,新开一个窗口cmd
  • cd /d D:\kafka
  • .\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
  • 正常输出:看到 binding to port 2181,就 OK。

别关,放后台即可

第五步:Kafka Broker

  • 新开一个窗口cmd,再启动 Kafka:
  • cd /d D:\kafka
  • .\bin\windows\kafka-server-start.bat .\config\server.properties
  • 正常输出:看到 KafkaServer id=0 started,就 OK。

注意:

  • ZooKeeper 和 Kafka 都必须一直开着!
  • 启动先后顺序是:ZooKeeper → Kafka

✅ 第六步:创建 Topic

  • 新开一个 cmd:
  • cd /d D:\kafka
  • .\bin\windows\kafka-topics.bat --create --topic order-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

看到提示 Created topic order-topic. → 成功!

✅ 测试:命令行生产者 & 消费者(可选但很重要)

  • Producer:
  • .\bin\windows\kafka-console-producer.bat --topic order-topic --bootstrap-server localhost:9092

光标闪烁时输入:

hello kafka

  • Consumer:
  • .\bin\windows\kafka-console-consumer.bat --topic order-topic --bootstrap-server localhost:9092 --from-beginning

Consumer 窗口要能显示 Producer 发送的消息,证明消息管道通了。

用命令行测试 Producer / Consumer(可选但很有用)

这样能保证:

  • Kafka 能正常收发消息

  • 防止你写 Java 程序时,结果没出来却不知道是 Kafka 还是代码问题


📌 1️⃣ 打开命令行 Producer

还是同样流程:

cd /d D:\kafka

输入:

.\bin\windows\kafka-console-producer.bat --topic order-topic --bootstrap-server localhost:9092

这时光标会闪烁,表示你可以直接输入内容了。


📌 2️⃣ 打开命令行 Consumer

再开一个新的 cmd:

cd /d D:\kafka 

输入:

.\bin\windows\kafka-console-consumer.bat --topic order-topic --bootstrap-server localhost:9092 --from-beginning


📌 3️⃣ 测试

  • 在 Producer 窗口输入:

    hello

    然后回车

  • 在 Consumer 窗口应该立刻显示:

    hello


✅ 如果收发正常,Kafka 配置一切正常!

✅ 第七步:iDEA 项目准备

  • 创建 Maven 项目(方便自动管理 Kafka 依赖)
  • pom.xml:
  • <dependencies>
  •   <dependency>
  •     <groupId>org.apache.kafka</groupId>
  •     <artifactId>kafka-clients</artifactId>
  •     <version>3.7.0</version>
  •   </dependency>
  • </dependencies>

⚠️ dependencies 必须在 <project> 里,别写到外面。3.7.0是kafka版本号,你下载什么版本就用什么号码

  • 如果下载依赖慢,就加:
  • <repositories>
  •   <repository>
  •     <id>aliyun</id>
  •     <url>https://maven.aliyun.com/repository/public</url>
  •   </repository>
  • </repositories>
  • 一定要点击 Reload Maven,看 External Libraries 有 kafka-clients。

以下是我的pom文件内容:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>JavaProducerConsumer</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.9.1</version></dependency></dependencies></project>

依赖写进去了之后,保存你的文件,要等它下载好,之后就是代码了

✅ 第八步:编写 Producer

  • 在 src/main/java 下新建类 OrderProducer
  • Producer 要点:
    • Kafka 地址:localhost:9092
    • Topic 名:order-topic
    • 代码核心:随机生成订单数据,循环发送
  • 右键 Run,看到:
  • Sent: Order_123,456.78

就说明 Producer 已经把消息丢到 Kafka 了。

package com.example.kafka;import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringSerializer;import java.util.Properties;
import java.util.Random;public class OrderProducer {public static void main(String[] args) throws InterruptedException {Properties props = new Properties();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());KafkaProducer<String, String> producer = new KafkaProducer<>(props);Random random = new Random();while (true) {String orderId = "Order_" + random.nextInt(1000);double amount = 100 + random.nextDouble() * 900;String msg = orderId + "," + amount;producer.send(new ProducerRecord<>("order-topic", orderId, msg));System.out.println("Sent: " + msg);Thread.sleep(1000); // 每秒一单}}
}

✅ 第九步:编写 Consumer

  • 新建 OrderConsumer
  • Consumer 要点:
    • Kafka 地址:localhost:9092
    • Topic 名:order-topic
    • 逻辑:循环消费消息、解析金额、累计统计、打印实时结果
  • 右键 Run,会实时输出:
  • Received: Order_123,456.78
  • Total Orders: X, Total Amount: Y
package com.example.kafka;import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.serialization.StringDeserializer;import java.time.Duration;
import java.util.Collections;
import java.util.Properties;public class OrderConsumer {public static void main(String[] args) {Properties props = new Properties();props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());props.put(ConsumerConfig.GROUP_ID_CONFIG, "order-consumer-group");KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);consumer.subscribe(Collections.singletonList("order-topic"));int totalOrders = 0;double totalAmount = 0;while (true) {ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));for (ConsumerRecord<String, String> record : records) {String[] parts = record.value().split(",");double amount = Double.parseDouble(parts[1]);totalOrders++;totalAmount += amount;System.out.println("Received: " + record.value());System.out.println("Total Orders: " + totalOrders + ", Total Amount: " + totalAmount);}}}
}

✅第十步: 验证功能完整

先运行producer,再运行consumer,截图,或者录屏,(如果能运行代码,你知道怎么截图和录屏的)因为这就是你做成这个实验的成果

✔ Producer 持续发
✔ Consumer 实时收
✔ Consumer 实时汇总统计

这里录个屏,截几张图就行

✅  结果整理(交付要点)

🌟 交什么?

  • Kafka & ZooKeeper 启动截图
  • order-topic 创建命令 & 成功提示
  • Producer/Consumer 运行效果截图
  • IDEA 项目结构截图
  • 可选:录屏演示从 Producer 发单 → Consumer 实时统计的整个流程

🌟 文档要点:

  • 简要写你怎么搭环境(包括下载、配置、启动命令)
  • 贴关键截图
  • 解释你的 Producer/Consumer 逻辑(可以复制关键代码)
  • 结果证明:实时采集、实时消费、实时统计三点都 OK

🌟 录屏要点(如果老师要求):

  • 演示 Kafka 启动、Topic 创建
  • 演示 Producer 发送数据
  • 演示 Consumer 实时消费并输出统计
  • 录制 30 秒左右,声音可有可无

✅ 可能遇到的坑

  • Kafka 启动失败:通常是端口冲突或 ZooKeeper 没开。
  • java 不是内部命令:JDK 没装好或 PATH 没配好。
  • IDEA 报 org.apache.kafka 不存在:依赖没写对或没刷新 Maven。
  • 消费者收不到消息:Topic 名拼错,或者 Producer 和 Consumer 连接不同的 Kafka。

🚩 完整要点 = 这 10 步,一步不错

做完这些,你这份 Kafka 作业就 100% 满分没跑
还方便下次复用!

最后,这个不是真的网站的数据来源,作为初学者,任务要达到什么程度,可以再明确一下:

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

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

相关文章

三十七、【高级特性篇】定时任务:基于 APScheduler 实现测试计划的灵活调度

三十七、【高级特性篇】定时任务:基于 APScheduler 实现测试计划的灵活调度 前言 准备工作 第一部分:后端实现 - `APScheduler` 集成与任务调度 1. 安装 `django-apscheduler` 2. 配置 `django-apscheduler` 3. 数据库迁移 4. 创建调度触发函数 5. 启动 APScheduler 调度器 6…

RabbitMQ--消息顺序性

看本章之前强烈建议先去看博主的这篇博客 RabbitMQ--消费端单线程与多线程-CSDN博客 一、消息顺序性概念 消息顺序性是指消息在生产者发送的顺序和消费者接收处理的顺序保持一致。 二、RabbitMQ 顺序性保证机制 情况顺序保证情况备注单队列&#xff0c;单消费者消息严格按发送顺…

.net core接收对方传递的body体里的json并反序列化

1、首先我在通用程序里有一个可以接收对象型和数组型json串的反序列化方法public static async Task<Dictionary<string, string>> AllParameters(this HttpRequest request){Dictionary<string, string> parameters QueryParameters(request);request.Enab…

(10)机器学习小白入门 YOLOv:YOLOv8-cls 模型评估实操

YOLOv8-cls 模型评估实操 (1)机器学习小白入门YOLOv &#xff1a;从概念到实践 (2)机器学习小白入门 YOLOv&#xff1a;从模块优化到工程部署 (3)机器学习小白入门 YOLOv&#xff1a; 解锁图片分类新技能 (4)机器学习小白入门YOLOv &#xff1a;图片标注实操手册 (5)机器学习小…

Vue 脚手架基础特性

一、ref属性1.被用来给元素或子组件注册引用信息&#xff08;id的替代者&#xff09;2.应用在html标签上获取的是真实DOM元素&#xff0c;用在组件标签上是组件实例对象3.使用方式&#xff1a;(1).打标识&#xff1a;<h1 ref"xxx">...</h1> 或 <Schoo…

Ubuntu安装k8s集群入门实践-v1.31

准备3台虚拟机 在自己电脑上使用virtualbox 开了3台1核2G的Ubuntu虚拟机&#xff0c;你可以先安装好一台&#xff0c;安装第一台的时候配置临时调高到2核4G&#xff0c;安装速度会快很多&#xff0c;安装完通过如下命令关闭桌面&#xff0c;能够省内存占用&#xff0c;后面我们…

Word Press富文本控件的保存

新建富文本编辑器&#xff0c;并编写save方法如下&#xff1a; edit方法&#xff1a; export default function Edit({ attributes, setAttributes }) {return (<><div { ...useBlockProps() }><RichTexttagNameponChange{ (value) > setAttributes({ noteCo…

【编程趣味游戏】:基于分支循环语句的猜数字、关机程序

&#x1f31f;菜鸟主页&#xff1a;晨非辰的主页 &#x1f440;学习专栏&#xff1a;《C语言学习》 &#x1f4aa;学习阶段&#xff1a;C语言方向初学者 ⏳名言欣赏&#xff1a;"编程的核心是实践&#xff0c;而非空谈" 目录 1. 游戏1--猜数字 1.1 rand函数 1.2 sr…

UE5 UI 控件切换器

文章目录分类作用属性分类 面板 作用 可以根据索引切换要显示哪个子UI&#xff0c;可以拥有多个子物体&#xff0c;但是任何时间只能显示一个 属性 在这里指定要显示的UI的索引

scikit-learn 包

文章目录scikit-learn 包核心功能模块案例其他用法**常用功能详解****(1) 分类任务示例&#xff08;SVM&#xff09;****(2) 回归任务示例&#xff08;线性回归&#xff09;****(3) 聚类任务示例&#xff08;K-Means&#xff09;****(4) 特征工程&#xff08;PCA降维&#xff0…

Excel 将数据导入到SQLServer数据库

一般系统上线前期都会导入期初数据&#xff0c;业务人员一般要求你提供一个Excel模板&#xff0c;业务人员根据要求整理数据。SQLServer管理工具是支持批量导入数据的&#xff0c;所以我们可以使用该工具导入期初。Excel格式 第一行为字段1、连接登入的数据库并且选中你需要导入…

剪枝和N皇后在后端项目中的应用

剪枝算法&#xff08;Pruning Algorithm&#xff09; 生活比喻&#xff1a;就像修剪树枝一样&#xff0c;把那些明显不会结果的枝条提前剪掉&#xff0c;节省养分。 在后端项目中的应用场景&#xff1a; 搜索优化&#xff1a;在商品搜索中&#xff0c;如果某个分类下没有符合条…

cocos 2d游戏中多边形碰撞器会触发多次,怎么解决

子弹打到敌机 一发子弹击中&#xff0c;碰撞回调多次执行 我碰撞组件原本是多边形碰撞组件 PolygonCollider2D&#xff0c;我改成盒碰撞组件BoxCollider2D 就好了 用前端的节流方式。或者loading处理逻辑。我测试过了&#xff0c;是可以 本来就是多次啊,设计上貌似就是这样的…

Kubernetes环境中GPU分配异常问题深度分析与解决方案

Kubernetes环境中GPU分配异常问题深度分析与解决方案 一、问题背景与核心矛盾 在基于Kubernetes的DeepStream应用部署中&#xff0c;GPU资源的独占性分配是保障应用性能的关键。本文将围绕一个典型的GPU分配异常问题展开分析&#xff1a;多个请求GPU的容器本应独占各自的GPU&…

Django与模板

我叫补三补四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步今天来讲一讲视图Django与模板文件工作流程模板引擎&#xff1a;主要参与模板渲染的系统。内容源&#xff1a;输入的数据流。比较常见的有数据库、XML文件和用户请求这样的网络数据。模板&#xff1a…

日本上市IT企业|8月25日将在大连举办赴日it招聘会

株式会社GSD的核心战略伙伴贝斯株式会社&#xff0c;将于2025年8月25日在大连香格里拉大酒店商务会议室隆重举办赴日技术人才专场招聘会。本次招聘会面向全国范围内的优秀IT人才&#xff0c;旨在为贝斯株式会社东京本社长期发展招募优质的系统开发与管理人才。招聘计划&#xf…

低功耗设计双目协同画面实现光学变焦内带AI模型

低功耗设计延长续航&#xff0c;集成储能模块保障阴雨天气下的铁塔路线的安全一、智能感知与识别技术 多光谱融合监控结合可见光、红外热成像、激光补光等技术&#xff0c;实现全天候监测。例如&#xff0c;红外热成像可穿透雨雾监测山火隐患&#xff0c;激光补光技术则解决夜间…

datasophon下dolphinscheduler执行脚本出错

执行hive脚本出错&#xff1a; 错误消息&#xff1a; FAILED: RuntimeException Error loading hooks(hive.exec.post.hooks): java.lang.ClassNotFoundException: org.apache.atlas.hive.hook.HiveHookat java.net.URLClassLoader.findClass(URLClassLoader.java:387)at java.…

【Elasticsearch】安全地删除快照仓库、快照

《Elasticsearch 集群》系列&#xff0c;共包含以下文章&#xff1a; 1️⃣ 冷热集群架构2️⃣ 合适的锅炒合适的菜&#xff1a;性能与成本平衡原理公式解析3️⃣ ILM&#xff08;Index Lifecycle Management&#xff09;策略详解4️⃣ Elasticsearch 跨机房部署5️⃣ 快照与恢…

nodejs的npm

1. 什么是 npm&#xff1f; npm&#xff08;Node Package Manager&#xff09; 是 Node.js 的默认包管理工具&#xff0c;用于&#xff1a; 安装和管理依赖&#xff08;第三方库、框架等&#xff09;。运行项目脚本&#xff08;如启动服务、测试、构建等&#xff09;。发布和共…