(十二)【Java程序员必背知识点】Kafka 我会带着你远行 2023-09-28 08:18 61阅读 0赞 #### 目录 #### * * * 12.1.1. Kafka 概念 * 12.1.2. Kafka 数据存储设计 * * 12.1.2.1. partition 的数据文件(offset,MessageSize,data) * 12.1.2.2. 数据文件分段 segment(顺序读写、分段命令、二分查找) * 12.1.2.3. 数据文件索引(分段索引、稀疏存储) * 12.1.3. 生产者设计 * * 12.1.3.1. 负载均衡(partition 会均衡分布到不同 broker 上) * 12.1.3.2. 批量发送 * 12.1.3.3. 压缩( GZIP 或 Snappy ) * 12.1.4. 消费 者 * * 12.1.4.1. Consumer Group -------------------- #### 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 选举,负载均衡等功能 ![在这里插入图片描述][ad646589523d4af0b45bf6ef5eec8ce6.png] #### 12.1.2. Kafka 数据存储设计 #### ##### 12.1.2.1. partition 的数据文件(offset,MessageSize,data) ##### partition 中的每条 Message 包含了以下三个属性:offset,MessageSize,data,其中 offset 表 示 Message 在这个 partition 中的偏移量,offset 不是该 Message 在 partition 数据文件中的实 际存储位置,而是逻辑上一个值,它唯一确定了 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 建立索引,而是采用了稀疏存 储的方式,每隔一定字节的数据建立一条索引。这样避免了索引文件占用过多的空间,从而可以 将索引文件保留在内存中。 ![在这里插入图片描述][b6a4c079d7b5426b8bd5efa4edf138e5.png] #### 12.1.3. 生产者设计 #### ##### 12.1.3.1. 负载均衡(partition 会均衡分布到不同 broker 上) ##### 由于消息 topic 由多个 partition 组成,且 partition 会均衡分布到不同 broker 上,因此,为了有 效利用 broker 集群的性能,提高消息的吞吐量,producer 可以通过随机或者 hash 等方式,将消 息平均发送到多个 partition 上,以实现负载均衡。 ![在这里插入图片描述][312c0af10ce649aea00f97f7ec8068b3.png] ##### 12.1.3.2. 批量发送 ##### 是提高消息吞吐量重要的方式,Producer 端可以在内存中合并多条消息后,以一次请求的方式发 送了批量的消息给 broker,从而大大减少 broker 存储消息的 IO 操作次数。但也一定程度上影响 了消息的实时性,相当于以时延代价,换取更好的吞吐量。 ##### 12.1.3.3. 压缩( GZIP 或 Snappy ) ##### Producer 端可以通过 GZIP 或 Snappy 格式对消息集合进行压缩。Producer 端进行压缩之后,在 Consumer 端需进行解压。压缩的好处就是减少传输的数据量,减轻对网络传输的压力,在对大 数据处理上,瓶颈往往体现在网络上而不是 CPU(压缩和解压会耗掉部分 CPU 资源)。 #### 12.1.4. 消费 者 #### ![在这里插入图片描述][40c9e1bae01f411f9e069948d310e018.png] ##### 12.1.4.1. Consumer Group ##### 同一 Consumer Group 中的多个 Consumer 实例,不同时消费同一个 partition,等效于队列模 式。partition 内消息是有序的,Consumer 通过 pull 方式消费消息。Kafka 不删除已消费的消息 对于 partition,顺序读写磁盘数据,以时间复杂度 O(1)方式提供消息持久化能力。 [ad646589523d4af0b45bf6ef5eec8ce6.png]: https://img-blog.csdnimg.cn/ad646589523d4af0b45bf6ef5eec8ce6.png [b6a4c079d7b5426b8bd5efa4edf138e5.png]: https://img-blog.csdnimg.cn/b6a4c079d7b5426b8bd5efa4edf138e5.png [312c0af10ce649aea00f97f7ec8068b3.png]: https://img-blog.csdnimg.cn/312c0af10ce649aea00f97f7ec8068b3.png [40c9e1bae01f411f9e069948d310e018.png]: https://img-blog.csdnimg.cn/40c9e1bae01f411f9e069948d310e018.png
相关 (三)【Java程序员必背知识点】JAVA 集合 目录 3. JAVA 集合 3.1. 接口继承关系和实现 3.2. List 3.2.1. ArrayList (数组 迷南。/ 2023年09月29日 15:37/ 0 赞/ 59 阅读
相关 (六)【Java程序员必背知识点】Spring 目录 6. Spring 原理 6.1.1. Spring 特点 6.1.1.1. 轻量级 浅浅的花香味﹌/ 2023年09月29日 15:29/ 0 赞/ 54 阅读
相关 (二)【Java程序员必背知识点】JVM 目录 2. JVM 2.1. 线程 2.2. JVM 2.2.1. 程序计数器( 线程私有) 2 妖狐艹你老母/ 2023年09月29日 15:22/ 0 赞/ 57 阅读
相关 (五)【Java程序员必背知识点】JAVA 基础 目录 5. JAVA 基础 5.1.1. JAVA 异常分类及处理 5.1.1.1. 概念 5.1.1.2. 小灰灰/ 2023年09月29日 15:14/ 0 赞/ 59 阅读
相关 (九)【Java程序员必背知识点】 网络 目录 9.1.1. 网络 7 层架构 9.1.2. TCP/IP 原理 9.1.2.1. 网络 访问层 Bertha 。/ 2023年09月28日 08:29/ 0 赞/ 191 阅读
相关 (八)【Java程序员必背知识点】Netty 与 RPC 目录 8.1.1. Netty 原理 8.1.2. Netty 高性能 8.1.2.1. 多路复用 通 待我称王封你为后i/ 2023年09月28日 08:27/ 0 赞/ 143 阅读
相关 (七)【Java程序员必背知识点】微服务 目录 7.1.1. 服务 注册 发现 7.1.1.1. 客户端注册 (zookeeper ) 分手后的思念是犯贱/ 2023年09月28日 08:20/ 0 赞/ 63 阅读
相关 (十二)【Java程序员必背知识点】Kafka 目录 12.1.1. Kafka 概念 12.1.2. Kafka 数据存储设计 12.1.2.1. 我会带着你远行/ 2023年09月28日 08:18/ 0 赞/ 62 阅读
相关 (十九)【Java程序员必背知识点】数据库 目录 19.1.1. 存储引擎 19.1.1.1. 概念 19.1.1.2. InnoDB ( 以你之姓@/ 2023年09月28日 08:12/ 0 赞/ 156 阅读
相关 (十三)【Java程序员必背知识点】RabbitMQ 目录 13.1.1. 概念 13.1.2. RabbitMQ 架构 13.1.2.1. Message 心已赠人/ 2023年09月28日 08:12/ 0 赞/ 89 阅读
还没有评论,来说两句吧...