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
- 一个Partition同一个ConsumerGroup的一个消费者消费,同组多个Consumer同时消费一个Partition
-
- 为了并发读写,加快读写速度,这样可以极大的提高并发响应
- 运用多分区的存储,利于数据的均衡
- 加快数据的康复速率。一旦某台机器挂了,全部集群只需要康复一部分数据,可加快故障康复时间
7.Replication
- 副本
- 为保证集群中某个节点发送故障时,该节点上的Partition数据不丢失,而进行备份。
- 一个Topic的每个Partition都有若干副本,一个Leader和若干个Follower
- 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)
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