JAVA面试——Kafka

简介: JAVA面试——Kafka

12.1.1. Kafka 概念

Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用

Scala 语言编写,目前是 Apache 的开源项目。

1. broker:Kafka 服务器,负责消息存储和转发

2. topic:消息类别,Kafka 按照 topic 来分类消息

3. partition:topic 的分区,一个 topic 可以包含多个 partition,topic 消息保存在各个

partition 上

4. offset:消息在日志中的位置,可以理解是消息在 partition 上的偏移量,也是代表该消息的

唯一序号

5. Producer:消息生产者

6. Consumer:消息消费者

7. Consumer Group:消费者分组,每个 Consumer 必须属于一个 group

8. Zookeeper:保存着集群 broker、topic、partition 等 meta 数据;另外,还负责 broker 故

障发现,partition leader 选举,负载均衡等功能

image.png

12.1.2. Kafka 数据存储设计

12.1.2.1. partition 的数据文件(offset,MessageSize,data

partition 中的每条 Message 包含了以下三个属性:offset,MessageSize,data,其中 offset 表

示 Message 在这个 partition 中的偏移量,offset 不是该 Message 在 partition 数据文件中的实13/01/2022

Page 176 of 283

际存储位置,而是逻辑上一个值,它唯一确定了 partition 中的一条 Message,可以认为 offset 是

partition 中 Message 的 id;MessageSize 表示消息内容 data 的大小;data 为 Message 的具

体内容。

12.1.2.2. 数据文件分段 segment(顺序读写、分段命令、二分查找

partition 物理上由多个 segment 文件组成,每个 segment 大小相等,顺序读写。每个 segment

数据文件以该段中最小的 offset 命名,文件扩展名为.log。这样在查找指定 offset 的 Message 的

时候,用二分查找就可以定位到该 Message 在哪个 segment 数据文件中。

12.1.2.3. 数据文件索引(分段索引、稀疏存储

Kafka 为每个分段后的数据文件建立了索引文件,文件名与数据文件的名字是一样的,只是文件扩

展名为.index。index 文件中并没有为数据文件中的每条 Message 建立索引,而是采用了稀疏存

储的方式,每隔一定字节的数据建立一条索引。这样避免了索引文件占用过多的空间,从而可以

将索引文件保留在内存中

image.png

12.1.3. 生产者设计

12.1.3.1. 负载均衡(partition 会均衡分布到不同 broker 上)

由于消息 topic 由多个 partition 组成,且 partition 会均衡分布到不同 broker 上,因此,为了有

效利用 broker 集群的性能,提高消息的吞吐量,producer 可以通过随机或者 hash 等方式,将消

息平均发送到多个 partition 上,以实现负载均衡。

image.png

12.1.3.2. 批量发送

是提高消息吞吐量重要的方式,Producer 端可以在内存中合并多条消息后,以一次请求的方式发

送了批量的消息给 broker,从而大大减少 broker 存储消息的 IO 操作次数。但也一定程度上影响

了消息的实时性,相当于以时延代价,换取更好的吞吐量。

12.1.3.3. 压缩(GZIP 或 Snappy

Producer 端可以通过 GZIP 或 Snappy 格式对消息集合进行压缩。Producer 端进行压缩之后,在

Consumer 端需进行解压。压缩的好处就是减少传输的数据量,减轻对网络传输的压力,在对大

数据处理上,瓶颈往往体现在网络上而不是 CPU(压缩和解压会耗掉部分 CPU 资源)。

image.png

12.1.1.1. Consumer Group

同一 Consumer Group 中的多个 Consumer 实例,不同时消费同一个 partition,等效于队列模

式。partition 内消息是有序的,Consumer 通过 pull 方式消费消息。Kafka 不删除已消费的消息

对于 partition,顺序读写磁盘数据,以时间复杂度 O(1)方式提供消息持久化能力。


目录
相关文章
|
9月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
427 7
|
11月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
550 1
|
8月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
10月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
626 0
|
10月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
431 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
8月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
11月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
284 5
|
11月前
|
安全 Java API
2025 年 Java 校招面试常见问题及详细答案汇总
本资料涵盖Java校招常见面试题,包括Java基础、并发编程、JVM、Spring框架、分布式与微服务等核心知识点,并提供详细解析与实操代码,助力2025校招备战。
473 1