kafka配置

苍老师下载kafa

cmd
z然后按住tab

先运行zookeeper
然后打这个命令:
zookeeper-server-start.bat …\config\zookeeper.properties

再运行
kafak

kafka-server-start.bat …\config\server.properties

消息队列

下载Kafka

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eb0sbElM-1653008906494)(image-20220519145456971.png)]

Dubbo远程调用的性能问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UmWEzUYC-1653008906499)(image-20220519152055211.png)]

任何dubbo调用都有这个问题

就是Dubbo中的消费者在调用服务的提供者之后,是等待服务提供者响应结果之后,才能运行后面的操作的,这个过程中,消费者程序进入阻塞状态属于资源的浪费

在非极致要求高并发性能的前提下,Dubbo的内部的资源使用缺陷是可以接受的

但是在极致要求高并发性能环境下,并且我们对生产者的结果不迫切需求时,我们就可以使用消息队列代替Dubbo调用,消除消费者线程的阻塞

什么是消息队列

消息队列(Message Queue)简称MQ

消息队列是采用"异步(两个微服务项目并不需要同时完成请求)"的方式来传递数据完成业务操作流程的业务处理方式

消息队列的优缺点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r2tdC6zv-1653008906501)(image-20220519154952335.png)]

常见面试题

  • 利用异步的特性,提高服务器的运行效率,减少线程阻塞的时间
  • 削峰填谷:在并发峰值的瞬间将信息保存到消息队列中,依次处理,不会因短时间需要处理大量请求而出现意外,在并发较少时在依次处理队列中的内容,直至处理完毕
  • 消息队列的弊端:因为是异步执行,order模块完成响应时,stock模块可能还没有运行,这样的话就可能出现延迟的现象,如果不能接受这种延迟,就不要使用消息队列

常见的消息队列软件

  • Kafka:性能好
  • RabbitMQ:功能好
  • RocketMQ:阿里的
  • ActiveMQ:几年前流行的

常见面试题:死信队列

如果不使用消息队列,我们可以使用Seata或类似的事务管理工具,保证数据的完整性,但是一旦有消息队列的加入,那么Seata就不能使用了

如果消息的接收方运行发生异常或错误,我们可以在发生异常错误处理的位置

进行代码的编写,手动实现数据的回滚,也就是向消息的来源发送信息,让消息的来源处理异常恢复数据之前的样子

如果在消息队列发送和接收的过程中不断发生异常,我们需要选择一个节点,最终向消息队列指定名称中发送一个信息,这个信息中只有错误发生的描述

但是没有任何程序在接收,这就是死信队列

死信队列中的信息会定期有人工处理,修改数据库中的信息

Kafka

什么是Kafka

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。Kafka最初是由LinkedIn开发,并随后于2011年初开源。

kafka的软件结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wr18vnOx-1653008906503)(image-20220519162807497.png)]

Producer:消息的发送方,也就是消息的来源,Kafka中的生产者

​ order就是消息的发送方

Consumer:消息的接收方,也是消息的目标,Kafka中的消费者

​ stock就是消息的接收方法

Topic:话题或主题的意思,消息的收发双方要依据同一个话题名称,才不会将信息错发给别人

Record:消息记录,就是生产者和消费者传递的信息内容,保存在指定的Topic中

Kafka的特征与优势

Kafka作为消息队列,它和其他产品相比,突出的特征就是性能优秀

Kafka是将消息队列中的信息保存在硬盘中的,

但是Kafka对硬盘读取效率的优化,可以做到和内存效率接近,

主要依靠"顺序读写,零拷贝,日志压缩等技术"

Kafka处理队列中数据的默认设置

Kafka队列中的信息能够一直向硬盘中保存(理论上没有大小限制)

Kafka默认队列中的信息保存7天,缩短这个时间会减少硬盘空间消耗

kafka的安装和启动

最好找到一个根目录路径下解压kafka

然后路径不要有空格和中文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lPxXYgJJ-1653008906505)(image-20220519165423916.png)]

创建一个空文件夹,用于保存数据,文件夹名称随意,但必须是空的

本次创建名称为Data

没有所谓的安装操作,我们启动它就可以了

但是启动kafka之前,必须先启动zookeeper软件,才能启动kafka

先到F:\kafka\config下配置有文件zookeeper.properties

找到dataDir属性修改如下

dataDir=F:/data

注意F盘和data文件夹名称,匹配自己电脑的真是路径和文件夹名称

还要修改server.properties配置文件

log.dirs=F:/data

修改注意事项和上面相同

下面开始先启动zookeeper

进入路径F:\kafka\bin\windows

在地址栏输入cmd进入dos,输入下面命令启动zookeeper

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mqu3pvFL-1653008906506)(image-20220519173430192.png)]

zookeeper-server-start.bat ..\..\config\zookeeper.properties

同样的方法启动kafka

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RHdfrpaj-1653008906507)(image-20220519173804422.png)]

kafka-server-start.bat ..\..\config\server.properties

两个项目启动之后不要关闭dos窗口

附录

Mac系统启动Kafka服务命令(参考):

# 进入Kafka文件夹
cd Documents/kafka_2.13-2.4.1/bin/
# 动Zookeeper服务
./zookeeper-server-start.sh -daemon ../config/zookeeper.properties 
# 启动Kafka服务
./kafka-server-start.sh -daemon ../config/server.properties 

Mac系统关闭Kafka服务命令(参考):

# 关闭Kafka服务
./kafka-server-stop.sh 
# 启动Zookeeper服务
./zookeeper-server-stop.sh

在启动kafka时有一个常见错误

wmic不是内部或外部命令

这样的提示,需要安装wmic命令,安装方式参考

https://zhidao.baidu.com/question/295061710.html

测试kafka

在cart-webapi项目中

添加依赖

<!-- Google JSON API -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
</dependency>
<!-- Kafka API -->
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

yml文件添加配置

spring:
  kafka:
    # 定义kafka的位置
    bootstrap-servers: localhost:9092
    # 为当前项目的所有话题设置前缀,也就是分组名称,是框架强制要求配置的
    consumer:
      group-id: csmall

SpringBoot启动类

@SpringBootApplication
@EnableDubbo
// ↓↓↓↓↓↓↓↓↓
@EnableKafka
// 激活SpringBoot自带的调度工具
@EnableScheduling
public class CsmallCartWebapiApplication {

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

}

我们要实现周期性的向kafka发送信息

也就是利用SpringBoot的调度工具每隔一段时间运行包含向kafka发送信息的代码

再编写Kafka的消费者(信息接收方)接收信息并输出

随笔

布隆过滤器计算器

https://hur.st/bloomfilter

windows安装redisbloom布隆过滤器

https://blog.csdn.net/weixin_44770915/article/details/107918770

选举的过程

image-20220519143552334

一个集群服务器要选出一个领导

一般的做法是,每个服务器向其他服务器发送请求

每个服务器也对其他服务器发送过来的请求做响应

但是每个服务器只响应第一个发送到本服务的请求(每个服务器只有一张选票)

最终获得响应(选票)最多的服务器称为集群的领袖(Leader)

Lead负责统筹和通用配置和组织工作

当各个服务器信息有分歧时,各个服务器,会比对有分歧的信息,然后少数服从多数

一般集群数量是单数,不会出现平票情况

削峰填谷

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-60gneOn0-1653008906509)(image-20220519153958574.png)]

zookeeper

zoo:动物园

keeper:维持者

zookeeper可以翻译为动物管理员

大数据很多软件使用动物logo

zookeeper就是管理很多软件配置的文件系统

实现各种软件将配置信息保存在zookeeper中,

我们需要修改配置文件信息时,只需要修改Zookeeper中的信息就可以了

长此以往,很多软件就直接将配置文件保存在zookeeper中

Kafka就是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值