kafka消息队列的初步探索

news2024/9/21 3:23:30

消息队列的作用就是提高运行速度,防止线程堵塞。

kafka的作用

    异步

 通过在消息队列发送消息的方式,将对应的业务作为监听者,此时我们只需要考虑发送消息的时间即可,大大提高了运行的速度。

    解耦

 

如果使用原来的直接调用对应业务的方式,在被调用业务发生修改是,调用业务也需要修改代码,存在很大的耦合,所以使用消息队列的方式,后续我们只需要关注消息的发送,无需关注业务的内部实现,大大的降低了耦合性。 

     削峰

在一些业务场景小(如:限时秒杀),此时在同一个时间内会有大量的请求发向服务器,这就会导致服务器瘫痪,所以这里引入的消息队列的方式,这些请求会一一的给消息队列发送消息,服务器通过一次处理对应个数的消息来处理对应的请求,最终实现削峰,防止服务器瘫痪。

     缓冲

 和削峰类似就是通过消息队列的形式处理请求,防止服务器瘫痪。

消息模式 

1.消息点对点模式

 一对一的形式,消费者每次从消息队列中接收一个消息,在确定接收后,消息队列就会将刚刚被接收的消息从消息队列中删除。

2.消息发布订阅模式

 在消息队列中存储的消息会被分为不同的主题里(其实就是将这些消息进行分组), 消费者就是去订阅对应的topic,消费者也可以组成对应的消费者组,此时消费者就从对应的topic中获取对应的消息,在其中存在偏移量这个数据(offset),通过该偏移量获取对应的位置的消息。重点来了,在该消息队列中的消息在被使用后是不会被移除的

kafka工作原理 

 在未来的项目中,我们大多都是已微服务的形式进行开发,此时消息队列中同个topic中的消息可能会存在于不用的服务器上,这就是进行分区。为了防止其中某太服务器发生宕机后影响项目的运行,我们可以在对应分区中存储其他分区中的消息,实现备份在宕机时不影响项目的运行,此过程就是创建副本

 springboot整合kafka

导入kafka整合springboot依赖

<dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency><dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>

 发布消息

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.kafka.core.KafkaTemplate;

@SpringBootTest
class KafkatestApplicationTests {

    @Autowired
    KafkaTemplate kafkaTemplate;

    @Test
    void test1() {
//设置默认的主题
        kafkaTemplate.setDefaultTopic("tiktop");
//在对应主题中添加消息,此消息以键值对的形式
        kafkaTemplate.send("tiktop", "抖音消息", "你好,秃狼");

    }

}

 测试结果为下:

特殊情况(无法识别到主机)

 解决方法(在hosts中设置主机地址)

 通过火绒修改hosts。

 设置消息的value为实体类类型

我们通过application.properties进行设置。

#设置消息值的类型,这里设置为json类型,这样我们就可以在消息中传入实体类
spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer

默认的value的序列化类型是: 

可以设置的序列化类型为下: 

 测试结果为下:

创建消费者 

 创建消费者

group表示该消费者的分组。

topicPartitions是监听的所有的topic和分区,@TopicPartition就是设置对应topic区的topic名字,和对应偏移量和分区(在监听中可能会同时监听多个topic)。

partitionOffsets就是设置所有分区和偏移量(在监听中可能同时监听多个分区中,在该分区中会有不同的偏移量)
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.annotation.PartitionOffset;
import org.springframework.kafka.annotation.TopicPartition;
import org.springframework.stereotype.Component;

@Component
public class Listener {
    /**
     * group表示该消费者的分组
     * topicPartitions是监听的所有的topic和分区,@TopicPartition就是设置对应topic区的topic名字,和对应偏移量和分区(在监听中可能会同时监听多个topic)
     * partitionOffsets就是设置所有分区和偏移量(在监听中可能同时监听多个分区中,在该分区中会有不同的偏移量)
    */
    @KafkaListener(groupId = "toktop-server", topicPartitions = {
            @TopicPartition(topic = "tiktop", partitionOffsets = {
                    @PartitionOffset(partition = "0", initialOffset = "0")
            })
    })
    public void listen(ConsumerRecord consumerRecord) {
        //ConsumerRecord就是整个消费者的信息
        Object key = consumerRecord.key();
        System.out.println("key=" + key);
        Object value = consumerRecord.value();
        System.out.println("value=" + value);
    }
}

在启动类上添加kafka的注解驱动,这样@KafkaListener才会被识别。(@Enablekafka)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.EnableKafka;

@SpringBootApplication
//开启kafka的注解驱动
@EnableKafka
public class KafkatestApplication {

    public static void main(String[] args) {
        SpringApplication.run(KafkatestApplication.class, args);
    }

}

进行启动测试,测试结果为下

 在启动后消费者会直接监听消息队列,测试我们将偏移量设置为0,也就是从头部开始,此时消费者监听到消息队列中的两个消息,最终将通过的信息输出。(注意使用的模式是:发布和订阅模式,所以接收到消息后不会将消息删除,而是改变偏移量

kafka自动配置

kafka 自动配置在KafkaAutoConfiguration

  1. 容器中放了 KafkaTemplate 可以进行消息收发
  2. 容器中放了KafkaAdmin 可以进行 Kafka 的管理,比如创建 topic 等
  3. kafka 的配置在KafkaProperties中
  4. @EnableKafka可以开启基于注解的模式

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

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

相关文章

【libdatachannel】pycharm运行streamer的信令服务及streamer与js客户端联调

启动py服务器 ssl必须额外指定 # Usage: ./server.py [[host:]port] [SSL certificate file]文档给出了服务的启动命令&#xff1a; python3 -m http.server --bind 127.0.0.1 8080 直接运行&#xff1a; python的信令服务 #!/usr/bin/env python # # Python signaling server…

需求分析引言:架构漫谈(二)非功能性需求

上一篇文章&#xff0c;简要介绍了架构的概念和架构设计流程&#xff0c;并简单介绍了需求分析的内容&#xff0c; 并在最后指出&#xff1a;需求分析的产出物&#xff0c;要包括非功能性需求&#xff0c;常见的非功能性需求如下&#xff1a; 完成任务的速度结果的精度操作的安…

MySQL实战解析底层---为什么表数据删掉一半,表文件大小不变

目录 前言 参数innodb_file_per_table 数据删除流程 重建表 Online 和 inplace 前言 数据库占用空间太大&#xff0c;我把一个最大的表删掉了一半的数据&#xff0c;怎么表文件的大小还是没变&#xff1f;这与数据库表的空间回收有关这里还是针对MySQL中应用最广泛的InnoD…

结构型设计模式07-享元模式

&#x1f9d1;‍&#x1f4bb;作者&#xff1a;猫十二懿 ❤️‍&#x1f525;账号&#xff1a;CSDN 、掘金 、个人博客 、Github &#x1f389;公众号&#xff1a;猫十二懿 享元模式 1、享元模式介绍 享元模式是一种结构型设计模式&#xff0c;旨在**通过共享对象来减少内存使…

CSS弹性布局常用设置

目录 一、单位元素 二、弹性容器 三、常用属性 三、项目实战效果 一、单位元素 vm 1vm 为视口的1% vh 视口高的1% vmin 参照长边 vmax 参照长边 rem 等比缩放 需要设置最外层盒子html设置vw 根字号html的--- font-- 1vm 去适配 初始化 //初始化*{padding: 0;margin: 0}//…

机器学习笔记 - 通过一个例子来快速理解自注意力机制/缩放点积注意力机制

一、一个简单的示例 请看下面的例句:A dog ate the food because it was hungry(一只狗吃了食物,因为它很饿) 例句中的代词it(它)可以指代dog(狗)或者food(食物)。当读这段文字的时候,我们自然而然地认为it指代的是dog,而不是food。但是当计算机模型在面对这两种选…

CVPR首个大模型研讨会顺利召开,吸引超1000支队伍参与文心大模型国际比赛

CVPR 作为计算机视觉和模式识别领域的世界级学术顶会&#xff0c;不仅是学者们展示前沿科技成果的学术会议&#xff0c;也是企业界探索前沿应用的一大平台。近年来&#xff0c;随着大模型技术的爆发式发展&#xff0c;基于大模型技术的创新应用正逐步在产业界释放出巨大价值空间…

网易云信陈丽:做泛娱乐出海新浪潮中的坚实助力者

6 月 16 日下午&#xff0c;在 PAGC 2023 泛娱乐出海论坛上&#xff0c;网易智企副总经理、网易云信总经理陈丽分享了对全球化出海的趋势洞察和未来展望&#xff0c;并介绍了网易云信在帮助泛娱乐出海业务增长方面的探索和实践。 陈丽表示&#xff0c;网易云信志在成为中国开发…

STM32开发——非标协议(DH11+LCD1602)

1.STM32分文件实现代码 编译的总文件夹dh11andlcd&#xff0c;C文件不能跨文件夹查找&#xff0c;新增的分文件&#xff0c;需要都放调用的文件夹下 C文件和H文件理解&#xff1a;H文件是门脸&#xff0c;放在前面给别人的&#xff0c;别人一看就知道有什么东西。C是给内部人用…

记录--新的HTML标签 :search

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 本文介绍了一种新的HTML元素搜索方法&#xff0c;并提供了一个实用的工具来帮助开发者快速找到所需的元素。这对于那些需要处理大量HTML元素的开发者来说是非常有用的。文章还通过提供一些常见元素的用…

AutoSAR系列讲解(入门篇)1.1-AutoSAR的发展史

一、AutoSAR成员 大体可以分为核心成员、高级成员和发展成员&#xff0c;可以打开AutoSAR官网的成员的介绍界面 所以有兴趣的小伙伴可以稍微了解一下&#xff0c;仅作了解就行&#xff0c;不是什么重要的知识 还有一张大家经常能看见的成员图&#xff0c;如下 二、AutoSAR历史…

国潮之美丨土家族西兰姑娘续写千年非遗传奇

光脚丫&#xff0c;童年时期的行为艺术 还记得儿时的夏夜&#xff0c;姥爷总说&#xff1a;“娃儿呀&#xff0c;光着脚在地上跑&#xff0c;接地气些”。那时只觉得脱掉鞋袜顿时轻松自在&#xff0c;从坡上冲到坡下&#xff0c;几个伙伴乐此不疲。后来长大了&#xff0c;穿着…

盘点一个Python网络爬虫过验证码的问题(方法一)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 低眉信手续续弹&#xff0c;说尽心中无限事。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python最强王者群【鶏啊鶏。】问了一个Python网络爬虫的…

SSH连接异常:从迷茫到石破天惊的解决之道

文章目录 零&#xff1a;前言一&#xff1a;SSH1.1 SSH的连接类型、方式和端口1.2 常见端口及其类型 二&#xff1a;解决SSH连接异常第一步&#xff1a;欣赏报错&#xff0c;顺藤摸瓜第二步&#xff1a;异常窥探&#xff0c;摸石过河第三步&#xff1a;问题确定&#xff0c;斩首…

测试技术体系

目录&#xff1a; 软件测试分类分层测试体系 1.软件测试分类 软件测试的分类_安全性测试属于功能测试吗_阿瞒有我良计15的博客-CSDN博客 1.单元测试&#xff08;Unit Testing&#xff09;&#xff1a;单元测试是指对软件的最小可测试单元进行测试&#xff0c;例如一个函数、一…

Cell — 新“出芽”方法为疫苗开发带来优势

在疫苗学中&#xff0c;基于mRNA向体内递送抗原编码基因同基于纳米颗粒向体内递送抗原在应对具有挑战性的病原体方面都显示出巨大的前景。本期的《Cell》中&#xff0c;Hoffmann等人将两种方法相结合&#xff0c;通过调节被许多病毒劫持的相同细胞代谢通路来增强SARS-CoV-2疫苗…

【UCOS-III】自我学习笔记→第27讲→优先级翻转

文章目录 前言实验步骤1.复制二值信号量工程&#xff0c;添加task2和task3&#xff0c;修改任务服务函数名称2.修改开始任务&#xff0c;任务1以及任务2、3的内容3.查看串口现象![在这里插入图片描述](https://img-blog.csdnimg.cn/efa5ee2d92b54fe8be5a419adcf92ead.png) 测试…

STM32速成笔记—DMA

文章目录 一、什么是DMA二、DMA有什么作用三、STM32的DMA3.1 DMA请求3.2 DMA通道3.3 仲裁器 四、DMA配置4.1 DMA配置步骤4.2 DMA结构体成员 五、DMA配置程序5.1 ADC1初始化程序5.2 DMA初始化程序 一、什么是DMA DMA全程Direct Memory Access&#xff0c;即直接存储器访问。简单…

如何保护阿里云服务器免受DDoS攻击和恶意访问?有哪些防护措施?

如何保护阿里云服务器免受DDoS攻击和恶意访问&#xff1f;有哪些防护措施&#xff1f;   [本文由阿里云代理商[聚搜云]撰写]   随着互联网技术的不断发展&#xff0c;网络安全问题日益严峻&#xff0c;保护服务器免受DDoS攻击和恶意访问成为了每个企业和网站建设者的关注重…

W3B x Sui Hacker House|深入了解Sui和Move语言

Web3 Builders&#xff08;W3B&#xff09;作为Hacker House的践行者&#xff0c;将于6月23日&#xff08;周五&#xff09;早上8点&#xff08;GMT8&#xff09;举办首期 W3B x Sui Hacker House 系列活动分享会。本期活动邀请到Sui联合创始人Sam Blackshear&#xff08;Move语…