Apache Kafka
(Kafka 简介)
Introduction of Kafka
Introduction
What Will We Cover Today?
What Will We NOT Cover Today?
Future Goals
Kafka: The Definitive Guide: Real-Time Data and Stream Processing at Scale
by : Neha Narkhede (Author),
Gwen Shapira (Author),
Todd Palino (Author)
https://www.amazon.com/dp/1491936169
Getting Started with Apache Kafka
by : Ryan Plant
https://www.pluralsight.com/courses/apache-kafka-getting-started
Kafka全套教程 从源码到面试真题by海波
by : 尚硅谷IT培训学校
https://www.youtube.com/watch?v=HLSQDk2asjY&list=PLmOn9nNkQxJEDjzl0iBYZ3WuXUuUStxZl
Thanks
Terminology
Distribution System, stream, Message, Queue, Event, Pub, Sub, Producer, Consumer, Topic, Broker, Partitions, Cluster, Consumer Group(CG), Leader follower, replica, offset, Zookeeper, MirrorMaker, controller, Serialization or Deserialization, Zero Copy
Question so far … ?
What is Kafka?
What is Kafka?
"Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications."
https://kafka.apache.org/
What is Kafka (Continue)?
2010
LinkedIn Initial Development
2012
Apache License
2015 - now
Netflix, Uber, Spotify, etc.
2017
Apache Kafka 1.0
2018
Apache Kafka 2.0
Apache Kafka 3.0
History
2021
ource: https://www.pluralsight.com/courses/apache-kafka-getting-started
Why is Kafka?
source: https://www.pluralsight.com/courses/apache-kafka-getting-started
Pre-2010 3 High(高量值, 高峰值, 品种繁多)
High Volume:
High Velocity:
High Variety:
source: https://www.pluralsight.com/courses/apache-kafka-getting-started
4 Problems
source: https://www.pluralsight.com/courses/apache-kafka-getting-started
4 Problems (Continue)
source: https://www.pluralsight.com/courses/apache-kafka-getting-started
a Better Solution?
To move data around:
That’s What LinkedIn Asked in 2010…
Yes, Kafka
source: https://www.pluralsight.com/courses/apache-kafka-getting-started
source: https://www.pluralsight.com/courses/apache-kafka-getting-started
source: Kafka: https://www.pluralsight.com/courses/apache-kafka-getting-started
DB (example)
Better Solution
Kafka is a Better Solution
How does Kafka work?
Kafka Architecture Overview
Kafka 详细架构图
source: https://www.youtube.com/watch?v=19dzMtsV9pg
1
2
3
4
Message Queue
传统消息队列的应用场景
传统消息队列的应用场景
source: https://www.youtube.com/watch?v=19dzMtsV9pg
Message Queue
消息队列实现原理
Kafka : 发布 producer / 订阅 Consumer
消息队列的2种模式(点对点模式)
source: https://www.youtube.com/watch?v=19dzMtsV9pg
消息队列的2种模式(发布/订阅模式)
source: https://www.youtube.com/watch?v=19dzMtsV9pg
Kafka 详细架构图
source: https://www.youtube.com/watch?v=19dzMtsV9pg
1
2
3
4
Kafka 详细架构图
4 parts
Producer, Consumer, Broker, Cluster, Message, Topic
source: https://www.pluralsight.com/courses/apache-kafka-getting-started
message
message
Kafka 详细架构图
source: https://www.youtube.com/watch?v=19dzMtsV9pg
1
2
3
4
消费者组是逻辑上的一个订阅者
Kafka 工作流程(管理消息)
消费者组是逻辑上的一个订阅者
source: https://www.youtube.com/watch?v=19dzMtsV9pg
2
消费者组是逻辑上的一个订阅者
Kafka 文件存储机制
source: https://www.youtube.com/watch?v=19dzMtsV9pg
这些文件位于一个文件夹下
该文件夹的命名 规则为:topic 名称+分区序号
逻辑上的区分
物理概念,相当于一个文件夹
Kafka Segment .index 和 .log文件
source: https://www.youtube.com/watch?v=19dzMtsV9pg
物理磁盘上面实际的物理地址便宜量Position
保存消息( Broker)
source: https://www.youtube.com/watch?v=19dzMtsV9pg
存储策略 无论消息是否被消费,kafka 都会保留所有消息 inside broker。
存储方式
物理上把topic分成一个或多个 partition(对应 server.properties中的num.partitions配置),每个partition物理上对应一个文件夹(该文件夹存储该 partition的所有消息.log 和索引文件 .index)
两种策略删除旧数据:
1)基于时间:log.retention.hours=168�2)基于大小:log.retention.bytes=1073741824�
需要注意的是,因为 Kafka 读取特定消息的时间复杂度为 O(1),即与文件大小无关,所以这里删除过期文件与提高Kafka性能无关。
Kafka 生产过程分析(写入方式)
source: https://www.youtube.com/watch?v=19dzMtsV9pg
Producer写入流程
source: https://www.youtube.com/watch?v=19dzMtsV9pg
顺序写磁盘
零复制技术
Kafka 高效读写数据
Why is kafka fast
https://kafka.apache.org/081/documentation.html
Why is kafka fast (Continue)?
Kafka 零复制技术
source: https://www.youtube.com/watch?v=19dzMtsV9pg
Replicas
Kafka 数据可靠性保证
source: https://www.youtube.com/watch?v=19dzMtsV9pg
Broker
Broker
Kafka 副本数据同步策略
source: https://www.youtube.com/watch?v=19dzMtsV9pg
Kafka Partition
Kafka 生产过程分析(分区 Partition)
�
source: https://www.youtube.com/watch?v=19dzMtsV9pg
消息发送时都被发送到一个 topic,其本质就是一个目录,而 topic 是由一些 Partition Logs(分区日志)组成: 。
我们可以看到,每个 Partition 中的消息都是有序的,生产的消息被不断追加到 Partition log 上,其中的每一个消息都被赋予了一个唯一的 offset 值。
Kafka 生产过程分析(分区 Partition 2)
�
source: https://www.youtube.com/watch?v=19dzMtsV9pg
分区的原因
分区的原则
Kafka 详细架构图
source: https://www.youtube.com/watch?v=19dzMtsV9pg
1
2
3
4
Kafka Consumer
消息消费的并发量
Kafka 详细架构图
source: https://www.youtube.com/watch?v=19dzMtsV9pg
1
2
3
4
Apache Zookeeper
Zookeeper 在 Kafka 中的作用
source: https://www.youtube.com/watch?v=19dzMtsV9pg
处于同步状态的副本叫做in-sync-replicas(ISR)
但不会在其他的broker中,另启动一个副本
Kafka 详细架构图
source: https://www.youtube.com/watch?v=19dzMtsV9pg
1
2
3
4
Q & A
Kafka主要包含四个主要的API组件:
https://mp.weixin.qq.com/s/7ZT31OhDjn0kOkYZS_z0oA
在kafka的设计中,将消息的offset作为了Segment文件名的一部分。Segment文件命名规则为:Partition全局的第一个Segment从0开始,后续每个segment文件名为上一个Partition的最大offset(Message的offset,非实际物理地偏移地址,实际物理地址需映射到.log中,后面会详细介绍在.log文件中查询消息的原理)。数值最大为64位long大小,由20位数字表示,前置用0填充。
https://mp.weixin.qq.com/s/7ZT31OhDjn0kOkYZS_z0oA
Segment 文件命名规则
https://mp.weixin.qq.com/s/7ZT31OhDjn0kOkYZS_z0oA
1.根据需要消费的下一个消息的offset,这里假设是7,使用二分查找在Partition中查找到文件名小于(一定要小于,因为文件名编号等于当前offset的文件里存的都是大于当前offset的消息)当前offset的最大编号的.index文件,这里自然是查找到了00000000000000000000.index。
2.在.index文件中,使用二分查找,找到offset小于或者等于指定offset(这里假设是7)的最大的offset,这里查到的是6,然后获取到index文件中offset为6指向的Position(物理偏移地址)为258。
3.在.log文件中,从磁盘位置258开始顺序扫描,直到找到offset为7的Message。至此,我们就简单介绍完了Segment的基本组件.index文件和.log文件的存储和查询原理。
但是我们会发现一个问题:.index文件中的offset并不是按顺序连续存储的,为什么Kafka要将索引文件设计成这种不连续的样子?这种不连续的索引设计方式称之为稀疏索引,
Kafka中采用了稀疏索引的方式读取索引,kafka每当.log中写入了4k大小的数据,就往.index里以追加的写入一条索引记录。
使用稀疏索引主要有以下原因:
(1)索引稀疏存储,可以大幅降低.index文件占用存储空间大小。
(2)稀疏索引文件较小,可以全部读取到内存中,可以避免读取索引的时候进行频繁的IO磁盘操作,以便通过索引快速地定位到.log文件中的Message
https://mp.weixin.qq.com/s/7ZT31OhDjn0kOkYZS_z0oA
7. Message Message是实际发送和订阅的信息是实际载体,Producer发送到Kafka集群中的每条消息,都被Kafka包装成了一个Message对象,之后再存储在磁盘中,而不是直接存储的。Message在磁盘中的物理结构如下所示:
其中key和value存储的是实际的Message内容,长度不固定,而其他都是对Message内容的统计和描述,长度固定。因此在查找实际Message过程中,磁盘指针会根据Message的offset和message length计算移动位数,以加速Message的查找过程。之所以可以这样加速,因为Kafka的.log文件都是顺序写的,往磁盘上写数据时,就是追加数据,没有随机写的操作。
Partition Replicas
Distributed Systems
需要多少个broker ?
一个 Kafka 集群需要多少个 broker 取决于以下几个因素:
Why is kafka fast (Continue)?
Why does a DSP include?
Why does a DSP include (Continue)?
Why does a DSP include?
kafka vs. Hadoop
kafka vs. ETL tools