Kafka复习之概念

248 阅读2分钟

kafka基础架构

主题

kafka通过topic来进行分类,好比数据库的表,主题是逻辑上的概念,因此一个主题可能横跨多个服务器。

分区

一个主题包含一个以上分区,一个分区就是一个提交日志,消费者以append的方式向后追加数据,以先进先出的方式进行顺序读取,由于一个主题有多个分区,因此只能保证分区上的书序性,不能保证主题上的顺序性。

可以增加分区的数量,不能减少分区的数量,因为分区保存着数据,删除分区相当于删除了数据。

生产者

生产者负责将数据默认均衡的写入每个分区,也可以指定写入固定的分区

消费者

消费者通过检查当前分区的偏移量来区分是否已经读过此消息,消费者将每个分区最后读取的消息的偏移量保存至zookeeper或者kafka中。每个分区只会被同一个消费者组的唯一消费者消费。(kafka这么设计保证了架构的简单,不需要额外的并发安全处理。)

Broker

一个独立的kafka服务器被称为Broker,被同一个zookeeper集群管理的broker节点组成了kafka集群。

每个集群都有一个broker负责控制器角色,控制器负责管理工作,将分区分配给broker和监控broker。

一个分区可以分配给多个broker,这时会发生分区复制,follower负责数据的备份,而leader负责数据的写入和发送。

borker接受的请求

  • 生产请求:生产者发送的请求,包含客户端要写入broker的信息。
  • 获取请求::follower和消费者请求读取消息发送的请求

生产者和消费者的请求必须要发送到分区的首领:
如果broker收到的请求指向的分区首领不在此broker,那么客户端会收到一个非分区首领的错误响应。

如何将请求定位到正确的分区?
元数据: 元数据中包含了客户端感兴趣的topic列表中每个topic包含了哪些分区?每个分区有哪些副本?哪个副本是首领?所有的broker都存储了元数据,客户端会缓存这些元数据,并定时从broker请求刷新这些数据,并且当客户端收到错误的信息时,他会在重新发送错误请求前先刷新元数据。