Kafka学习笔记

一、kafka基本认识:
kafka是一个分布式MQ中间件,由多个broker组成,每个broker是一个节点;你创建一个topic,这个topic可以划分为多个partition,每个partition可以存在于不同的broker上,每个partition就放一部分数据。每个topic的数据,是分散放在多个机器上的,每个机器就放一部分数据。
二、引入MQ的优缺点

  1. 优点:解耦、异步和削峰
  • 解耦:不使用MQ,那就是使用接口嘛,当有多个下游需要你传输数据时,如果用接口,需要维护多个接口,一段时间后,当某个团队需要此数据时,又得改自己源码,太过麻烦,使用MQ就能避这种情况产生。
  • 异步:当使用mq时,只需要注意发送消息,发送成功后,即可返还结果,减少请求时长。
  • 削峰:当MQ过多时,消息队列会将堆积的消息存储在磁盘中,当然是通过一定的数据结构存储,以便能快速查询。消费者从生产者机器拉取定量消息消费,已达到削峰的目的。(定量如何计算出来的?)
  1. 缺点
  • 服务与MQ强耦合,一旦MQ系统故障,整个服务将不可用。

三、Kafka的高可用原理
既然MQ故障会引发整个服务不可用,那么Kafka的稳定性是如何保证的呢。
答案就是replica副本机制。每个partition的数据都会同步到吉他机器上,形成自己的多个replica副本。然后所有replica会选举一个leader出来,那么生产和消费都跟这个leader打交道,然后其他replica就是follower。写的时候,leader会负责把数据同步到所有follower上去,读的时候就直接读leader上数据即可。只能读写leader?很简单,要是你可以随意读写每个follower,那么就要care数据一致性的问题,系统复杂度太高,很容易出问题。kafka会均匀的将一个partition的所有replica分布在不同的机器上,这样才可以提高容错性。

这么搞,就有所谓的高可用性了,因为如果某个broker宕机了,没事儿,那个broker上面的partition在其他机器上都有副本的,如果这上面有某个partition的leader,那么此时会重新选举一个新的leader出来,大家继续读写那个新的leader即可。这就有所谓的高可用性了。

写数据的时候,生产者就写leader,然后leader将数据落地写本地磁盘,接着其他follower自己主动从leader来pull数据。一旦所有follower同步好数据了,就会发送ack给leader,leader收到所有follower的ack之后,就会返回写成功的消息给生产者。(当然,这只是其中一种模式,还可以适当调整这个行为)

消费的时候,只会从leader去读,但是只有一个消息已经被所有follower都同步成功返回ack的时候,这个消息才会被消费者读到。
原理图:
在这里插入图片描述
Kafka术语:
Producer
向Kafka发布消息的实例
Consumer
从Kafka中订阅Topic的实例
Broker
Kafka集群中每个实例称作Broker,由id唯⼀一标⽰示,负责消息存储、转发
Controller
每个集群中会选举⼀一个Broker作为Controller,它负责执⾏行分区、副本分配、replica leader选举,调度数据复制和迁移
Topic
Kafka维护消息的种类,每⼀一类消息由Topic标识。Partition:对Topic中消息⽔水平切分,⾄至少1 partition/每个topic,Partition 内消息有序,多个Parition消息⽆无序
Consumer Group
同⼀一个Consumer Group中的Consumers,Kafka将相应Topic中的⼀一条消息只能被⼀一个Consumer消费,多个Consumer Group实现多播,⼀一条消息被多个Consumer Group消费
Replica
将Partition复制,每⼀一份叫做⼀一个Replica

Replica Leader

每⼀一个Partition都有⼀一个“Leader”负责Partition上所有 的读写操作

Replica Follower

每⼀一个Partition都有0个或多个 Follower,只负责同 步Leader的数据

leo

全称Log EndOffset,表⽰示每个Replica的log最后⼀一条Message,有可能为脏数据(在page cache中)

Isr

全称In-Sync Replicas,是Replicas的⼀一个⼦子集,由leader维护isr 列表,Follower从Leader同步数据有⼀一些延迟(包括了延迟时间和延迟 条数两个维度),任意⼀一个超过阈值都会把该Follower踢出Isr

osr

全称OutOf-Sync Replicas,新Follower或从Isr列表中剔除放⼊入Osr 列表中

Replicas

Isr + Osr,minIsr:如果isr.size⼩小于minIsr.size写⼊入不可⽤用,⺫⽬目的是保证replicas数据⼀一致性,牺牲可⽤用性

hw
全称highWatermark,每个replica都有highWatermark, leader和follower各自负责更新⾃自⼰己的highWatermark状态

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章