kafka架构+原理+源码

news2024/9/21 2:47:24

1.安装jdk17

sudo yum -y update
sudo wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
sudo yum -y install ./jdk-17_linux-x64_bin.rpm、
sudo java -version

2.安装kafka

How to easily install kafka without zookeeper | Aditya’s Blog

1.kafka架构图

2.kafka producer

在 Kafka 中,一个文件并不直接对应一个分区,但每个分区会有多个文件来存储其数据。

Kafka 存储结构

  • 分区: Kafka 的每个主题(topic)可以有一个或多个分区。每个分区是一个有序的、不可变的消息日志。

  • 日志文件: 每个分区会被存储在一组日志文件中。Kafka 将每个分区的数据分成多个日志段(log segments)文件,这些文件是按时间顺序生成的,文件名中包含文件的创建时间戳和其他信息。

文件结构

  • 分区目录: 每个分区在 Kafka 的日志目录下有一个目录,例如 /tmp/kafka-logs/topic1-0。这个目录的名称中包含了主题名称和分区编号。

  • 日志段文件: 在每个分区目录下,会有多个日志段文件,这些文件通常以 .log 为后缀。例如,00000000000000000000.log00000000000000000001.log 等。

  • 索引文件: 除了日志文件外,每个日志段还有对应的索引文件 (.index) 和时间戳文件 (.timeindex),用于加速数据的查找和存取。

示例

假设你有一个主题 my-topic,它有两个分区(01),在 Kafka 的数据目录下,你会看到类似以下的文件结构:

 
 

bash

复制代码

/tmp/kafka-logs/my-topic-0/ 00000000000000000000.log 00000000000000000000.index 00000000000000000000.timeindex ... /tmp/kafka-logs/my-topic-1/ 00000000000000000000.log 00000000000000000000.index 00000000000000000000.timeindex ...

总结

  • 一个分区会有多个文件,通常包括日志文件、索引文件和时间戳文件。
  • 一个文件(日志段文件)只是存储分区数据的一部分,多个文件一起构成了分区的完整数据。

这使得 Kafka 可以高效地管理和存储大量的数据,同时保持高性能的数据读写能力。

payload

在 Kafka 中,文件中的 payload 指的是实际存储的消息数据。每个分区中的日志文件包含了分区所有消息的原始数据,即消息的 payload。下面是关于这些 payload 的一些详细信息:

消息的结构

在 Kafka 中,消息(或记录)的结构包括以下几个主要部分:

  1. 键(Key): 可选的消息键,用于消息的分区策略。键在消息存储中可能会被序列化和附加到消息的开头。

  2. 值(Value): 消息的实际内容,这就是我们通常所说的 payload。它是消息的主要数据部分。

  3. 时间戳(Timestamp): 消息的时间戳,通常是消息被生产者发送的时间。

  4. 头(Headers): 可选的消息头,用于附加元数据到消息中。

Kafka 日志文件中的数据格式

Kafka 使用二进制格式来存储消息数据,日志文件中的数据通常是按照以下结构存储的:

  1. 消息偏移量: 每条消息在分区中的位置,这个偏移量用于快速访问和定位消息。

  2. 消息的长度: 消息的总长度(包括键、值、时间戳等)。

  3. 消息内容: 实际的消息数据。根据配置,消息内容可能包括:

    • : 消息的键(如果存在)。
    • : 消息的值(payload)。
    • 时间戳: 消息的时间戳。
    • 消息头: 消息的头部信息(如果存在)。

文件内容示例

在分区的日志文件中,消息数据以二进制形式存储。例如,一个日志文件可能包含如下内容:

  • Message Offset: 位置1
  • Message Length: 200 bytes
  • Message Payload: 包含消息键、值、时间戳等数据

读取和解析

Kafka 客户端(如生产者和消费者)通过 Kafka 协议与 Kafka broker 交互,发送和接收这些消息数据。客户端使用协议来读取这些二进制数据并将其解码为实际的消息对象。

总结

Payload 是指消息的实际内容,它存储在 Kafka 日志文件中。在日志文件里,payload 是消息的一部分,包括在写入分区日志文件时的实际数据内容。Kafka 的设计旨在高效地管理和存储这些数据,保证高吞吐量和低延迟。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1948351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++——保持原有库头文件不变的情况下,成功编译运行工程

问:想要保持原来库方式,应该怎么操作呢? 答:如果想保持原来的方式,则只需要将 库所在路径 tracker/detector/rknn_model_zoo/utils 加入到 工程库包含中即可。

DVWA的安装和使用

背景介绍 DVWA是Damn Vulnerable Web Application的缩写,是一个用于安全脆弱性检测的开源Web应用。它旨在为安全专业人员提供一个合法的测试环境,帮助他们测试自己的专业技能和工具,同时也帮助web开发者更好地理解web应用安全防范的过程。DV…

FastAPI(七十)实战开发《在线课程学习系统》接口开发--留言功能开发

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 在之前的文章:FastAPI(六十九)实战开发《在线课程学习系统》接口开发--修改密码,这次分享留言功能开发 我们梳理…

gstreamer使用cairo实现视频OSD叠加

前言 gstreamer中视频叠加OSD有很多种方式,比如textoverlay添加文字,gdkpixbufoverlay添加图片,clockoverlay或timeoverlay插件显示时间,pango插件进行复杂文本渲染,使用cairo插件绘制图形或者文字。 今天使用最后一种:cairo 项目源码: 如果是QT,pro文件需要导入: …

Tensorflow中高维矩阵的乘法运算tf.matmul(tf.linalg.matmul)详悉

1.问题由来 在tensorflow框架下,经常会用到矩阵的乘法运算,特别是高(多)维的矩阵运算,在这些矩阵运算时,经常使用到其中的tf.matmul或tf.linalg.matmul等函数。但高维矩阵在内部怎么运算的?其内…

跟代码执行流程,读Megatron源码(四)megatron初始化脚本initialize.py之initialize_megatron()分布式环境初始化

在前文中,我们讲述了pretrain函数的执行流程,其首要步骤是megatron分组的初始化与环境的配置。本文将深入initialize_megatron函数源码,剖析其初始化分布式训练环境的内部机制。 注:在此假设读者具备3D并行相关知识 一. initiali…

Zabbix自定义监控内容部署+邮件报警+Zabbix自愈+Zabbix批量添加主机

一、自定义监控项 1.1自定义监控项原理 1)先明确获取监控指标数据的命令或脚本; 2)在被监控主机配置文件子目录(/etc/zabbix/zabbix_agent2.d/)中创建以.conf后缀的监控项配置文件,自定义获取监控指标数据的键值; …

Windows:批处理脚本学习

目录 一、第一个批处理文件 1. &&和 | | 2. | 和 & 二、变量 1.传参变量%name 2.初始化变量set命令 3.变量的使用 4.局部变量与全局变量 5.使用环境变量 6.扩充变量语法 三、注释REM和 :: 四:函数 1.定义函数 2.…

鸿蒙 Navigation VS Router 对比

当前HarmonyOS支持两套路由机制(Navigation和Router),Navigation作为后续长期演进及推荐的路由选择方案,其与Router比较的优势如下: 易用性层面: Navigation天然具备标题、内容、回退按钮的功能联动&…

看 Unity 组件的源码 —— ILSpy

ILSpy 是开源的 .NET 程序集浏览器和解编译器。 下载 ILSpy ILSpy Github 地址:icsharpcode/ILSpy: .NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform! (github.com) 它有 Release 包可以下载 也提供 IDE 的…

Cadence23学习笔记(十四)

ARC就是圆弧走线的意思: 仅打开网络的话可以只针对net进行修改走线的属性: 然后现在鼠标左键点那个走线,那个走线就会变为弧形: 添加差分对: 之后,分别点击两条线即可分配差分对: 选完差分对之后…

解锁创新:AI如何推动低代码应用的智能化

在当今快速变化的商业环境中,企业面临着前所未有的挑战和机遇。数字化转型已成为各行各业的必然趋势,企业需要迅速适应市场变化,提升客户体验,并降低开发成本。 这一背景下,低代码开发平台的崛起为企业提供了一种高效…

ICIP-2020-A Non-local Mean Temporal Filter for VideoCompression

在 libvpx、VP8、VP9 和 HEVC 等各种编码器实现中,早就发现在预处理阶段过程中从源视频信号去除噪声对客观压缩效率的提升存在好处。通常使用常规的块匹配运动搜索来构建运动轨迹,并沿着轨迹比较每对像素,根据像素间的差异确定时域滤波器系数…

SpringSecurity如何整合JWT

整合JWT 我们前几个小节,实现的是非前后端分离情况下的认证与授权的处理,目前大部分项目,都是使用前后端分离的模式。那么前后端分离的情况下,我们如何使用SpringSecurity来解决权限问题呢?最常见的方案就是SpringSe…

如何学习Airflow:糙快猛的大数据之路(附思维导图)

什么是Airflow? 在开始之前,让我们先简单了解一下Airflow是什么。Apache Airflow是一个开源的工作流管理平台。它允许你以代码的方式定义、调度和监控复杂的数据处理管道。 想象一下,你有一系列需要按特定顺序执行的任务,而且这些任务之间还有依赖关系,Airflow就是为解决这…

【NPU 系列专栏 1.1 -- NPU TOPS 算力的计算方式】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 NPU 算力MAC 阵列简介MAC 阵列特点 MAC 阵列的结构MAC 阵列架构示例 MAC 阵列计算举例示例计算 TOPS 计算方法 NPU 算力 OpenCV 算法会消耗很大一部分自动驾驶芯片的算力,在车上堆摄像头的同时也需要堆TOPS&#xf…

把 网页代码 嵌入到 单片机程序中,2024/7/25 17:33

把 网页代码 嵌入到 单片机程序中 废话不多说直接上结果: 代码中定义: const char* html" 处理过的网页代码 " ; 处理网页代码的 web 程序( 主要是 正则 把双引号 加 符号) <!DOCTYPE html> <html lang"en" style"background-color: rgba…

Python 爬虫 tiktok API 获取TIKTOK标签信息 数据采集

此接口可通过标签id一键查询到tiktok标签信息&#xff0c;如有需要&#xff0c;请点击文末链接联系我们。 详细采集页面如图 https://www.tiktok.com/tag/musicand?_r1&namemusicand&u_codeeab7jd1ha5l36c&_deab7h4fj9h9k1f&share_challenge_id2878999&…

CXL与NVME融合场景下, 计算存储应用案例分析

场景1:数据写入之前 目标是避免数据从存储设备传输到主机内存再返回存储设备的传统过程中的数据搬运成本。通过利用CXL和NVMe技术的结合&#xff0c;可以在存储层直接对数据进行处理&#xff0c;即所谓的计算存储&#xff08;Computational Storage&#xff09;。这特别适用于…

革新优选购物模式:重塑电商体验

在当今竞争激烈的电商市场中&#xff0c;革新优选购物模式以其独特的运营策略脱颖而出&#xff0c;其核心在于通过价格优化、激励机制创新以及社交网络的深度融合&#xff0c;激发消费者的购物热情&#xff0c;实现销售与用户忠诚度的双重飞跃。 一、合规运营&#xff0c;构建信…