Kafka底层原理剖析(近万字建议收藏)(一)

简介: Kafka底层原理剖析

Kafka 简介


Apache Kafka 是一个分布式发布-订阅消息系统。是大数据领域消息队列中唯一的王者。最初由 linkedin 公司使用 scala 语言开发,在2010年贡献给了Apache基金会并成为顶级开源项目。至今已有十余年,仍然是大数据领域不可或缺的并且是越来越重要的一个组件。


Kafka 适合离线和在线消息,消息保留在磁盘上,并在集群内复制以防止数据丢失。


kafka构建在zookeeper同步服务之上。它与 Flink 和 Spark 有非常好的集成,应用于实时流式数据分析。


Kafka特点:


  1. 可靠性:具有副本及容错机制。


  1. 可扩展性:kafka无需停机即可扩展节点及节点上线。


  1. 持久性:数据存储到磁盘上,持久性保存。


  1. 性能:kafka具有高吞吐量。达到TB级的数据,也有非常稳定的性能。


  1. 速度快:顺序写入和零拷贝技术使得kafka延迟控制在毫秒级。


Kafka 底层原理


先看下 Kafka 系统的架构


image.png


kafka支持消息持久化,消费端是主动拉取数据,消费状态和订阅关系由客户端负责维护,消息消费完后,不会立即删除,会保留历史消息。因此支持多订阅时,消息只会存储一份就可以。


  1. broker:kafka集群中包含一个或者多个服务实例(节点),这种服务实例被称为broker(一个broker就是一个节点/一个服务器);


  1. topic:每条发布到kafka集群的消息都属于某个类别,这个类别就叫做topic;


  1. partition:partition是一个物理上的概念,每个topic包含一个或者多个partition;


  1. segment:一个partition当中存在多个segment文件段,每个segment分为两部分,.log文件和 .index 文件,其中 .index 文件是索引文件,主要用于快速查询, .log 文件当中数据的偏移量位置;


  1. producer:消息的生产者,负责发布消息到 kafka 的 broker 中;


  1. consumer:消息的消费者,向 kafka 的 broker 中读取消息的客户端;


  1. consumer group:消费者组,每一个 consumer 属于一个特定的 consumer group(可以为每个consumer指定 groupName);


  1. .log:存放数据文件;


  1. .index:存放.log文件的索引数据。


Kafka 主要组件


1. producer(生产者)


producer主要是用于生产消息,是kafka当中的消息生产者,生产的消息通过topic进行归类,保存到kafka的broker里面去。


2. topic(主题)


  1. kafka将消息以topic为单位进行归类;


  1. topic特指kafka处理的消息源(feeds of messages)的不同分类;


  1. topic是一种分类或者发布的一些列记录的名义上的名字。kafka主题始终是支持多用户订阅的;也就是说,一 个主题可以有零个,一个或者多个消费者订阅写入的数据;


  1. 在kafka集群中,可以有无数的主题;


  1. 生产者和消费者消费数据一般以主题为单位。更细粒度可以到分区级别。


3. partition(分区)


kafka当中,topic是消息的归类,一个topic可以有多个分区(partition),每个分区保存部分topic的数据,所有的partition当中的数据全部合并起来,就是一个topic当中的所有的数据。


一个broker服务下,可以创建多个分区,broker数与分区数没有关系;


在kafka中,每一个分区会有一个编号:编号从0开始。


每一个分区内的数据是有序的,但全局的数据不能保证是有序的。(有序是指生产什么样顺序,消费时也是什么样的顺序)


4. consumer(消费者)


consumer是kafka当中的消费者,主要用于消费kafka当中的数据,消费者一定是归属于某个消费组中的。


5. consumer group(消费者组)


消费者组由一个或者多个消费者组成,同一个组中的消费者对于同一条消息只消费一次。


每个消费者都属于某个消费者组,如果不指定,那么所有的消费者都属于默认的组。


每个消费者组都有一个ID,即group ID。组内的所有消费者协调在一起来消费一个订阅主题( topic)的所有分区(partition)。当然,每个分区只能由同一个消费组内的一个消费者(consumer)来消费,可以由不同的消费组来消费。


partition数量决定了每个consumer group中并发消费者的最大数量。如下图:


image.png


如上面左图所示,如果只有两个分区,即使一个组内的消费者有4个,也会有两个空闲的。


如上面右图所示,有4个分区,每个消费者消费一个分区,并发量达到最大4。

在来看如下一幅图:


image.png


如上图所示,不同的消费者组消费同一个topic,这个topic有4个分区,分布在两个节点上。左边的 消费组1有两个消费者,每个消费者就要消费两个分区才能把消息完整的消费完,右边的 消费组2有四个消费者,每个消费者消费一个分区即可。

相关文章
|
12天前
|
消息中间件 Kafka API
原理剖析| Kafka Exactly Once 语义实现原理:幂等性与事务消息
原理剖析| Kafka Exactly Once 语义实现原理:幂等性与事务消息
|
2月前
|
消息中间件 存储 缓存
一文带你秒懂 Kafka工作原理!
Apache Kafka 是一个高吞吐量、低延迟的分布式消息系统,广泛应用于实时数据处理、日志收集和消息队列等领域。它最初由LinkedIn开发,2011年成为Apache项目。Kafka支持消息的发布与订阅,具备高效的消息持久化能力,适用于TB级数据的处理。
|
4月前
|
消息中间件 存储 缓存
大厂面试高频:Kafka 工作原理 ( 详细图解 )
本文详细解析了 Kafka 的核心架构和实现原理,消息中间件是亿级互联网架构的基石,大厂面试高频,非常重要,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka 工作原理 ( 详细图解 )
|
5月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
352 0
|
5月前
|
消息中间件 缓存 分布式计算
大数据-59 Kafka 高级特性 消息发送03-自定义拦截器、整体原理剖析
大数据-59 Kafka 高级特性 消息发送03-自定义拦截器、整体原理剖析
73 2
|
5月前
|
消息中间件 缓存 大数据
大数据-57 Kafka 高级特性 消息发送相关01-基本流程与原理剖析
大数据-57 Kafka 高级特性 消息发送相关01-基本流程与原理剖析
82 3
|
7月前
|
消息中间件 Kafka 数据库
深入理解Kafka的数据一致性原理及其与传统数据库的对比
【8月更文挑战第24天】在分布式系统中,确保数据一致性至关重要。传统数据库利用ACID原则保障事务完整性;相比之下,Kafka作为高性能消息队列,采用副本机制与日志结构确保数据一致性。通过同步所有副本上的数据、维护消息顺序以及支持生产者的幂等性操作,Kafka在不牺牲性能的前提下实现了高可用性和数据可靠性。这些特性使Kafka成为处理大规模数据流的理想工具。
143 6
|
7月前
|
消息中间件 存储 SQL
Kafka架构及其原理
Kafka架构及其原理
190 1
|
7月前
|
消息中间件 存储 缓存
这么酷的Kafka,背后的原理了解一下又不会死!
这么酷的Kafka,背后的原理了解一下又不会死!
249 2
|
7月前
|
消息中间件 缓存 Kafka
图解Kafka:架构设计、消息可靠、数据持久、高性能背后的底层原理
【8月更文挑战第15天】在构建高吞吐量和高可靠性的消息系统时,Apache Kafka 成为了众多开发者和企业的首选。其独特的架构设计、消息可靠传输机制、数据持久化策略以及高性能实现方式,使得 Kafka 能够在分布式系统中大放异彩。本文将通过图解的方式,深入解析 Kafka 的这些核心特性,帮助读者更好地理解和应用这一强大的消息中间件。
270 0