Kafka

简介: Kafka 理论知识整理

Kafka 构成

  • Zookeeper: 管理kafka的原数据
  • 控制器(broker):集群部署的情况下,每台集群就是一个Broker,多个Broker会选举一个Controler(谁先注册,谁就是Controller)
  • 主题(Topic)是逻辑上的概念, 它有⼀个或多个分区(Partition), 消息就是存在这些具体的分区⾥⾯。
  • 分区(Partition)其实也是⼀个逻辑上的概念, 每个主题会有⼀个/多个分区, 我们⽣产的消息会追加到这些分区的Log⽂件⾥⾯, 同⼀个主题下的分区包含的消息是不同的。消息是以追加的形式存储在分区中。消息在被追加到分区⽇志⽂件的时候都会分配⼀个特定的偏移量(offset),offset是消息在分区中的唯⼀标识。Kafka保证分区有序,并不保证主题消息有序。
  • 副本Replica)是分区的物理实现, ⼀个分区可以有多个副本, ⼀个分区的多个副本分为Leader副本Follower副本, Leader副本负责提供读写能
  • ⼒,Follower副本会从Leader副本同步数据⽤于备份。
  • 生产者(customer):⽣产者负责创建消息, 然后将其投递到Kafka中, 当然这些消息最终也是落到具体的某些Broker中存储(之所以说“某些”,是因为消息是可以有多副本存储的)
  • 消费者(Consumer):消费者负责接受消息, 它会连接到Kafka上并且监听是否有新的消息是否需要被消费

Kafka是一个集群部署的模式,一个集群多台集群每个机器就是一个Brokers,创建不同的topic,topic下可以创不同的分区partition,每个partition会有多个副本,不同的副本落在不同的Brokers,保障了高可用;

Kafka 文件存储设计

Kafka 是直接通过写磁盘的方式来,在设计时采用了文件追加的方式来写入消息, 即只能在日志文件的尾部追加新的消息,并且也不允许修改写入的消息, 这种方式属于典型的顺序写盘的操作,所以就算 kafka 使用磁盘作为存储介质,它所能承载的吞吐量也不容小觑。

Kafka为什么这么快

  1. 利用partition 实现并行处理

一个topic包含一个或多个partition,不同的partition可位于不同的节点,每个partition对应一个文件夹,即使同一个节点页可以控制到不同的磁盘,充分利用了分布式集群的优势

  1. 顺序写磁盘

Kafka 中每个分区是一个有序的,不可变的消息序列,新的消息不断追加到 partition 的末尾,这个就是顺序写(Partition 分为多个 Segment,每个 Segment 对应一个物理文件,通过删除整个文件的方式去删除 Partition 内的数据)

  1. 零拷贝技术、页缓存

零拷贝:抛开原有数据IO复制,减少IO的切换

页缓存:读数据读缓存,写数据写缓存积攒一定数据量后再进行写,减少IO读写

(刷盘参数:

log.flush.interval.messages 在将消息刷新到磁盘之前,在日志分区上累积的消息数量
log.flush.interval.ms 在刷新到磁盘之前,任何topic中的消息保留在内存中的最长时间(以毫秒为单位)  )

  1. 批处理

Kafka 的客户端和 broker 还会在通过网络发送数据之前,在一个批处理中累积多条记录 (包括读和写)。记录的批处理分摊了网络往返的开销,使用了更大的数据包从而提高了带宽利用率。

具体实现如下:

每一个partition都有一个队列,达到一定数量就发送,总共队列由内存空间由buffer.memory配置,32MB。

数据压缩协议

Kafka 支持 GZIP、Snappy、LZ4 和 ZStandard 压缩协议。

分区越多,吞吐量不一定越大

在一定条件下,分区数的数量是和吞吐量成正比的,分区数和性能也是成正比的。但是超过了限度后,不升反降,文件的句柄开销大

每个 partition 都会对应磁盘文件系统的一个目录。在 Kafka 的数据日志文件目录中,每个日志数据段都会分配两个文件,一个索引文件和一个数据文件。每个 broker 会为每个日志段文件打开一个index 文件句柄和一个数据文件句柄。因此,随着 partition 的增多,所需要保持打开状态的文件句柄数也就越多,最终可能超过底层操作系统配置的文件句柄数量限制。

相关文章
|
存储 关系型数据库 MySQL
深入理解MySQL索引:从原理到最佳实践
深入理解MySQL索引:从原理到最佳实践
1263 0
|
编译器 API 数据安全/隐私保护
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
1090 3
|
数据采集 定位技术 数据安全/隐私保护
ESP8266调用NTP服务器进行时间校准
NTP服务器通常连接到具有高度精确时间源的设备,例如:GPS接收器或原子钟,以确保提供准确如一的时间。网络上的计算机可以通过连接到NTP服务器来同步其时间,并确保它们在同一时刻进行操作。
1971 0
|
JavaScript 前端开发 UED
小白请看! 大厂面试题 :如何用JS实现瀑布流
小白请看! 大厂面试题 :如何用JS实现瀑布流
|
9月前
|
搜索推荐 UED
销售易CRM:用户体验与市场评价深度分析
销售易CRM是国内领先的客户关系管理系统,以其现代化的界面设计、强大的移动端支持和优质的客户服务赢得广泛好评。系统操作简洁直观,支持个性化定制与多设备访问,移动端功能齐全且具备离线支持,协同工具丰富。销售易注重客户服务,提供快速响应、专业培训和持续优化。市场评价显示,用户对其功能、体验和服务均给予高度认可,是企业提升客户管理效率和推动销售增长的理想选择。
|
11月前
|
人工智能 搜索推荐 Serverless
《AI 剧本生成与动画创作》解决方案测评报告
《AI 剧本生成与动画创作》解决方案测评报告
直方图的绘制 基于python-matplotlib库
直方图的绘制 基于python-matplotlib库
625 0
直方图的绘制 基于python-matplotlib库
|
小程序 Ubuntu Linux
PXE高效批量网络装机
PXE高效批量网络装机
|
消息中间件 存储 网络协议
kafka基本知识概述
kafka基本知识概述
216 0
|
XML JSON JavaScript
JsonRPC协议详解(协议介绍、请求示例、响应示例)
RPC(远程过程调用)是一种用于实现分布式系统中不同进程或不同计算机之间通信的技术。它允许我们像调用本地函数一样调用远程计算机上的函数,使得分布式系统的开发变得更加简单和高效。 JsonRPC是一种基于JSON(JavaScript Object Notation)的轻量级远程过程调用协议。与其他RPC协议相比,JsonRPC使用简单的文本格式进行通信,易于阅读和编写,广泛应用于Web服务和分布式系统中。
1735 0