一、Kafka 介绍
Kafka 是一种高吞吐、分布式、基于发布和订阅模型的消息系统。
Kafka 用于离线和在线消息的消费,将消息数据按顺序保存在磁盘上,并在集群内以副本的形式存储以防止数据丢失。Kafka 依赖 ZooKeeper 进行集群管理,并且受到越来越多的分布式处理系统的青睐,比如 Storm、Spark、Flink 等都支持与 Kafka 集成,用于实时流式计算。
Kafka 本质是一个消息队列,二消息队列是一种进程间通信或者同一个进程中不同线程间的通信方式,主要解决异步处理、应用耦合、流量消峰等问题,实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。
1.1、异步处理
1.2、应用解耦
1.3、流量削峰
二、传输模式
2.1、点对点模型
2.2、发布、订阅模型
三、系统架构
3.1、系统架构
Producer:生产者,负责将客户端生产的消息发送到 Kafka 中,可以支持消息的异步发送和批量发送; broker:服务代理节点,Kafka 集群中的一台服务器就是一个 broker,可以水平无限扩展,同一个 Topic 的消息可以分布在多个 broker 中; Consumer:消费者,通过连接到 Kafka 上来接收消息,用于相应的业务逻辑处理。 Consumer Group:消费者组,指的是多个消费者共同组成一个组来消费一个 Topic 中的消息。 ZooKeeper:
在整个 Kafka 集群中 Producer 将消息发送给 broker,然后 broker 再将接收到的消息存储到磁盘中,然后 Consumer 再从 Broker 订阅并消费消息。ZooKeeper 则是 Kafka 集群用来负责集群元数据的管理、控制器的选举等操作的。
3.2、Topic 与 Partition
在 Kafka 中消息是以 Topic 为单位进行归类的,Topic 在逻辑上可以被认为是一个 Queue,Producer 生产的每一条消息都必须指定一个 Topic,然后 Consumer 会根据订阅的 Topic 到对应的 broker 上去拉取消息。
为了提升整个集群的吞吐量,Topic 在物理上还可以细分多个分区,一个分区在磁盘上对应一个文件夹。由于一个分区只属于一个主题,很多时候也会被叫做主题分区(Topic-Partition)。
3.3、Leader 和 Follower
一个分区会有多个副本,副本之间是一主(Leader)多从(Follower)的关系,Leader 对外提供服务,这里的对外指的是与客户端程序进行交互,而 Follower 只是被动地同步 Leader 而已,不能与外界进行交互。