Kafka需要知道的一些基础知识点

本文详细介绍了Kafka的基础知识,包括Kafka版本查看、整体架构、topic与partition的概念、消费正确性保障、group机制、消息存储与查找机制、日志刷盘原理以及消息的有序性。Kafka消息存储采用分区和分段机制,通过offset管理消费位置,保证每个partition内的消息顺序,但全局有序性需通过单partition实现。

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

前言

kafka是常用MQ的一种,站在使用者的角度来看待,kafka以及所有的MQ应该是这样的:

(注意箭头的方向)

这个一点问题都没有,即使你站在MQ的开发者的角度,这个图也是没问题的,你就当它是这样的用就行。

但是,如果你是站在一个候选人或者面试官的角度,上面这个图就不行了,所以没法办,扣的就是细节,问的就是原理。

而上图,仅仅只能代表MQ的一种思想或者说理念。

Kafka版本查看

不得不说,就像个大傻叼,Kafka没提供直接方便查看的命令,且,命名也恶心的一逼。

笔者是Mac电脑,用brew方式安装的。

/usr/local/Cellar/kafka/2.2.1 通过这个安装目录结构就能看出,笔者目前用的是2.2.1版本

至于 /usr/local/Cellar/kafka/2.2.1/libexec/libs这个目录下的一堆东西,也可以分辨出来

2.12-2.2.1 前面的2.12说的是Scala版本,后面的是Kafka版本。

Kafka整体架构

Kafka cluster

站在运维的角度来看,Kafka集群就是这样的(忽略zk)

首先要明白,Kafka是以集群部署的方式对外提供服务的。

Kafka所说的这个broker就是我们说的集群中的一个实例,你理解为一个Kafka进程或者一台机器或者一个节点都行。

问题1:Kafka集群,消息数据如何存储的?

是像redis cluster这种,每个集群中的实例只存部分数据,所有实例加起来才是完整的redis数据?

还是像zk cluster这种,每个集群中的实例,数据都一样?

这里需要先介绍另一个Kafka中的概念:topic

topic是什么

在实际生产工作中,并不是一个场景使用这个Kafka集群,可能几个业务公用一个Kafka,这就出现来一个问题,我们好几方生产者,往同一套Kafka里塞各自的消息,我们好几方的消费者,咋区分这些消息哪些是我所需要的呢?

我们自己可以解决:生产者和消费者约定好一个标记,我们为这个消息打上这个标记,消费者只消费带有这个标记的消息。

所以消费者每次接到消息,都要判断

if msg.tag != "xxx" {
    return 
}
...开始消费...

这虽然解决了问题,但是不优雅。

所以Kafka解决了这个问题,Kafka在接收生产者的消息时,需要生产者指明,这个消息的topic是什么(生产者不指定topic,Kafka内部也会创建默认的topic),Kafka内部帮你们分类管理,而消费者消费时,只需要告诉Kafka,想消费哪个topic的消息,Kafka就只会给他这个topic的数据,其他topic的不用关心,他也消费不了。

topic翻译过来是:主题,也可以理解为类型、标记...... 他的作用就是Kafka分类管理消息的依据。

所以站在topic的角度来看,此时的Kafka应该是这样的:

回答问题1

因为Kafka与redis或zk的不同点是,redis和zk里的数据是无属性的,说白了client连上就能操作所有的东西,数据是对所有client共享的(忽略某些权限控制等因素),不然为什么用redis或zk作为分布式锁的解决方案。

但是Kafka里的数据是有属性的,是有topic的,你不消费的topic里的数据你永远也拿不到。

所以我们回答Kafka中的消息数据是怎么存储的,需要站在一个topic的角度,

即:一整个topic的数据,在Kafka中是怎么存储的?

答案:类似redis cluster,每个partition里有一部分,全部加起来,才是一个完整的topic的数据。

partition是什么

如图,我们看到,broker0和broker1这两个实例都有一部分属于topicA的数据,他们加起来就是完整的数据。

那么紧随topic后面的partition是什么意思呢?

partition翻译过来:隔板墙;分割;分治;瓜分。你就理解为分区就行了。

和其他集群中的分区概念差不多,就是说,既然数据被化整为零了,那总要知道哪一块的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值