Kafka名词解释
Broker代理
- 指的就是任意1台
Kafka服务器
, 多台Kafka服务器就组成了Brokers, 也就是Kafka集群/Kafka Cluster - Broker == 1Kafka服务器
Producer生产者
- 向Kafka的Broker发送消息的角色(将消息
推
送给kafka)就叫做生产者 - 可以用命令行来发送消息,也可用代码来发送
Consumer消费者
- 从Kafka的Broker中消费消息的角色(从Kafka
拉
取消息)就叫做消费者
Consumer Group消费者组
多个消费者可以组成一个消费者组
- 消费者组的作用就是方便对消费者统一管理
一个消费者组中可以有1~n个消费者组
Topic主题
- 主题是用来
区分不同的业务
的 - 也就是
对发送到Kafka的消息做分类管理
- 如下图,不同业务的消息,发送到不同的主题,那么消费者就可以根据自己需要的业务数据来消费不同主题的数据
Partition分区
- 一个主题可以有多个分区
- 分区的
作用是在物理层面上,提高Kafka的并发能力/吞吐能力
- 那么也就意味着,
生产者往Kafka的某个主题发送消息的时候可以同时向不同的分区发
- 如, 13579号消息发给1分区, 2468号消息发给2分区
- 这样就变成了向两个分区同时发消息,提供效率
- 注意: 既然
分区是用来提高并发的,那么不同分区最好是在不同的机器上
(如果都在一台机器,那么这台机器的压力会较大,可以通过副本来解决,让副本的主分散在各个机器) - 可以和HDFS的文件分块一样理解,都是为了提高并发读写!!!
Replication副本
- 某个主题的某个分区可以有多个副本
- 副本的目的是为了提高数据的安全性
- 和HDFS的副本作用一样理解即可
- 但是需要注意:
- 分区的副本区分leader和follower,
- 写是往leader写,读也是从leader读, follower副本只做备胎
- 所以需要将leader副本分散到各个机器,也就是将读写压力分摊到各个机器/Broker(由Kafka+ZK协调完成)
Record记录
- 发送给Kafka的一条消息叫做Record记录
- 每条Record记录主要
包含一个键(Key)、值(Value)和时间戳(Times tamp)
。
Offset偏移量
- Offset偏移量表示各个主题各个分区内的消息的唯一标识/序号
- 作用就是用来
标记这条消息
,如通过偏移量就可以记录消费者消费到了哪个主题的哪个分区的哪个Offset偏移量的消息,那么下次就可以接着这个位置消费
Segment分段
- 指的是Kafka消息在物理位置上的存储表示/表现
消息最终要存在磁盘上
,那么消息在磁盘上的表现形式就是Segment分段文件
- partition、segment、offset都是为topic服务的,
每个topic可以分为多个partition,一个partition相当于一个大目录,每个partition下面有多个大小相等的segment文件,这个segment是由message消息/Record记录组成的
- 每个partiiton/文件夹有多个segment分段/文件,segment又包含了两个同名文件:
- xxx.log:存放我们的日志文件,即所有的数据最后都以日志文件的形式存放到了kafka集群当中
- xxx.index :其实就是一个索引,记录了一条消息在log文件中的位置,查找消息的时候先从index获取位置,然后就可以定位到消息在log文件具体哪个地方,这样查找消息的速度更快。
- Kafka中的分区类似Hive中的分区–就是分文件夹
- Kafka中的分段类似Hive中的分桶–就是文件夹下再分文件
Leader和Follower
- 前面讲到分区可以有副本用来保证数据安全,那么副本之间又分为:
- Leader主副本和Follower从副本
读写都只能从Leader主副本上进行
- Follower从副本只复制Leader上的数据然后做备胎,在Leader挂掉时替补上, 该过程由ZK帮助完成
ISR(In-Sync Replica)
- ISR表示目前Alive活着的并且能够“Catch-up”跟得上Leader的从Replicas(follower)集合
- 我们前面说副本分为Leader主副本和Follower从副本
- Follower会从Leader中复制数据然后做备胎
- 那么我们如果要求
用一个集合表示所有的可用的从副本Replicas(followers)
- 那么该副本必须满足以下条件:
- 1.
活着的
- 2.
不要落后Leader太多数据
- 1.
- 如果一个flower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将会将其从ISR中移除 ,也就是
延迟时间和延迟条数任意一个超过阈值都会把该Replica踢出ISR
。