windows系统kafka小白入门篇——下载安装,环境配置,入门代码书写

目录

1. kafka 下载

2. 修改配置文件

2.1 文件夹内容

2.2 创建一个 data 空文件夹

2.3 修改 zookeeper.properties 配置文件

2.4 修改 server.properties 配置文件

2.5 创建 "zk.cmd" windows脚本文件

2.6 创建 "kfk.cmd" windows脚本文件

3. 启动 kafka

4. 创建主题+生产者消费者演示

4.1 创建 topic 主题

4.2 命令行创建生产者

4.3 命令行创建消费者

4.4 生产者发送消息供消费者消费

5. demo 书写

5.1 创建项目

5.2 引入依赖

 5.3 生产者测试类代码书写

5.4 消费者测试类代码书写


1. kafka 下载

本片是小白入门篇,所以我们不以Linux操作系统为例,选择大多数小白都用的windows。

ksfka下载链接如下,点击链接进入官网即可下载

温馨提示:JDK版本至少需要1.8,高版本也可兼容;

Apache Kafkaicon-default.png?t=N7T8https://kafka.apache.org/downloads本篇中以kafka_2.1.3-3.6.1版本为例,直接点击对应的版本下载即可,tgz包就类似于我们常见的zip,下载完成之后解压即可。

下载完毕,我们就可以解压得到 kafka 了

 解压之后就可以得到 kafka 文件了

2. 修改配置文件

2.1 文件夹内容

打开文件夹后可以发现内部含有bin文件夹,config配置夹,libs依赖夹等,和JDK,maven 问价夹的格式如出一辙;

2.2 创建一个 data 空文件夹

后续需要用来存放日志文件,只要创建完成就可以了,kafka启动后会自动生成日志文件;

2.3 修改 zookeeper.properties 配置文件

我们点击进入config文件夹,找到 zookeeper.properties 配置文件,双击进行修改,

然后,我们找到 dataDir ,将它的值修改为我们刚才创建的 data 文件的路径,还要注意一点,在后面还要多加一个 "/zk",因为一会还要配置 server.properties ,所以要用将她们两个区分开

2.4 修改 server.properties 配置文件

和刚才一样,我们双击修改 "server.properties" 配置文件

我们修改 log.dirs 的值为刚才创建的 data 文件夹的路径,在路径末尾再添加上 "/kafka" ,用来和刚才的zk做区分,kafka 文件夹用来存放kafka的日志文件,zk 文件夹用来存放zoopeeper的日志文件;

2.5 创建 "zk.cmd" windows脚本文件

  以记事本的方式打开,然后加入下面这句话,

这句话的含义就是启动 Zookeeper ,并且启动文件为 "zookeeper.properties" ;

call bin/windows/zookeeper-server-start.bat config/zookeeper.properties
2.6 创建 "kfk.cmd" windows脚本文件

仍然以记事本的方式打开,然后加入下面这句话,

这句话的含义就是启动 kafka ,并且启动文件为 "server.properties" ;

call bin/windows/kafka-server-start.bat config/server.properties

此时,我们的 kafka 文件夹中就多了我们刚刚创建的 data 文件夹,kafka.cmd 脚本文件,zk.cmd 脚本文件;

3. 启动 kafka

经过第二部的配置,现在一切都已经准备就绪,我们只需要双击 zk.cmd 和 kafka.cmd 脚本文件启动kafka;

这里需要注意一点,必须先启动双击 zk.cmd 启动 zookeeper,

再双击 kafka.cmd 启动 kafka,关闭的时候,需要先关闭 kafka,再关闭 zookeeper ;

4. 创建主题+生产者消费者演示

4.1 创建 topic 主题

我们来到 bin 文件夹下的 windows 文件夹,打开 cmd 命令窗口,运行下方命令

# --bootstrap-server localhost:9092  配置服务器连接,此处为本机,9092为kafka默认端口号
# --topic test  创建topic主题,主题名称为 test
# --create      创建topic主题命令
kafka-topics.bat --bootstrap-server localhost:9092 --topic test --create     

4.2 命令行创建生产者

仍然是在 windows 文件夹下新建一个命令窗口,刚才我们已经创建出了名为 "topic" 的主题,现在运行如下命令启动脚本文件创建生产者连接上我们的 topic 主题

# 运行 kafka-console-producer.bat 脚本创建生产者连接本机9092端口名为 test 的主题
kafka-console-producer.bat --bootstrap-server localhost:9092 --topic test

 运行如下所示,会出现一个小箭头,就说明我们链接主题成功,我们生产者发布的主题都会发送到 topic 主题中供消费者去消费使用;

4.3 命令行创建消费者
# 运行 kafka-console-consumer.bat 脚本创建消费者连接本机9092端口名为 test 的主题
windows>kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test

运行成功不会有任何显示, 

4.4 生产者发送消息供消费者消费

如下图所示,我在生产者命令窗口输入 "hello kafka",点击回车,我们就可以在消费者中命令窗口中看到发送过来的 "hello kafka" 消息

5. demo 书写

5.1 创建项目

5.2 引入依赖

在 maven 项目的 pom.xml 文件中加入下方依赖,

<dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.6.1</version></dependency></dependencies>
 5.3 生产者测试类代码书写

我们随便创建一个类即可,名字随意取,代码逻辑备有注释;

public class KafkaProducerTest {public static void main(String[] args) {// TODO 创建配置对象// 创建生产者对象又分为两步// 1. 创建配置对象集合Map<String, Object> configMap = new HashMap<>();configMap.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");// 2. 配置数据 Key-Value 的序列化方式configMap.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());configMap.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());// TODO 创建生产者对象// 将配置对象集合作为参数传入// 返回值就是生产者对象KafkaProducer<String, String> kafkaProducer = new KafkaProducer<String, String>(configMap);// TODO 创建数据// 自己定义一个数据,传入三个参数,第一个参数为主题,第二个参数为数据的key,第三个参数为数据的valueProducerRecord<String,String> record = new ProducerRecord<>("test","first","hello kafka");// TODO 发送数据kafkaProducer.send(record);// TODO 关闭生产者对象kafkaProducer.close();}
}
5.4 消费者测试类代码书写
public class KafkaConsumerTest {public static void main(String[] args) {// TODO 创建消费者配置对象// 创建消费者配置对象集合HashMap<String, Object> consumerConfig = new HashMap<>();consumerConfig.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");consumerConfig.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());consumerConfig.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());// TODO 创建消费者对象KafkaConsumer<String,String> consumer = new KafkaConsumer<String, String>(consumerConfig);// TODO 订阅消费主体,主题名称为 testconsumer.subscribe(Collections.singletonList("test"));// TODO 从主题中获取数据消费final ConsumerRecords<String, String> datas = consumer.poll(100);for (ConsumerRecord<String,String> data : datas){System.out.println(data);}// TODO 关闭消费者对象consumer.close();}
}

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

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

相关文章

Windows下用CMake编译PugiXML及配置测试

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 PugiXML是什么&#xff1f; PugiXML 是一个用于解析和操作 XML 文档的 C 库。它提供了简单易用的接口&#xff0c;能够高效地加载…

Javascript/Node.JS中如何用多种方式避免属性为空(cannot read property of undefined ERROR)

>>>>>>问题 "cannot read property of undefined" 是一个常见的 JavaScript 错误&#xff0c;包含我在内很多人都会遇到&#xff0c;表示你试图访问一个未定义&#xff08;undefined&#xff09;对象的属性。这通常是因为你在访问一个不存在的对象…

视频基础学习四——视频编码基础一(冗余信息)

文章目录 前言一、编码压缩的原理1.空间冗余帧内预测 2.时间冗余帧间预测运动估计运动补偿 3.编码冗余4.视觉冗余 二、压缩编码的流程1.编码器2.编解码流程 总结 前言 上一篇文章介绍了视频帧率、码率、与分辨率。也介绍了为什么需要对视频进行压缩&#xff0c;因为720P、rgb2…

C++的并发世界(四)——线程传参

1.全局函数作为传参入口 #include <iostream> #include <thread> #include <string>void ThreadMain(int p1,float p2,std::string str) {std::cout << "p1:" << p1 << std::endl;std::cout << "p2:" <<…

ElementUI 表格横向滚动条时滚动到指定位置

ElementUI 表格横向滚动条时滚动到指定位置 getColumnOffset(columnProp) {this.$nextTick(() > {const table this.$refs.tableRef.$refs.multipleTable;const columns table.columns;const column columns.find((col) > col.property columnProp);if (column) {// …

Docker:探索容器化技术,重塑云计算时代应用交付与管理

一&#xff0c;引言 在云计算时代&#xff0c;随着开发者逐步将应用迁移至云端以减轻硬件管理负担&#xff0c;软件配置与环境一致性问题日益凸显。Docker的横空出世&#xff0c;恰好为软件开发者带来了全新的解决方案&#xff0c;它革新了软件的打包、分发和管理方式&#xff…

spark3.x新特性

Adaptive Query Execution自适应查询(SparkSQL) 由于缺乏或者不准确的数据统计信息&#xff08;元数据&#xff09;和对成本的错误估算&#xff08;执行计划调度&#xff09;导致生成的初始执行计划不理想 在Spark3.x版本提供Adaptive Query Execution自适应查询技术 通过在”…

redis集合Set

set是一种无序集合。它和列表的区别在于列表中的元素都是可以重复的&#xff0c;而set中的元素是不能重复的。而且set中的元素&#xff0c;并不像列表那样是具有顺序的。 SADD是添加一个元素。course是集合。 SMEMBERS SISMEMBER判断Redis在不在集合course里 SREM是用来删除Re…

VSCode美化

今天有空收拾了一下VSCode&#xff0c;页面如下&#xff0c;个人觉得还是挺好看的~~ 1. 主题 Noctis 色彩较多&#xff0c;有种繁杂美。 我使用的是浅色主题的一款Noctis Hibernus 2. 字体 Maple Mono 官网&#xff1a;Maple-Font 我只安装了下图两个字体&#xff0c;使…

C++算法补充---STL

这里写目录标题 CSTL容器字符串函数(string容器函数)字符串转字符 算法交换函数拿到容器或者数组的第一个最大&#xff08;小&#xff09;值元素的下标或者值排序函数求字符数组的有效长度atoi函数&#xff08;将字符串类型的数字转为真正的int型数字&#xff09;string转字符 …

RUST Rover 条件编译 异常处理

按官方处理发现异常 会报异常 error: failed to parse manifest at C:\Users\topma\RustroverProjects\untitled2\Cargo.toml 修改模式如下才能正常编译 网上说明 这样处理 [features] print-a [] print-b [] full ["print-a","print-b"]

Vue3组件计算属性的缓存

Vue.js3组件的方法-CSDN博客 使用Vue3组件的计算属性-CSDN博客 Vue3组件计算属性的get和set方法-CSDN博客 计算属性是基于它们的依赖进行缓存的。计算属性只有在它的相关依赖发生改变时&#xff0c;才会重新求值。 计算属性的写法和方法很相似&#xff0c;完全可以在method…