探究Kafka原理-5.Kafka设计原理和生产者原理解析(上)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 探究Kafka原理-5.Kafka设计原理和生产者原理解析

Kafka系统基本架构


自我推导设计:


  • kafka 是用来存数据
  • 现实世界数据有分类,所以存储系统也应有数据分类管理功能,如 mysql 的表;kafka 有 topic;
  • 如一个 topic 的数据全部交给一台 server 存储和管理,则读写吞吐量有限
  • 所以,一个 topic 的数据应该可以分成多个部分(partition)分别交给多台 server存储和管理;
  • 如一台 server 宕机,这台 server 负责的 partition 将不可用,所以,一个 partition 应有多个副本;
  • 一个 partition 有多个副本,则副本间的数据一致性难以保证,因此要有一个 leader 统领读写;
  • 一个 leader 万一挂掉,则该 partition 又不可用,因此还要有 leader 的动态选举机制;
  • 集群有哪些 topic,topic 有哪几个分区,server 在线情况,等等元信息和状态信息需要在集群内部及客户端之间共享,则引入了 zookeeper;
  • 客户端在读取数据时,往往需要知道自己所读取到的位置,因而要引入消息偏移量维护机制;


broker 服务器


一台 kafka 服务器就是一个 broker。一个 kafka 集群由多个 broker 组成。


生产者 producer


消息生产者,就是向 kafka broker 发消息的客户端


消费者 consumer


consumer :消费者,从 kafka broker 取消息的客户端。


consumer group:消费组,单个或多个 consumer 可以组成一个消费组;


消费组是用来实现消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段

消费者可以对消费到的消息位置(消息偏移量)进行记录;


老版本是记录在 zookeeper 中;新版本是记录在 kafka 中一个内置的 topic 中(__consumer_offsets)


主题 topic 和分区 partition


topic


Kafka 中存储数据的逻辑分类;你可以理解为数据库中“表”的概念;


比如,将 app 端日志、微信小程序端日志、业务库订单表数据分别放入不同的 topic


partition 分区


topic 中数据的具体管理单元;


  • 每个 partition 由一个 kafka broker 服务器管理;
  • 每个 topic 可以划分为多个 partition,分布到多个 broker 上管理;
  • 每个 partition 都可以有多个副本;


分区对于 kafka 集群的好处是:实现 topic 数据的负载均衡。提高写入、读出的并发度,提高吞吐量。


分区副本 replica


每个 topic 的每个 partition 都可以配置多个副本(replica),以提高数据的可靠性;


每个 partition 的所有副本中,必有一个 leader 副本,其他的就是 follower 副本(observer 副本);follower


定期找 leader 同步最新的数据;对外提供服务只有 leader;


分区 leader


partition replica 中的一个角色,在一个 partition 的多个副本中,会存在一个副本角色为 leader;


producer 和 consumer 只能跟 leader 交互(读写数据)。


分区 follower


partition replica 中的一个角色,它通过心跳通信不断从 leader 中拉取、复制数据(只负责备份)。


如果 leader 所在节点宕机,follower 中会选举出新的 leader;


消息偏移量 offset


partition 中每条消息都会被分配一个递增 id(offset);通过 offset 可以快速定位到消息的存储位置;


kafka 只保证按一个 partition 中的消息的顺序,不保证一个 topic 的整体(多个 partition 间)的顺序。

因为broker将数据写入分区存储文件时,永远都是追加,所以kafka把自己的数据存储文件称之为log。


ISR 同步副本列表


ISR 概念:(同步副本)。每个分区的 leader 会维护一个 ISR 列表,ISR 列表里面就是 follower 副本的 Borker 编 号 , 只 有 跟 得 上 Leader 的 follower 副 本 才 能 加 入 到 ISR 里 面 , 这 个 是 通 过replica.lag.time.max.ms =10000(默认值)参数配置的,只有 ISR 里的成员才有被选为 leader 的可能

踢出 ISR 和重新加入 ISR 的条件:


  • 踢出 ISR 的条件: 由 replica.lag.time.max.ms =10000 决定,如上图;
  • 重新加入 ISR 的条件: OSR 副本的 LEO(log end offset)追上 leader 的 LEO;


kafka 的数据存储结构



物理存储目录结构


  • 存储目录 名称规范: topic 名称-分区号

注:“t1"即为一个 topic 的名称;

而“t1-0 / t1-1"则表明这个目录是 t1 这个 topic 的哪个 partition;


  • 数据文件 名称规范:

生产者生产的消息会不断追加到 log 文件末尾,为防止 log 文件过大导致数据定位效率低下,Kafka采取了分片和索引机制 ;


  1. 每个 partition 的数据将分为多个 segment 存储
  2. 每个 segment 对应两个文件:“.index"文件和“.log"文件。

index 和 log 文件以当前 segment 的第一条消息的 offset。

index 索引文件中的数据为: 消息 offset -> log 文件中该消息的物理偏移量位置;


Kafka 中的索引文件以稀疏索引( sparse index )的方式构造消息的索引,它并不保证每个消息在索引文件中都有对应的索引;每当写入一定量(由 broker 端参数 log.index.interval.bytes 指定,默认值为 4096 ,即 4KB )的消息时,偏移量索引文件和时间戳索引文件分别增加一个偏移量索引项和时间戳索引项,增大或减小 log.index.interval.bytes 的值,对应地可以缩小或增加索引项的密度;


查询指定偏移量时,使用二分查找法来快速定位偏移量的位置。


消息 message 存储结构


在客户端编程代码中,消息的封装类有两种:ProducerRecordConsumerRecord


简单来说,kafka 中的每个 massage 由一对 key-value 构成:


Kafka 中的 message 格式经历了 3 个版本的变化了:v0 、 v1 、 v2

各个字段的含义介绍如下:


  • crc:占用 4 个字节,主要用于校验消息的内容;(循环冗余校验码)
  • magic:这个占用 1 个字节,主要用于标识 Kafka 版本。Kafka 0.10.x magic 默认值为 1;
  • attributes:占用 1 个字节,这里面存储了消息压缩使用的编码以及 Timestamp 类型。目前 Kafka 支持 gzip、snappy 以及 lz4(0.8.2 引入) 三种压缩格式;[0,1,2]三位 it 表示压缩类型。[3]位表示时间错类型(0,create time;1,append time),[4,5,6,7]位保留;
  • key length:占用 4 个字节。主要标识 Key 的内容的长度;
  • key:占用 N 个字节,存储的是 key 的具体内容;(相当于读多少位之后这个就是key,知道key有多长就能读对key)
  • value length:占用 4 个字节。主要标识 value的内容的长度;
  • value:value 即是消息的真实内容,在 Kafka 中这个也叫做 payload。(知道value有多长就能读对value)


通过这些设置,在发送的时候,如果网络中出现了波动,那么我们就能够知道消息是有问题的。


探究Kafka原理-5.Kafka设计原理和生产者原理解析(下):https://developer.aliyun.com/article/1413724

目录
相关文章
|
22天前
|
存储 缓存 算法
HashMap深度解析:从原理到实战
HashMap,作为Java集合框架中的一个核心组件,以其高效的键值对存储和检索机制,在软件开发中扮演着举足轻重的角色。作为一名资深的AI工程师,深入理解HashMap的原理、历史、业务场景以及实战应用,对于提升数据处理和算法实现的效率至关重要。本文将通过手绘结构图、流程图,结合Java代码示例,全方位解析HashMap,帮助读者从理论到实践全面掌握这一关键技术。
72 13
|
2月前
|
消息中间件 存储 缓存
大厂面试高频:Kafka 工作原理 ( 详细图解 )
本文详细解析了 Kafka 的核心架构和实现原理,消息中间件是亿级互联网架构的基石,大厂面试高频,非常重要,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka 工作原理 ( 详细图解 )
|
2月前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
77 1
|
8天前
|
存储 物联网 大数据
探索阿里云 Flink 物化表:原理、优势与应用场景全解析
阿里云Flink的物化表是流批一体化平台中的关键特性,支持低延迟实时更新、灵活查询性能、无缝流批处理和高容错性。它广泛应用于电商、物联网和金融等领域,助力企业高效处理实时数据,提升业务决策能力。实践案例表明,物化表显著提高了交易欺诈损失率的控制和信贷审批效率,推动企业在数字化转型中取得竞争优势。
49 14
|
17天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
73 1
|
2月前
|
运维 持续交付 虚拟化
深入解析Docker容器化技术的核心原理
深入解析Docker容器化技术的核心原理
59 1
|
2月前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
64 1
|
2月前
|
存储 供应链 算法
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景
64 0
|
2月前
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
98 2
|
3月前
|
数据采集 存储 编解码
一份简明的 Base64 原理解析
Base64 编码器的原理,其实很简单,花一点点时间学会它,你就又消除了一个知识盲点。
97 3

推荐镜像

更多
下一篇
开通oss服务