官方文档 -- https://kafka.apache.org/intro -- v2.5
概要
- 分布式流数据平台,包含以下三个能力:
- 发布和订阅数据流中的记录,类似消息队列与企业消息系统 -- 消息系统
- 以容错和持久的方式存储数据流的记录 --- 高可用持久
- 当数据流中的记录发生时处理它们 --- 实时处理
- 主要应用于两大类应用程序
- 构建实时流数据管道,在系统或应用程序之间可靠地获取数据 --- 应用程序之间实时通信
- 实时应用系统,实时转换或处理流数据 --- 实时处理
- 主要概念
- kakfa可以作为集群运行,多个集群可以跨数据中心 -- 分布式集群部署
- kafka的数据被分类存储在称为topics中
- 每个记录由一个键、一个值和一个timestam组成
- 核心api
- Producer API 生产者api,向一个或多个topic发送消息
- Consumer API消费者api, 消费订阅的topic中到达的消息
- Streams API流处理api,从一个输入流消费,并输出到一个或多个topic的输出流,高效的处理输入流的消息并传输到输出流上
- Connector API 创建可重用的生产者和消费者
- Admin API 管理和查看topics,brokers等
核心概念
Topics and Logs
- topic 逻辑上是一个分类名称,消息会被发送到指定的topic,每个topic表示同一类的消息
- 每个topic可以有一个,或多个订阅者,消费这个topic收到的数据
- 在分布式系统中,数据需要分片,提高性能和吞吐量,每个topic的分片就是partition
- 一个topic会有一个或者多个partition
- 每个partition是一个commit log结构,连续末尾追加的方式写入,有序且不可改变
- 每个partition中的记录都会被分配一个别称为offset的序列号,在当前partition中唯一
- 每个partiton会对应一个物理文件
- consumer会维护一个offset表示消费数据的位置,所以数据的消费完全由consumer控制