kafka基本概念介绍

kafka是什么?

Kafka是一种高吞吐量的分布式发布订阅消息系统,是一个分布式的、分区的、可靠的分布式日志存储服务。
在这里插入图片描述

在这里插入图片描述

Kafka 几大概念

Topic(主题)

Kafka 中可将消息分类,每一类的消息称为一个 Topic,消费者可以对不同的 Topic 进行不同的处理。

Broker(代理)

每个 Broker 即一个 Kafka 服务实例,多个 Broker 构成一个 Kafka 集群,生产者发布的消息将保存在 Broker 中,消费者将从 Broker 中拉取消息进行消费。
Broker集群中,会有一个leader(controller leader),负责管理整个集群中分区和副本的状态和选举partition leader

Producer(生产者)

负责生产消息并发送给 Broker 。

Consumer(生产者)

负责消费 Broker 中 Topic 消息,每个 Consumer 实例归属于一个 Consumer Group 查看更多介绍

Partition(分区)

Partition 是 Kafka 中比较特色的部分,一个 Topic 可以分为多个 Partition,每个 Partition 是一个有序的队列,Partition 中的每条消息都存在一个有序的偏移量(Offest) ,同一个 Consumer Group 中,只有一个 Consumer 实例可消费某个 Partition 的消息。
partion可以看作一个有序的队列,里面的数据是储存在硬盘中的,追加式的。partition的作用就是提供分布式的扩展,一个topic可以有许多partions,多个partition可以并行处理数据,所以可以处理相当量的数据。只有partition的leader才会进行读写操作,folower仅进行复制,客户端是感知不到的。

ISR

leader会追踪和维护ISR中所有follower的滞后状态。如果滞后太多(时间滞后replica.lag.time.max.ms可配置),leader会把该replica从ISR中移除。被移除ISR的replica一直在追赶leader。如下图,leader写入数据后并不会commit,只有ISR列表中的所有folower同步之后才会commit,把滞后的follower移除ISR主要是避免写消息延迟。设置ISR主要是为了broker宕掉之后,重新选举partition的leader从ISR列表中选择。

2种leader

从上面的基本概念可以看出在kafka集群中有2个种leader,一种是broker的leader即controller leader,还有一种就是partition的leader,下面介绍一下2种leader的选举大致流程。

Controller leader

当broker启动的时候,都会创建KafkaController对象,但是集群中只能有一个leader对外提供服务,这些每个节点上的KafkaController会在指定的zookeeper路径下创建临时节点,只有第一个成功创建的节点的KafkaController才可以成为leader,其余的都是follower。当leader故障后,所有的follower会收到通知,再次竞争在该路径下创建节点从而选举新的leader

Partition leader

由controller leader执行

从Zookeeper中读取当前分区的所有ISR(in-sync replicas)集合
调用配置的分区选择算法选择分区的leader

什么是分区和副本

我给你举个例子吧,broker还是3个。
topic是逻辑概念,比如你有100条消息,topic命名为“A”,A有2个分区PA和PB,也就是说PA存50条,PB存50条,分别在broker1和broker2上面,这样你的消息是不是打散了,不会单一的放在某一台机器上了,这样是不是单一机器的负载就变小了?

再来,如果broker1挂了,那上面的所有分区也挂了,你的50条消息就丢了。为了不丢消息,你为分区增加了副本,这样PA和PB在broker2和broker3分别同步50条消息,当broker1再挂了,分区leader切到broker3上面的副本分区,消息是不是就还在。

所以,分区来打散你的消息,让你把庞大的消息负载均衡到broker之间,副本分区来同步消息来保障你的可靠性。

猜你喜欢

转载自blog.csdn.net/DreamsArchitects/article/details/108578100