62. Kafka 的架构是怎么样的?
Kafka 架构图
Kafka 的整体架构非常简单,是分布式架构,Producer、Broker 和Consumer 都可以有多个。
- Producer,Consumer 实现 Kafka 注册的接口。
- 数据从 Producer 发送到 Broker 中,Broker 承担一个中间缓存和分发的作用。
- Broker 分发注册到系统中的 Consumer。Broker 的作用类似于缓存,即活跃的数据和离线处理系统之间的缓存。
- 客户端和服务器端的通信,是基于简单,高性能,且与编程语言无关的 TCP 协议。
几个重要的基本概念:
Topic:特指 Kafka 处理的消息源(feeds of messages)的不同分类。
Partition:Topic 物理上的分组(分区),一个 Topic 可以分为多个 Partition 。每个 Partition 都是一个有序的队列。Partition 中的每条消息都会被分配一个有序的 id(offset)。
- replicas:Partition 的副本集,保障 Partition 的高可用。
- leader:replicas 中的一个角色,Producer 和 Consumer 只跟 Leader 交互。
- follower:replicas 中的一个角色,从 leader 中复制数据,作为副本,一旦 leader 挂掉,会从它的 followers 中选举出一个新的 leader 继续提供服务。
Message:消息,是通信的基本单位,每个 Producer 可以向一个Topic(主题)发布一些消息。
Producers:消息和数据生产者,向 Kafka 的一个 Topic 发布消息的过程,叫做 producers 。
Consumers:消息和数据消费者,订阅 Topic ,并处理其发布的消息的过程,叫做 consumers 。
Consumer group:每个 Consumer 都属于一个 Consumer group,每条消息只能被 Consumer group 中的一个 Consumer 消费,但可以被多个 Consumer group 消费。
Broker:缓存代理,Kafka 集群中的一台或多台服务器统称为 broker 。
Controller:Kafka 集群中,通过 Zookeeper 选举某个 Broker 作为 Controller ,用来进行 leader election 以及 各种 failover 。
ZooKeeper:Kafka 通过 ZooKeeper 来存储集群的 Topic、Partition 等元信息等。
? 单纯角色来说,Kafka 和 RocketMQ 是基本一致的。比较明显的差异是:
RocketMQ 从 Kafka 演化而来。
1、Kafka 使用 Zookeeper 作为命名服务;RocketMQ 自己实现了一个轻量级的 Namesrv 。
2、Kafka Broker 的每个分区都有一个首领分区;RocketMQ 每个分区的“首领”分区,都在 Broker Master 节点上。
RocketMQ 没有首领分区一说,所以打上了引号。
3、Kafka Consumer 使用 poll 的方式拉取消息;RocketMQ Consumer 提供 poll 的方式的同时,封装了一个 push 的方式。
RocketMQ 的 push 的方式,也是基于 poll 的方式的封装。
… 当然还有其它 …