学习 Kafka(一):Kafka 简介

更新至 Kafka 2.3.1 版本

Apache Kafka 分布式消息队列,最初在 Linkedin(领英)内部由 Jay Kreps、Neha Narkhede 和 Jun Rao 开发,并于 2010 年在 GitHub 上开源。

如今的 Kafka 已经不再单纯是一个消息队列,而是逐渐衍生成为流处理的平台,并以 Kafka 为中心形成了流处理生态圈。

成功的开源项目背后,通常都有一家默默支持它的公司, Kafka 背后的公司是 Confluent

一些有用的连接:

架构

Kafka Architechture

Kafka 核心架构,包含几个部分:

  • 外部依赖:Zookeeper;
  • Kafka 集群:Kafka Broker;
  • Kafka 客户端:Kafka Producer 和 Kafka Consumer。

以消息队列的视角观察,一边是 Kafka Producer 发送消息(record)至主题,另一边是 Kafka Consumer 订阅主题获取消息(record)。

主题与分区

主题只是一个逻辑概念,好比数据库的表。

Kafka Topic

每个主题包含了多个分区(partition),数据以追加的方式写入分区,又通过偏移量(offset)从分区读取数据。

分区被分配给消费者组(Consumer Group)内的一个 Kafka Consumer,两者是多对一的关系。由此,通过消费者组 Kafka 实现了传统消息队列的队列(Queuing)和发布订阅(Publish-subscribe)模式。

副本

Kafka 通过分区实现了扩展,通过副本实现了高可用。

Kafka Patition

通常,主题有分散在不同节点上一至多个副本,一个 Leader 副本和零至多个 Follower 副本,Follower 副本从 Leader 副本消费数据从而保持与 Leader 副本同步。

注意:只有 Leader 副本可以接受读写。

Follower 副本又分为 ISR 和 OSR,即追赶上 Leader 副本的 Follower 副本和落后于 Leader 副本的 Follower 副本。当 Leader 副本宕掉,Kafka 将从 ISR 中重新选举 Leader 副本。