更新时间:2022-11-14 GMT+08:00

Kafka相关概念

云服务平台使用Kafka作为消息引擎,以下概念基于Kafka进行描述。

Topic

消息主题。消息的生产与消费,围绕消息主题进行生产、消费以及其他消息管理操作。

Topic也是消息队列的一种发布与订阅消息模型。生产者向消息主题发布消息,多个消费者订阅该消息主题的消息,生产者与消费者彼此并无直接关系。

生产者(Producer)

向Topic(消息主题)发布消息的一方。发布消息的最终目的在于将消息内容传递给其他系统/模块,使对方按照约定处理该消息。

消费者(Consumer)

从Topic(消息主题)订阅消息的一方。订阅消息最终目的在于处理消息内容,如日志集成场景中,监控告警平台(消费者)从主题订阅日志消息,识别出告警日志并发送告警消息/邮件。

代理(Broker)

即Kafka集群架构设计中的单个Kafka进程,一个Kafka进程对应一台服务器,因此手册中描述的代理,还包括对应的存储、带宽等服务器资源。

分区(Partition)

为了实现水平扩展与高可用,Kafka将Topic划分为多个分区,消息被分布式存储在分区中。

副本(Replica)

消息的备份存储。为了确保消息可靠,Kafka创建Topic时,每个分区会分别从代理中选择1个或多个,对消息进行冗余存储。

Topic的所有消息分布式存储在各个分区上,分区在每个副本存储一份全量数据,副本之间的消息数据保持同步,任何一个副本不可用,数据都不会丢失。

每个分区都随机挑选一个副本作为Leader,该分区所有消息的生产与消费都在Leader副本上完成,消息从Leader副本复制到其他副本(Follower)。

Kafka的主题和分区属于逻辑概念,副本与代理属于物理概念。下图通过消息的生产与消费流向,解释了Kafka的分区、代理与主题间的关系。

图1 Kafka消息流

老化时间

消息的最长保留时间,消费者必须在此时间结束前消费消息,否则消息将被删除。删除的消息,无法被消费。