Skip to main content

基础介绍

Kafka作为一个分布式消息流平台,是实时计算中不可或缺的一部。实时平台集成了Kafka管理模块,帮助用户更好地管理实时计算完整链路。下文介绍几个Kafka重点概念,帮助理解模块:

  • Topic 和 Partition

    • Topic(主题) 是一个存储消息的逻辑概念,是一个对消息进行了分类的消息集合,可以类比理解为数据库中的表。每个 Topic 可以有多个生产者向它发送消息,也可以有多个消费者去消费其中的消息。

    • Partition(分区) 是对一个Topic中的数据进行了拆分管理,来提高数据的吞吐性能。同一分区中的消息都是有序的,但因为不同分区可以处于不同的服务器上,无法保证同一个Topic下的数据有序性。

    note

    如何保证一个分区内的数据有序性?

    每个消息在被添加到分区时,都会被分配一个offset(偏移量),它是消息在此分区中的唯一编号,Kafka 通过 offset 保证消息在分区内的顺序,offset 的顺序不跨分区,即 Kafka 只保证在同一个分区内的消息是有序的

  • Producer and Consumer

    • Producer(生产者)负责创建消息。一般情况下,生产者会把消息均衡地分布到指定主题的所有分区上,而并不关心消息会被写到哪个分区。如果我们想要把消息写到指定的分区,可以通过自定义分区器来实现。

    • Consumer(消费者)负责消费消息。为了保证数据的一致性,同一个分区(Partition)同时只能被一个消费者(Consumer)实例消费。为了提升消费者(Consumer)的吞吐量,一般都会设置多个消费者(Consumer)实例来消费不同的分区(Partition),这些实例共同组成一个消费者组(Consumer Group) ,他们共用一个Group ID。

      在这里插入图片描述

      note
      1. 一个分区只能被同一个消费者群组里面的一个消费者读取,但可以被不同消费者群组中所组成的多个消费者共同读取。多个消费者群组中消费者共同读取同一个主题时,彼此之间互不影响。
      2. 消费者会把每个分区最后读取的偏移量保存在 Zookeeper 或 Kafka 上,如果消费者关闭或者重启,它还可以重新获取该偏移量,以保证读取状态不会丢失。

Broker And Cluster

  • 一个独立的 Kafka 服务器被称为 Broker。Broker 接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。Broker 为消费者提供服务,对读取分区的请求做出响应,返回已经提交到磁盘的消息。
  • Broker 是集群 (Cluster) 的组成部分。每一个集群都会选举出一个 Broker 作为集群控制器 (Controller),集群控制器负责管理工作,包括将分区分配给 Broker 和监控 Broker。
  • 在集群中,一个分区 (Partition) 从属一个 Broker,该 Broker 被称为分区的首领 (Leader)。一个分区可以分配给多个 Brokers,这个时候会发生分区复制。这种复制机制为分区提供了消息冗余,如果有一个 Broker 失效,其他 Broker 可以接管领导权。

Kafka-Brokers