1、什么是kafka?
-
Kafka最初由LinkedIn公司使用Scala开发的一个分布式、多分区、多副本,基于ZK协调的内部基础设施,先已捐给Apache。
-
Kafka是一个流平台,主要用来发布和订阅数据流。
-
Kafka具有水平可伸缩性、容错性、快速性
2、Topic
-
Topic是Kafka的核心抽象,Topic是将信息记录到的某个类别或订阅源名称。
-
可用来区分业务系统。
-
特点:
-
Topic始终是多用户的,即一个Topic可以有0个、1个或者多个订阅写入数据的consumer
-
多个Producer可以向一个Topic当中发送消息。
-
多个consumer可以消费同一个Topic中的消息。
-
3、Producer
-
消息的创造者,主要工作就是产生消息,然后发送给消息队列
4、Consumer
-
消息的消费者
5、Broker
-
物理概念,Kafka集群中每一个Kafka节点
-
指的就是Kafka Server这个服务,可以把部署了KafkaServer的这台机器看做是一个Broker
-
Broker用来接收来自Producer的消息,为消息设置Offset,并把消息保存到磁盘
6、Partition
-
分区
-
一个Topic可以分布到多个Broker上,一个Topic可以分为多个Partition,每个Partition都是一个FIFO有序队列。
-
一般情况下,Partition的数量设置为Broker数量的整数倍。
-
一个Partition只允许同一个ConsumerGroup的一个消费者消费,不允许同组多个Consumer同时消费一个Partition
-
为什么设计分区?
-
为了并发读写,加快读写速度,这样可以极大的提高并发响应
-
运用多分区的存储,利于数据的均衡
-
加快数据的康复速率。一旦某台机器挂了,全部集群只需要康复一部分数据,可加快故障康复时间
-
7、Replication
-
副本
-
为保证集群中某个节点发送故障时,该节点上的Partition数据不丢失,而进行备份。
-
一个Topic的每个Partition都有若干副本,一个Leader和若干个Follower
-
Leader只有一个,负责消息的读写,即所有读写操作只能发生在Leader副本上。
-
Follower有多个,实时从Leader同步数据。当Leader发生故障时,某个Follower会成为新的Leader。
8、Segment
-
一个Topic可以分为若干个Partition,Partition还可以细分为segment
-
一个Partition物理上由多个segment组成
-
每个segment有.log和.index两个文件,每个log文件承载详细的数据,每条消息都有一个Offset,
-
index文件是对log文件的索引。Consumer查找offset时运用二分法依据文件名去定位到哪个Segment,然后解析Message,匹配到对应的offset的Message
-
前20位数字代表offset偏移量,
-
9、Consumer group
-
消费者组。
-
由多个Consumer组成,共享一个公共的id(group.id)
-
一条消息只能被同一个ConsumerGroup中的一个Consumer消费。
-
一条消息可以被多个ConsumerGroup消费。
10、Controller
-
中央控制器
-
多个Broker中,有一个会被选举为Controller
-
管理整个集群的分区和监控副本的状态
-
例:
-
Leader副本故障,由Controller负责为该Partition重新选举新的Leader副本。
-
当检测到同步列表发生变化,由Controller通知集群中的所有Broker更新其元数据缓存信息
-
当增加某个Topic分区的时候也会由Controller管理分区的重新分配工作。
-
-
选举过程
-
当broker启动的时候,都会创建KafkaController对象,但是集群中只能有一个leader对外提供服务
-
这些每个节点上的KafkaController会在指定的zookeeper路径下创建临时节点,只有第一个成功创建的节点的KafkaController才可以成为leader,其余的都是follower。
-
当leader故障后,所有的follower会收到通知,再次竞争在该路径下创建节点从而选举新的leader
-
11、ISR、OSR、AR、HW、LEO
-
ISR
-
In-Sync-Replicas,副本同步队列
-
由Leader维护
-
任意一个Follower超过同步阈值(replica.lag.time.max.ms),都会被剔除ISR
-
-
OSR
-
Outof-Sync-Replicas
-
被剔除的Follower会存入OSR列表中
-
新加入的Follower也会先存入OSR中
-
-
AR
-
AR = ISR + OSR
-
-
LEO
-
LogEndOffet
-
表示每个Partition的log最后一条Message的位置
-
-
HW
-
HighWatermark,高水位
-
是指ISR中所有节点都已复制完的消费的Offset。
-
也是Consumer所能获取到的消息的最大Offset。.
-