Kafka基本原理详解(超详细!)_kafka工作原理-CSDN博客
Kafka
Kafka背景:Linkedin自己开发的,后面丢给apache开源了
关键词:
- 分布式
- 分区存储
- 多服务
- 消息
- 消费者模型
为什么需要做Kafka:可以看看链接博客,里面套娃了另外一个博客,说到一个快递员以及一个收件员的故事,蛮有意思的。
关键词三个:解耦,异步,削峰
而这三个关键词最终指向了还是中间这个词,异步。
因为异步,对于快递员来说,是解耦的,不需要具体等待收件人的时间,直接丢了就走,再送下一个快递。
因为异步,对于收件人来说,如果瞬时有大量的快递送达,也不需要一下次全部去拿,只要按照自己的步伐慢慢处理就可以。也就是削峰
而异步也是在通信手段里面老生常谈的通信手段。主要特点有速度快,整体性能高等,但也需要开辟缓冲区以及需要解决信息传递失效问题。
而Kafka感觉只是在背靠大数据的背景下,大量用户产生各种各样的信息需要传递,所以弄了一个分布式架构消息传递的中台总体进行管理。
具体应用场景:
假设说现在需要做一个词频分析,所有用户的搜索状态,做一个热搜,那么首先第一步就是需要获取全部的用户信息。第二部就是需要有一个接收信息并且词分的一个模块进行处理。如果不用Kafka,可能这个词分模块很快就爆了。所以就需要一个中台(可以理解为一个buffer的作用)进行统一的管理,当然这个buffer功能花样更多,因为整体系统可能不止一个这种消息需要大量传递,可能有非常非常多的数据需要交互,所以就需要Kafka作为中控作为一个统一的buffer
常用的通信模式一般就两种:一对一或者广播
消息也是这样,要么就发给一个人要么就发个一群人
然后再套用一下消费者生产者模型基本就出来了,所以本质上Kafka可以认为是消费者生产者模型中间哪一个buffer就好了,只是这个buffer比较复杂而已,而且他还需要解决一群消费者的问题。
既然是buffer为什么需要用分布式,前面说到了整体系统会有非常多乱七八糟的东西,只要需要的东西就可以认为是一个消息,那么东西可能特别多,所以用上了分布式存储以及分布式处理。
分布式也是特别特别复杂的一个东西,这里我还没研究过。
Kafka的分布式当时是直接用了zookeeper去维护的,现在自己有了新的框架KRaft。
Kafka架构
生产者比较简单。
最主要是如何将东西丢给消费者。
可以看到最主要的就是引入了Leader这么一个角色,leader直接跟producer进行交互,接受信息。接受完毕之后直接存储到本地的文件。
其他follower直接找leader去要这个消息就可以了。
这么一做可以很直观看到,对于接收方来说,就已经实现了异步这个手段,leader就相当一个“菜鸟裹裹”。有快递就去拿就行。
但是,producer与leader直接的异步还是没有解决,Kafka是给出了三个方案,分别有不同时机给出ACK
- producer不管ACK,消息发完就可以了
- leader自己接受到了就发ACK
- 所有follower接收了才发ACK
三种优劣都懂自己选就可以
消息架构搞定了,但是还有一个问题,既然需要作为中控的角色,需要跟不同的消息打交道该怎么办。
Kafka用topic针对不同的消息进行区分,当然感觉可以理解为一个用户组就好。
一个Kafka可以有好几个partition,这个partition就是用来决定刚才那个leader信息到底存在那个机器上,一般也是一个机器对应一个partition
另外的名词就是:
- broker:一台机器上运行的一个Kafka实例
- consumer group:一个consumer group内部成员只有一个能够消费同一个topic同一个partition的消息,消费了就没了
其他问题我觉得不是太重要我就不想研究了:
- leader完蛋了怎么办,替换规则是什么
- 分布式存储怎么做的?partition具体怎么存文档的,如何进行检索的