kafka入门学习笔记(二)

kafka入门学习笔记(二)

二、 KAFKA架构

kafka入门学习笔记(二)_第1张图片

这是一个集群的架构图。
集群中有多个broker,每个broker相当于一个物理机。每个topic有多个part。每一个part有一个leader,可以有或者没有follower,读写操作都是基于leader进行的。整个集群中的kfk信息,producer,broker,consumer等状态信息都是由zk来管理的。

  • kafka之ZK

zk在kafka中的作用。为啥我们选择zk。ZooKeeper是一个分布式的服务框架,可以用来解决集群中应用系统的一致性问题。用于存储相关多方都关心的数据状态,每方均可注册为“观察者”,一旦数据状态发生变化,每方都可以得到通知。
Dubbo 中也用到了zk。

(详情请见)

zk在kafka中主要体现在以下几个方面:

1. 存储topic信息
2. 存储broker分区信息
3. 控制器
4. 消费者id节点
5. 某分区被哪个消费者线程消费的信息
6. 老版本的偏移量。现在的版本使用特定的topic(_consumer_offsets)来保存偏移量
  • kafka高可用

当某个Topic的副本因子为N且N大于1时,每个Partition都会有N个副本;

Replica的个数小于等于Broker数,即对每个Partition而言么个Broker上只会有一个Replica,因此可用BrokerId 表示Replica;

所有的Partition的所有的Replica没人情况会均匀分部到所有Broker上;

如下图架构图所示:

kafka入门学习笔记(二)_第2张图片

kafka集群第一个启动的broker会在zk中创建一个临时节点/controller,使自己成为控制器。其他broker节点在控制器节点上注册zk的watch对象,监听控制器节点的状态变更。当broker controller断开连接时,zk的/controller节点便会消失,watch对象得到通知,再次争夺controller控制权,第一个成功创建/controller节点的会成为新的控制节点,其他会成为watch对象。控制器会检查新加入的broker是否包含现有分区副本,如果有的话,会把变更通知发送给其他broker,分区的follower副本。会从leader处复制消息。
kafka入门学习笔记(二)_第3张图片

  • kafka高性能

kafka数据的存储形式是一partition形式存储的。每个partition的外在表现形式为一个文件夹。主要包含以下几个文件:

每个partition的都是有序存储(顺序读写性能高)

每个partition的文件夹下面会有多组segment文件,每组segment文件又包含.index文件、.log文件、.timeindex文件(早期版本中没有)三个文件, log文件就实际是存储message的地方,而index和timeindex文件为索引文件,用于检索消息。
kafka入门学习笔记(二)_第4张图片

分段+索引的方式便于快速的查找消息体
kafka入门学习笔记(二)_第5张图片

1、 方便扩展。因为一个topic可以有多个partition,所以我们可以通过扩展机器去轻松的应对日益增长的数据量。

2、 提高并发。以partition为读写单位,可以多个消费者同时消费数据,提高了消息的处理效率

你可能感兴趣的:(消息队列,kafka)