kafka笔记

1 为什么使用消息队列

1.使用同步的通信方式来解决多个服务之间的通信

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8WH3tKOD-1639123889279)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639028867343.png)]

同步的通信方式会存在性能和稳定性的问题

2.使用异步的通信方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oTjtwUre-1639123889281)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639032472714.png)]

针对同步的通信方式来说,异步的方式,可以让上有快速成功,极大提高了系统的吞吐量。而且在分布式系统中,通过下游多个服务的分布式事务的保障,也能保障业务执行之后的最终一致性。

消息队列解决具体的是什么问题–通信问题

2.消息队列的流派

目前消息队列的中间件

  • rabbitMQ
  • rocketMQ 阿里内部的大神模仿kafka的内部执行原理,手写的一个消息队列中间件。性能与kafka比肩,除此之外,在功能上封装了更多的功能
  • kafka
  • zeroMQ

消息队列中间件的区别

1、有broker
  • 重topic Kafka\RocketMQ\ ActiveMQ

    整个broker,根据topic来进行消息的中转。在重topic的消息队列里必然需要topic的存在

  • 轻topic RabbitMQ

    topic只是一种中转模式

2、broker

在生成者和消费者之间没有使用broker,例如zeroMQ,直接使用socket进行通信

kafka的基本知识

kafka的安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CkKqknrw-1639123889282)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639035425098.png)]

kafka中的基本概念

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uaJOzRls-1639123889286)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639035753864.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KrLuuFbA-1639123889287)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639035785309.png)]

启动zookeeper
 .\zookeeper-server-start.bat ..\..\config\zookeeper.properties
启动kafka
.\bin\windows\kafka-server-start.bat .\config\server.properties
创建topic
  • 通过kafka命令向zk中创建一个主题
.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
  • 查看当前zk中所有的主题
 .\bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
发送消息

把消息发送给broker中的某个topic,打开一个kafka发送消息的客户端,然后开始用客户端向kafka服务器发送信息

kafka自带一个producer命令客户端,可以从本地文件中读取内容,或者我们也可以以命令行直接输入内容,并将这些内容以消息的形式发送到kafka集群中。在默认的情况下,每一个行会被当做一个独立的消息。使用kafka的发送消息的客户端,指定发送到的kafka服务器地址和topic

创建生产者
 .\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FbaI5M9i-1639123889288)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639098541474.png)]

创建消费者

对于consumer,kafka同样也携带了一个命令行客户端,会将获取到内容在命令中进行输出,默认是消费最新的消息。使用kafka的消费者信息的客户端,从定kafka服务器的指定topic中消费信息

  • 方式一:从最后一条消息的偏移量+1开始消费

     .\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test
    
  • 方式二:从头开始消费

     .\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092  --topic test 
    
关于消费的细节

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3x1Xduj3-1639123889289)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639101722163.png)]

  • 生产者将消息发送给broker,broker会将消息保存在本地的日志文件中
E:\idea\kafkatool\kafka\kafka_2.12-1.0.0\tmp\kafka-logs\主题-分区\00000000000000000000.log
  • 消息的保存是有序的,通过offset偏移量来描述消息的有序性
  • 消费者消费消息时也是通过offset来描述当前要消费的那条消费的位置
单播消息

在一个kafka的topic中,启动两个消费者,一个生产者,问:生产者发送消息,这条消息是否同时会被两个消费者消费?

如果多个消费者在同一个消费组,那么只有一个消费者可以收到订阅的topic的消息。换言之,同一个消费组中只能有一个消费组收到一个topic中的消息

 .\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --consumer-property group.id=testGroup --topic test
多播消息

不同的消费组订阅同一个topic,那么不同的消费组中只有一个消费者能收到消息。实际上也就是多个消费组中的多个消费者收到了同一个消息

.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --consumer-property group.id=testGroup1 --topic test
.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --consumer-property group.id=testGroup --topic test

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6cwoRq4o-1639123889290)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639104139650.png)]

查看消费组及信息
# 查看当前主题下有哪些消费组
.\bin\windows\kafka-consumer-groups.bat --bootstrap-server localhost:9092 --list
# 查看消费组中的具体信息:比如当前偏移量、最后一条消息的偏移量、堆积的消息数量
.\bin\windows\kafka-consumer-groups.bat --bootstrap-server localhost:9092 --describe --group testGroup

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ONUDE3HH-1639123889291)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639105436036.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-31fFp18V-1639123889292)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639105680325.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zRp431gS-1639123889294)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639105636681.png)]

Kafka中主题和分区的概念

主题Topic

主题-topic在kafka中是一个逻辑的概念,kafka通过topic将消息分类。不同的topic会被订阅该topic的消费者消费

但如果整个topic中的消息非常多(几个T),因为消息是会被保存到log日志文件中的。为了解决整个文件过大的问题,kafka提出了partition分区的概念

Partition分区

通过partition将一个topic中的消息分区来存储。这一的好处有多个:

  • 分区存储,可以解决统一存储文件过大的问题
  • 提供了读写的吞吐量:读和写可以同时在多个分区中进行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yibjqg22-1639123889295)(F:\大学\大四\软件设计\笔记\1639106610875.png)]

创建多分区的主题
.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic test1
kafka中消息日志文件中保存的内容
  • 00000.log:整个文件中保存的就是消息

  • __consumer_offsets-49:

    kafka内部创建了__consumer_offsets主题包含了50个分区。这个主题用来存放消费者消费某个主题的偏移量。因为每个消费者都会自己维护着消费的主题的偏移量,也就是说每个消费者会把消费的主题的偏移量自主上报给kafka中的默认主题:__consumer_offsets。因此kafka为了提升这个主题的并发性,默认设置了50个分区。

    • 提交到哪个分区:通过hash函数:hash(consumerGroupid)%_consumer_offsets主题的分区数
    • 提交到该主题中的内容是consumerGroupId+topic+分区号,value就是当前offsset的值
  • 文件中保存的消息,默认保存7天。七天到期后会自动删除。

Kafka集群操作

搭建kafka集群(三个broker)
  • 创建三个server.properties文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-la2fnur0-1639123889296)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1639122555842.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值