Kafka 是什么
官方将 Kafka 定义为一个高性能的开源的分布式的基于发布/订阅模式的消息队列
基于官方的定义,我们可以看到 Kafka 有以下特点
- 高性能
- 开源
- 分布式
- 基于发布/订阅模式
但随着 Kafka Streams 的推出,Kafka 不光可以分发、存储消息还可以摄取、处理消息!因此官方对 Kafka 的定义改为流式计算平台
虽然 Kafka 支持流式计算,但大多数人在大部分情况下还是将 Kafka 当做一个消息队列来使用,真到了需要流式计算的场景,可选是中间件非常多,如 Fink、Storm、Spark Streaming 等,不一定会选择 Kafka Streams
Kafka 简史
-
Kafka 最初由 LinkedIn (领英)开发
-
2011 年 LinkedIn 将 Kafka 捐献给 Apache 基金会并发布了第一个开源的版本 0.7.0,支持数据压缩和跨集群之间的数据拷贝
-
2012 年 10 月 23 日 Kafka 由 Apache Incubator 孵化成功,正式成为了 Apache 顶级项目,并同步发布了 0.8.0 版本
kafka 的编程语言
kafka 由 Scala 和 Java 编写,运行在 JVM 上,并兼容现有的 Java 程序,因此部署 kakfa 的时候,需要先部署 jdk 环境
kafka 的重要版本及特性
Kafka 核心概念
Kafka 是基于发布/订阅模式的消息队列,因此不可避免的会有以下概念
- Topic : 消息主题,标准 MQ 中的 Queue
- Producer : 消息生产者
- Consumer : 消息消费者
- Consumer Group : 消费组,由多个 Consumer 组成
Kafka 是 C/S 架构,你也可以把 Producer、Consumer 看成是 Client 的两种角色
kafka 还是一个分布式系统,因此一个集群中会存在多个实例,每个实例实例被 kafka 称作 Broker
此外,kafka 会对 Topic 中的消息进行分布式存储, kafka 将 Topic 中的消息分成"多段",分别存储在不同的 Broker 里,这每一段消息被 kafka 称为 Partition
Partition 只存一份肯定不安全,为了数据的存储安全,以及实现高可用,可以让 kafka 将 Partition 同步多份存到不同的 Broker 中,这每一份 Partition 被 kafka 称为 Replication
Partition 是 kafka 中的一个逻辑概念,在逻辑上可以理解 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 Replication 、Follower Replication 等角色,这些概念会在对应的章节详细讲到
KafKa 全貌图
Broker
参考 KafKa Broker
Partition 与 Replication
参考 KafKa Partition 与 Replication