Kafka基础入门-代码实操

   Kafka是基于发布/订阅模式的消息队列,消息的生产和消费都需要指定主题,因此,我们想要实现消息的传递,第一步必选是创建一个主题(Topic)。下面我们看下在命令行和代码中都是如何创建主题和实现消息的传递的。

使用命令行操作Kafka

使用命令行操作主题

  • 使用kafka-topics.sh脚本来实现对Topic的操作
sh kafka-topics.sh

   执行命令之后,我们可以找到到下面这行提示,REQUIRED代表必须的,就是说我们想要实现对Kafak的操作必须要带有这个参数,表示我们要连接的Kafka具体服务。

--bootstrap-server <String: server to    REQUIRED: The Kafka server to connect  connect to>                              to.   

   接下来,就让我们创建一个主题吧。

# --bootstrap-server  用于指定我们连接的Kafka服务地址,9092是默认端口号  
# --topic  指定要操作的Topic名称  
# --create 表示本次是要创建一个主题  
sh kafka-topics.sh --bootstrap-server localhost:9092 --topic test  --create
# 执行结果
Created topic test.

   查看下我们的主题是否创建成功

sh kafka-topics.sh --bootstrap-server localhost:9092 --list    
# 执行结果
test

   查看某一个主题的详细信息

sh kafka-topics.sh --bootstrap-server localhost:9092 --topic test  --describe  
# 执行结果
Topic: test	TopicId: ehyjS3R3Saq8Cx2V1x0p7g	PartitionCount: 1	ReplicationFactor: 1	Configs: segment.bytes=1073741824Topic: test	Partition: 0	Leader: 1	Replicas: 1	Isr: 1

使用命令行消费数据

  • 我们通过kafka-console-consumer.sh来生产消息。
 sh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test#输出
hello kafka

使用命令行生产数据

  • 我们通过kafka-console-consumer.sh来生产消息。
sh kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test  
# 输入
>hello kafka

   想了解如何启动Kafka,可以看这篇文章《Kafka基础入门》。

使用代码操作Kafka

   添加依赖包

 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.7.1</version></dependency></dependencies>

生产者代码

        // 创建配置对象Map<String,Object> configMap = new HashMap<>();configMap.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"lcoalhost:9092");// 对生产的数据的K,V 进行序列化的操作configMap.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSelection.class.getName());configMap.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSelection.class.getName());// 创建生产者对象//      生产者需要设定泛型:数据类型的约束KafkaProducer<String,String> producer = new KafkaProducer<String,String>(configMap);// 创建数据//      构建数据时,需要传递三个参数//          第一个参数表示主题名称,主题不存在时会自动创建//          第二个参数表示数据的Key//          第二个参数表示数据的ValueProducerRecord<String,String> record = new ProducerRecord<String,String>("test","key","value");// 通过生产者对象,将数据发送到Kafkaproducer.send(record);//关闭生产者对象producer.close();

消费者代码

        // 创建配置对象Map<String,Object> configMap = new HashMap<>();configMap.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"lcoalhost:9092");// 对生产的数据的K,V 进行反序列化的操作configMap.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringSelection.class.getName());configMap.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringSelection.class.getName());configMap.put(ConsumerConfig.GROUP_ID_CONFIG,"com.kafka.test");// 创建消费者对象KafkaConsumer<String,String> kafkaConsumer = new KafkaConsumer<String,String>(configMap);//订阅主题kafkaConsumer.subscribe(Collections.singleton("test"));// 从Kafka中获取数据//      消费者从Kafka中拉取数据ConsumerRecords<String, String> datas = kafkaConsumer.poll(1000);datas.forEach(data ->{System.out.println(data);});// 关闭消费者对象kafkaConsumer.close();

在这里插入图片描述
点击下方名片,关注『编程青衫客』
随时随地获取最新好文章!

在这里插入图片描述

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

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

相关文章

【Linux 配置静态IP】Ubuntu20.04

最近学习网络编程&#xff0c;为了方便学习需要Ubuntu配置静态IP&#xff0c;网上看了好多贴子跟着试了下可以实现&#xff0c;但重启虚拟机后有时就无法连接&#xff0c;总之各种各样问题&#xff1b;相关的配置方法也比较凌乱&#xff0c;有用netplan 或者 ifupdown ,笔者简单…

数据库崩溃时事务的恢复机制

在数据库管理系统中&#xff0c;确保数据的一致性和完整性是至关重要的。特别是在面对系统崩溃或意外中断时&#xff0c;如何有效地恢复事务状态成为了一个关键问题。MySQL的InnoDB存储引擎通过引入REDO日志和UNDO日志机制&#xff0c;巧妙地解决了这一问题&#xff0c;确保了事…

C++知识点:C和C++(自用)

C和C 1.类和结构体的关系&#xff1a;2.面向对象和面向过程3.头文件和标准命名空间4.cin和cout5. const在C中和C中的区别6.const全局作用域7 new和delete8 内联函数9 函数重载10. 函数重载的匹配 引用&#xff1a; [1]C语言中文网 1.类和结构体的关系&#xff1a; 类是结构体的…

Linux bash: yum-config-manager: command not found的解决方法

yum-config-manager简介 Linux yum-config-manager 是一个用于管理 YUM 仓库配置的工具&#xff0c;它允许用户启用、禁用、添加或删除 YUM 仓库。这个命令在基于 Red Hat 的系统中广泛使用&#xff0c;比如 CentOS 和 Fedora。 可能原因 用户可能未安装 yum-utils 包&#…

Qt文件下载工具

在Qt中实现文件下载功能&#xff0c;通常可以通过多种方式来完成&#xff0c;包括使用 QNetworkAccessManager 和 QNetworkReply 类&#xff0c;或者使用更高级别的 QHttpMultiPart 类。以下是两种常见的实现方法&#xff1a; 方法1&#xff1a;使用 QNetworkAccessManager 和…

pxe高效网络批量装机

文章目录 一&#xff0c; PXE远程安装服务&#xff08;一&#xff09;三种系统装机的方式&#xff08;二&#xff09;linux装机1. 加载 Boot Loader2. 加载启动安装菜单3. 加载内核和 initrd4. 加载根文件系统5. 运行 Anaconda 安装向导 &#xff08;三&#xff09;实现过程&am…

【ROS2】测试

为什么要进行自动化测试&#xff1f; 以下是我们应该进行自动化测试的许多重要原因之一&#xff1a; 您可以更快地对代码进行增量更新。ROS 有数百个包&#xff0c;具有许多相互依赖关系&#xff0c;因此很难预见一个小变化可能引起的问题。如果您的更改通过了单元测试&#xf…

语言主要是一种交流工具,而不是思维工具?GPT5何去何从?

引言 在人工智能领域&#xff0c;特别是大语言模型&#xff08;LLM&#xff09;的发展中&#xff0c;语言和思维的关系一直是一个备受关注的话题。近期&#xff0c;麻省理工学院&#xff08;MIT&#xff09;在《Nature》杂志上发表了一篇题为《Language is primarily a tool f…

Unity踩坑之RectTransformUtility.ScreenPointToLocalPointInRectangle

此方法会将屏幕坐标点转换为UI的本地坐标点&#xff0c;即UI子物体相对于父物体的相对位置。不过值得注意的是&#xff1a;当父物体的锚点不在中心时&#xff0c;可能比较麻烦&#xff0c;因为UI的本地坐标是相对于父物体的锚点来计算的。 RectTransformUtility.ScreenPointToL…

linux进程——概念理解与PCB

前言&#xff1a;本篇讲解Linux进程概念相关内容。 操作系统被称为计算机世界的哲学&#xff0c; 可以见得操作系统的知识并不好理解。 对于这篇进程概念的讲解&#xff0c; 博主认为&#xff0c; 如果没有一些前置知识的话&#xff0c;里面的有些概念并不好理解。 但是如果学习…

SQL Server 用户应当如何防范 Mallox (.hmallox) 勒索软件袭击

勒索软件领域的特点是随着时间的流逝&#xff0c;参与者群体和恶意软件家族都会大量流失&#xff0c;只有少数参与者表现出相对长寿的寿命。曾经令人担忧的威胁&#xff0c;如 REvil 和 Conti&#xff0c;要么被铲除&#xff0c;要么被解散&#xff0c;而其他威胁——例如 ALPH…

UGUI优化篇(更新中)

UGUI优化篇 1. 基础概念2. 重要的类1. MaskableGraphic类继承了IMaskable类2. 两种遮罩的实现区别RectMask2DMask 3. 渲染部分知识深度测试深度测试的工作原理 渲染队列透明物体在渲染时怎么处理为什么透明效果会造成性能问题 1. 基础概念 所有UI都由网格绘制的如image由两个三…

Leetcode(经典题)day4

滑动窗口 长度最小的子数组 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 使用滑动窗口&#xff0c;当前窗口大小的数组的和比目标值小就加大窗口&#xff08;r&#xff09;&#xff0c;当前窗口大小的数组的和比目标值大或相等&#xff0c;就减小窗口大小…

力扣题解(不同的子序列)

115. 不同的子序列 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 思路&#xff1a; 本题研究的是t在s中出现的次数&#xff0c;注意t一定是小的那个&#xff0c;是s的子串。 dp[i][j]表示t的&#xff…

25届平安产险校招测评IQ新16PF攻略:全面解析与应试策略

尊敬的读者&#xff0c;您好。随着平安产险校招季的到来&#xff0c;许多应届毕业生正积极准备着各项测评。本文旨在提供一份详尽的测评攻略&#xff0c;帮助您更好地理解平安产险的校招测评流程&#xff0c;以及如何有效应对。 25届平安产险平安IQ&#xff08;新&#xff09;测…

AI大模型探索之旅:深潜大语言模型的训练秘境

在人工智能的浩瀚星空中&#xff0c;大语言模型无疑是最耀眼的星辰之一&#xff0c;它们以无与伦比的语言理解与生成能力&#xff0c;引领着智能交互的新纪元。本文将带您踏上一场探索之旅&#xff0c;深入大语言模型的训练秘境&#xff0c;揭开其背后复杂而精妙的全景画卷。 …

Java常用API---Object类

Object类概述 概述 Object类是所有类的父类&#xff0c;任何一个类的对象(包括数组)&#xff0c;都可以调用Object类的方法 目标: 掌握Object类的常用方法 常用方法&#xff1a; boolean equals(Object obj)&#xff1a;判断当前对象是否与参数对象"相等" Strin…

Linux时间查看和设置

查看时间 date 命令&#xff0c;输出 Sun Jul 14 07:23:03 PM CST 2024timedatectl 命令&#xff0c;输出 Local time: Sun 2024-07-14 10:30:00 CSTUniversal time: Sun 2024-07-14 02:30:00 UTCRTC time: Sun 2024-07-14 02:30:00Time zone: Asia/Shanghai (CST, 0800) Sys…

汇编学习基础知识【记录】

前言 又是快乐的学习汇编的一天&#xff0c;时间如白驹过隙&#xff0c;抓紧时间&#xff0c;在学习能力最好的年纪多学习一些知识&#xff0c;朝着美好生活而奋斗&#xff01;哈哈哈 参考文章&#xff1a; https://blog.csdn.net/Z_H_Z_0/article/details/106574292 知识补…

给 「大模型初学者」 的 LLaMA 3 核心技术剖析

编者按&#xff1a; 本文旨在带领读者深入了解 LLaMA 3 的核心技术 —— 使用 RMSNorm 进行预归一化、SwiGLU 激活函数、旋转编码&#xff08;RoPE&#xff09;和字节对编码&#xff08;BPE&#xff09;算法。RMSNorm 技术让模型能够识别文本中的重点&#xff0c;SwiGLU 激活函…