Kafka是基于消息发布-订阅模式实现的消息系统,主要设计目标如下

  • 消息持久化:以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上的数据也能保证常数时间复杂度的访问性能。
  • 高吞吐:在廉价的商用机器上也能支持单机每秒10万条以上的吞吐量。
  • 分布式:支持消息分区以及分布式消费,并保证分区内的消息顺序。
  • 跨平台:支持不同技术平台的客户端(如Java、PHP、Python等)。
  • 实时性:支持实时数据处理和离线数据处理。
  • 伸缩性:支持水平扩展。

基本概念

  • Broker

Kafka集群包含一个或多个服务器,这些服务器被称为Broker。

  • Topic

逻辑上通RabbitMQ的Queue队列相似,每条发布到Kafka集群的消息都必须有一个topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个Broker上,但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处。)

  • Partition

Partition是物理概念上的分区,为了提供系统吞吐率,在物理上每个Topic会分成一个或多个Partition,每个Partition对应一个文件夹(存储对应分区的消息内容和索引文件)。

  • Producer

消息生产者,负责生产消息并发送到Kafka Broker。

  • Consumer

消息消费者,向Kafka Broker读取消息并处理的客户端。

  • Consumer Group

每个Consumer属于一个特定的组(可为每个Consumer指定属于一个组,若不指定则属于默认组),组可以用来实现一条消息被组内多个成员消费等功能。

------摘至《Spring Cloud微服务实战》崔永超·著,第九章。

10-06 19:07