当前位置: 首页 > news >正文

kafka架构+原理+源码

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 的设计旨在高效地管理和存储这些数据,保证高吞吐量和低延迟。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PHP $_POST 变量
  • 全链路追踪 性能监控,GO 应用可观测全面升级
  • Python数值计算(9)
  • 大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
  • 【iOS】—— iOS持久化
  • 【Git】.gitignore全局配置与忽略匹配规则详解
  • 快速识别音频文件转成文字
  • 实战:安装ElasticSearch 和常用操作命令
  • C#中的异步编程:Task、Await 和 Async
  • Settings搜索系统SettingsIntelligence
  • 数说故事 | 大数据洞察宠物消费市场数据
  • java-静态工具类获取YAML配置文件中的值
  • Vue 模版编译原理
  • git fetch和 pull的区别
  • Java基本语法学习的案例练习
  • [NodeJS] 关于Buffer
  • 【comparator, comparable】小总结
  • exif信息对照
  • HTTP中的ETag在移动客户端的应用
  • Laravel核心解读--Facades
  • Linux快速复制或删除大量小文件
  • vagrant 添加本地 box 安装 laravel homestead
  • vue.js框架原理浅析
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 简单易用的leetcode开发测试工具(npm)
  • 每天10道Java面试题,跟我走,offer有!
  • 如何学习JavaEE,项目又该如何做?
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 详解NodeJs流之一
  • 移动端 h5开发相关内容总结(三)
  • 用Visual Studio开发以太坊智能合约
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​用户画像从0到100的构建思路
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (6)STL算法之转换
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (pytorch进阶之路)扩散概率模型
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • ./和../以及/和~之间的区别
  • .jks文件(JAVA KeyStore)
  • .NET 4.0中的泛型协变和反变
  • .net Stream篇(六)
  • .net 程序发生了一个不可捕获的异常
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET关于 跳过SSL中遇到的问题
  • @ConfigurationProperties注解对数据的自动封装
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ 蓝桥杯Web真题 ]-布局切换
  • []串口通信 零星笔记
  • [383] 赎金信 js