KafKa 基础

428 阅读3分钟

Kafka 是什么

官方将 Kafka 定义为一个高性能开源分布式基于发布/订阅模式消息队列

基于官方的定义,我们可以看到 Kafka 有以下特点

  • 高性能
  • 开源
  • 分布式
  • 基于发布/订阅模式

但随着 Kafka Streams 的推出,Kafka 不光可以分发、存储消息还可以摄取、处理消息!因此官方对 Kafka 的定义改为流式计算平台

虽然 Kafka 支持流式计算,但大多数人在大部分情况下还是将 Kafka 当做一个消息队列来使用,真到了需要流式计算的场景,可选是中间件非常多,如 Fink、Storm、Spark Streaming 等,不一定会选择 Kafka Streams

Kafka 简史

  • Kafka 最初由 LinkedIn (领英)开发

  • 2011 年 LinkedInKafka 捐献给 Apache 基金会并发布了第一个开源的版本 0.7.0,支持数据压缩和跨集群之间的数据拷贝

  • 2012 年 10 月 23 日 KafkaApache Incubator 孵化成功,正式成为了 Apache 顶级项目,并同步发布了 0.8.0 版本

kafka 的编程语言

kafkaScalaJava 编写,运行在 JVM 上,并兼容现有的 Java 程序,因此部署 kakfa 的时候,需要先部署 jdk 环境

kafka 的重要版本及特性

参考kafka 版本演进

Kafka 核心概念

Kafka基于发布/订阅模式消息队列,因此不可避免的会有以下概念

  • Topic : 消息主题,标准 MQ 中的 Queue
  • Producer : 消息生产者
  • Consumer : 消息消费者
  • Consumer Group : 消费组,由多个 Consumer 组成

KafkaC/S 架构,你也可以把 ProducerConsumer 看成是 Client 的两种角色

kafka 还是一个分布式系统,因此一个集群中会存在多个实例,每个实例实例被 kafka 称作 Broker

此外,kafka 会对 Topic 中的消息进行分布式存储, kafkaTopic 中的消息分成"多段",分别存储在不同的 Broker 里,这每一段消息被 kafka 称为 Partition

Partition 只存一份肯定不安全,为了数据的存储安全,以及实现高可用,可以让 kafkaPartition 同步多份存到不同的 Broker 中,这每一份 Partitionkafka 称为 Replication

Partitionkafka 中的一个逻辑概念,在逻辑上可以理解 Partition 是存储在 Broker 中的,但是在物理上数据肯定是存储在磁盘上的,kafka 将一个 Partition 拆分成多个小段,存储在文件系统中,每个小段由 xxx.index 和 xxx.log 两个文件组成,kafka 将这样一个小段称为 Segment

最后 kafka 还记录了生产、消费消息的进度,它被 kafka 称为 Offset,你可以把它简单理解成关系型数据库中的自增主键

对上面提到的概念做一个小结

kafka 架构上的概念

  • Broker : 一个 kafka 实例

Topic 消息的概念

  • Partition : 一段 Topic 消息
  • Replication :逻辑上是一个 Partition 的副本,本质上跟 Partition 一样,还是一段 Topic 消息
  • Offset : 生产、消费消息的进度

数据存储上的概念

  • Segment : 对应 Partition 在文件系统中的一小段数据

当然 kafka 中的概念还不止如此,例如 Replication 还分 Leader ReplicationFollower Replication 等角色,这些概念会在对应的章节详细讲到

KafKa 全貌图

kafka 架构.jpg

Broker

参考 KafKa Broker

Partition 与 Replication

参考 KafKa Partition 与 Replication

Segment

参考 kafka segment

Producer

参考 KafKa Producer

Consumer

参考 KafKa Consumer