62. Kafka 的架构是怎么样的?

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 的方式的封装。

  • … 当然还有其它 …