Kafka开源代码阅读学习之旅(一)Kafka的简介与架构
一、Kafka简介
1.Kafka诞生的背景
Apache Kafka是由Apache软件基金会开发的一个开源消息系统项目,由Scala写成。Kafka最初是由LinkedIn开发(LinkedIn (领英) 创建于2002 年,致力于向全球职场人士提供沟通平台,并协助他们事半功倍,发挥所长。作为全球最大的职业社交网站,LinkedIn 会员人数在世界范围内已超过3 亿,每个《财富》世界500强公司均有高管加入),并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
Kafka是一个分布式的、分区的、多复本的日志提交服务。它通过一种独一无二的设计提供了一个消息系统的功能。现已与Cloudera Hadoop,Apache Storm,Apache Spark集成。在LinkedIn内部被用作LinkedIn的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。现在它已被多家不同类型的公司 作为多种类型的数据管道和消息系统使用。
Kafka作为LinkedIn中的中枢神经系统,管理从各个应用程序汇聚至此的信息流,这些数据被处理之后再被分发到各处。Kafka作为一个消息系统,进行信息的传递;同时它也是日志存储系统,以日志的形式存储了数据源的所有数据
2.Kafka的主要设计目标
Kafka作为一种分布式的、基于发布/订阅的消息系统,其主要设计目标如下
- 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上的数据也能保持常数时间的访问能力
- 高吞吐率,即使在非常廉价的商用机器上也能做到单机支持每秒100k条消息的传输
- 支持Kafka Server间的消息分区及分布式消费,同时保证每个分区内的消息顺序传输
- 支持离线数据处理和实时数据处理
- 支持在线水平扩展
3.为什么要使用消息系统
目的如下:
- 解耦
- 冗余
- 扩展性
- 灵活性和峰值处理能力
- 可恢复性
- 顺序保证
- 缓冲
- 异步通信
二、Kafka的架构
1.Kafka的基本组成
在kafka集群中生产者将消息发送给以topic命名的消息队列queue中,消费者订阅发往以某个topic命名的消息队列queue中的消息。其中kafka集群有若干个broker组成,topic由若干个partition组成,每个partition里面的消息通过offset来获取。
1.broker:简单来说一台 kafka服务器 就是一个broker,一个集群由多个broker组成,一个broker可以容纳多个topic
- topic: 每条发送到kafka集群的
- partition: 一个大的topic可以分为多个partition,从而分部到多台broker上,partition中的每条消息都会被分配一个自增ID(offset)。
- offset: 消息在topic的partition中的位置。
- producer: 消息生产者,即将消息发布到指定的topic中
- consumer: 消息消费者,向指定的topic中获取消息
- zookeeper: 存放kafka集群相关元数据的组件
2.一个简单的消息发送流程
1)producer根据指定的路由方法将消息push到topic的某个partition中
2)kafka集群接收到producer发来的消息后,将其持久化到硬盘,并保留消息指定时长,而不关注消息是否被消费
3)consumer从kafka集群中pull数据,并获取消息的offset
3.Kafka的拓扑结构
一个典型的kafka集群的拓扑结构如图所示
一个典型的Kafka集群中包含若干个Producer,若干个Broker ,若干个Consumer Group,以及一个Zookeeper集群。Kafka 通过Zookeeper管理集群配置。Producer使用Push模式将消息发布到Broker.上,Consumer使用Pull模式从Broker上订阅并消费消息。
Referance: Kafka源码解析与实战 - 王亮 机械工业出版社
多角度剖析kafka底层源码 - 开课吧