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微服务实战》崔永超·著,第九章。