Kafka详解

本文介绍了Kafka相关知识。消息队列(MQ)是企业IT系统内部通信核心手段,Kafka属于MQ订阅模式。它有解耦、异步、削峰三大特性,强依赖Zookeeper,由broker、topic、分区等组成,生产消费时用offset标记数据是否被消费,最小单元是message。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.什么是kafka:

1.什么是MQ(message queue):
消息队列(MQ)已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。
2.kafka:
属于MQ中的订阅模式,即消息被消费后也不会被立即删除,而是定时删除,但同一组的消费者只能消费一次一个数据。

二.Kafka:
1.三大特性:

1.解耦:存储数据,但不会强制发送数据到消费者,需要消费者自己来拉取数据。如:客户端向后台发送一个数据,客户端只需要将数据放到kafka内部,后台会定时,自动来的拿取数据。但如果服务器宕机,则不会要求客户端重新操作,kafka会在一定时间内存放这个数据,直到服务器恢复来消费。(数据消费不会立即删除)
2.异步:异步操作,一般会启动一个线程,将执行真实的步骤放到这个线程内,在主线程,一旦调用该方法,就立即返回结果。而在kafka内则会启动一个进程。
3.削峰:减轻服务器压力,防止数据量过大,服务器崩溃。将数据暂存到kafka,服务器消费完一定的数据,再来拉取。

2.kafka的组成:
在这里插入图片描述

如图:

1.kafka强依赖于zookeeper,它会将内部元数据信息发送到zookeeper中,但会将topic放到每一个broker里。
2.每一个broker代表一个主机,用于存放topic。
3.生产者在生产消息的时候,会指定一个topic,一个topic就代表一个类型的信息。在创建topic时,会将topic放到所有的broker里。
4.一个topic里又会将消息按区存放,分区数由创建topic时指定。若分区数大于主机数,则会将分区进行轮询的放到每一台主机。如:三台主机,6个分区,则会以3为一个轮询,即前三个分区分别放到对应broker,后三个分区再按顺序放到三个主机中。一个主机连个分区。
5.每个分区都有一个对应的leader主机,用于对该分区进行写操作。在创建分区时,我们还会指定副本书,即保证每个topic都有相同的分区,但对分区进行写操作的只能是属于那个分区的leader。在对分区写入数据后,kafka会将数据同步到其他的副本。
6.消费者在消费一个topic时,针对同一个分区,是按照顺序读取数据。则很难对不同分区,则对不同分区的数据进行随机拿取。
7.partition在内部又进行了一个细致的划分,叫Segment.即数据量超过1个G,就会产生一个新的segment。segment里放了两个文件(.index和.log),.index文件存放的是键值对(offset值和二进制数据起始位置(对应到.log文件里数据)),.log文件存放的是实际数据。
注:
1.kafka标记数据是否被消费,使用offset进行标记,消费者消费后,offset会自动增加,否则会导致数据被重复消费。
2.kafka里的最小单元为message。

生产,消费流程:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值