Kafka的关键概念

image-20221026-1

  1. Broker(代理)
    ○ 定义:Kafka Broker是Kafka集群中的一个服务器实例,负责存储和转发消息。它就像是一个数据仓库,接收生产者发送的消息,存储这些消息,并为消费者提供获取消息的服务。
    ○ 作用:
    ■ 存储消息:消息以日志(Log)的形式存储在Broker的本地磁盘上。这些日志文件是持久化存储的,保证了消息即使在服务器重启等情况下也不会丢失(当然,这也依赖于合适的配置和硬件稳定性)。
    ■ 处理客户端请求:接收和处理来自生产者(Producer)和消费者(Consumer)的请求。例如,当生产者发送消息时,Broker会将消息追加到相应的分区(Partition)中;当消费者请求消息时,Broker会从分区中读取消息并发送给消费者。
  2. Topic(主题)
    ○ 定义:Topic是消息的类别或者说逻辑上的分组。生产者将消息发送到特定的Topic,消费者从特定的Topic中订阅和接收消息。它类似于数据库中的表,是一种对消息进行分类管理的概念。
    ○ 作用:
    ■ 消息分类:不同类型的消息可以通过不同的Topic进行区分。例如,一个电商系统可能有“订单消息”Topic、“用户注册消息”Topic、“商品库存消息”Topic等,这样不同的业务模块可以根据自己的需求订阅和处理相应Topic中的消息。
    ■ 解耦生产者和消费者:生产者只需要将消息发送到正确的Topic,而不需要关心哪些消费者会接收这些消息;消费者只需要订阅感兴趣的Topic,而不用考虑消息是由哪个生产者发送的。
  3. Partition(分区)
    ○ 定义:Partition是Topic物理上的分区,是存储消息的基本单元。一个Topic可以分为一个或多个分区,每个分区在存储层面是一个有序的、不可变的消息序列。
    ○ 作用:
    ■ 提高并行度:通过将一个Topic的数据分布在多个分区上,可以让多个生产者和消费者同时对这些分区进行读写操作,从而大大提高了系统的吞吐量。例如,在一个有多个分区的Topic中,多个生产者可以并发地向不同分区发送消息,多个消费者也可以同时从不同分区读取消息。
    ■ 数据存储和管理:每个分区在Broker的本地磁盘上有自己独立的日志文件,用于存储消息。分区的有序性保证了消息在每个分区内是按照发送的顺序存储的,方便消费者按照顺序读取消息。
  4. Producer(生产者)
    ○ 定义:Producer是消息的生产者,负责创建消息并将其发送到Kafka的Topic中。它可以是一个应用程序中的一个组件,或者是一个独立的服务,将业务数据转换为Kafka消息并发送。
    ○ 作用:
    ■ 消息生成:从数据源(如数据库、传感器、其他应用系统等)获取数据,将其封装成Kafka消息格式。例如,一个电商系统中的订单服务在订单状态发生变化时,会将订单状态消息封装成Kafka消息。
    ■ 消息发送:确定消息要发送到的Topic,然后将消息发送到Kafka集群中的一个或多个Broker。生产者可以根据一定的策略选择Broker和分区,比如通过轮询策略将消息均匀地发送到Topic的各个分区。
  5. Consumer(消费者)
    ○ 定义:Consumer是消息的消费者,从Kafka的Topic中订阅并读取消息进行处理。它也是应用程序中的一个组件或独立的服务,通过消费消息来实现业务逻辑。
    ○ 作用:
    ■ 消息订阅:消费者需要订阅一个或多个Topic,告诉Kafka集群它对哪些消息感兴趣。例如,一个数据分析系统可能会订阅“user - behavior”Topic来获取用户行为数据进行分析。
    ■ 消息处理:从订阅的Topic的分区中读取消息,按照业务需求进行处理。处理方式可以多种多样,如将消息存储到数据库、进行实时分析、触发其他业务流程等。
  6. Consumer Group(消费者组)
    ○ 定义:Consumer Group是一组消费者的集合,用于实现消息的负载均衡和容错。一个消费者组中的消费者共同消费一个或多个Topic中的消息,每个分区的消息在一个消费者组内只会被一个消费者消费。
    ○ 作用:
    ■ 负载均衡:当一个Topic有多个分区时,消费者组中的多个消费者可以并行地从不同分区获取消息,从而提高消息的消费速度。例如,一个有3个消费者的消费者组消费一个有6个分区的Topic,每个消费者可以负责消费2个分区的消息。
    ■ 容错:如果一个消费者出现故障,其他消费者可以接管它负责的分区的消息消费,保证消息的持续消费。
  7. 它们之间的关系:
    ○ 生产者(Producer)将消息发送到指定的Topic。消息在Topic内部会根据分区规则(如哈希、轮询等)被分配到一个或多个分区(Partition)中存储在Broker上。
    ○ 消费者(Consumer)通过订阅Topic来获取消息。消费者组(Consumer Group)中的消费者会协调从Topic的分区中获取消息,保证每个分区的消息在一个消费者组内只会被一个消费者消费。每个Broker存储了多个Topic的分区,是整个消息存储和转发的核心节点,为生产者和消费者提供服务。例如,一个生产者将用户登录消息发送到“user-activity”Topic,这个Topic有3个分区存储在2个Broker上。一个消费者组中有3个消费者,它们会根据分区分配策略从这3个分区中获取消息进行处理,比如记录登录时间、更新用户状态等操作。