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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好用的资产管理系统 国内5款资产管理系统排名

选择合适的固定资产管理系统对于企业的资产跟踪和维护至关重要。市场上有许多优秀的资产管理系统,每款系统都有其独特的功能和优势。本文将盘点5个好用的固定资产管理系统排名不分先后,帮助您了解它们的主要特点和适用场景,从而选择最适合您企…

【Java 数据结构】ArrayList类介绍

ArrayList类介绍 初识List接口ArrayList类ArrayList类是什么顺序表的模拟实现初始化增加元素删除元素查找元素修改元素 ArrayList类使用构造方法ArrayList源码阅读常用方法及其注意事项 初识List接口 List 是集合框架中的一个接口, 它的里面包含了一些方法, 例如add(), remove…

JAVA项目样本

学生管理系统SISM-v2.0 项目构建 ebtity 学生类:属性,setter,getter,toString(),构造器… dao层 数据交互,数组CRUD(增删改查) 接口 实现

《Techporters架构搭建》-Day03 功能权限设计

功能权限设计 引言权限介绍什么是权限权限的作用 RBAC概述RBAC的组成RBAC支持的安全原则RBAC模型 基于RBAC的权限设计用户管理角色管理菜单管理部门管理岗位管理 权限系统设计ER图标准RBAC模型表复杂RBAC模型表 多租户架构什么是多租户?多租户特点多租户模型竖井隔离…

汽车免拆诊断案例 | 2014 款上汽名爵 GT 车发动机无法起动

故障现象 一辆2014款上汽名爵GT车,搭载15S4G发动机,累计行驶里程约为18.4万km。该车因左前部发生碰撞事故进厂维修,更换损坏的部件后起动发动机,起动机运转有力,但无着机迹象。用故障检测仪检测,发现无法与…

(leetcode学习)236. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖…

【BUG】已解决:TypeError: the JSON object must be str, bytes or bytearray, not dict

已解决:TypeError: the JSON object must be str, bytes or bytearray, not dict 目录 已解决:TypeError: the JSON object must be str, bytes or bytearray, not dict 【常见模块错误】 错误原因: 解决方案: 欢迎来到英杰社区…

2024最新手机软件APP下载排行网站源码 软件下载站PHP源码

源码介绍 这是一款简洁蓝色的手机软件下载应用排行、平台和最新发布网站源码,主要包括主页、APP列表页、APP详情介绍页、新闻资讯列表、新闻详情页、关于我们等模块页面。 软件下载站PHP网站源码,简单的部署上线,访问首页安装程序&#xff…

探索PyMuPDF:Python中的强大PDF处理库

探索PyMuPDF:Python中的强大PDF处理库 背景:为何选择PyMuPDF 在数字化时代,PDF文件因其跨平台的兼容性和对格式的严格保持而成为文档交换的通用格式。然而,处理PDF文件往往需要专门的工具或库。这就是PyMuPDF库的用武之地。PyMuP…

飞书群聊机器人自定义机器人接入,并实现艾特@群成员功能

飞书群聊机器人还是比钉钉的要麻烦一点,钉钉的直接通过手机号就可以艾特群里面的人,但是飞书的要想艾特群里面的人,需要使用用户的 Open ID 或 User ID。这两个ID怎么获取呢?还需要在飞书的开放平台上创建一个应用,然后…

【MySQL是怎样运行的 | 第二篇】MySQL三大日志文件

文章目录 2.MySQL三大日志文件2.1日志文件列表2.1.1 redo log2.1.2 bin log2.1.3 undo log 2.2redo log日志详讲2.3 binglog和redo log有什么区别?2.4一条更新语句的执行过程 2.MySQL三大日志文件 2.1日志文件列表 redo log:重做日志,记录了…

mysql面试(五)

前言 本章节从数据页的具体结构,分析到如何生成索引,如何构成B树的索引结构。 以及什么是聚簇索引,什么是联合索引 InnoDB数据结构 行数据 我看各种文档中有好多记录数据结构的,但是这些都是看完就忘的东西。在这里详细讲也没…

深度学习复盘与论文复现E

文章目录 一、项目复现的问题及其解决方案1、 Cannot find DGL C graphbolt library2、 “is“ with a literal. Did you mean ““?”3、运行SEG、SPG查看GATNet的网络结构4、关于LI-FPN项目找不到数据粒度不匹配问题5、关于LI-FPN项目num_samples为空6、解决路径问题7、 !ss…

Fork软件笔记:一键拉取仓库所有模块

Fork是一个好用的git工具,只是没有中文而已(不过不用翻译也能看使用)。 工具下载地址:https://fork.dev/ 界面展示: 当项目中仓库模块比较多时,可以看到每个模块都是一个分页,每一个都要手动切换…

Git 分布式版本控制系统、创建分支,跳转分支、git拉取、在码云上创建项目,进行pull 和 push、克隆码云上任意项目

目录 1.Git 分布式版本控制系统: 1.安装git 2.创建目录,进行初始化 3.写入Java文件,提交文件 4.文件放入仓库 2.创建分支,跳转分支(所有的git操作都应该工作在,指定的init 目录下进行) 1.…

【前端学习笔记】CSS基础一

一、什么是CSS 1.CSS 介绍 CSS(Cascading Style Sheets,层叠样式表)是一种用来控制网页布局和设计外观的样式语言。它使得开发者可以分离网页的内容(HTML)和表现形式(样式),提高了…

微信小程序:vant-weapp 组件库、css 变量

vant-weapp 组件库 前往 vant-weapp 官网 npm 使用限制:不支持依赖于 Node.js 内置库、浏览器内置对象、C 插件 的包。 安装 vant-weapp # 通过 npm 安装 npm i vant/weapp -S --production# 通过 yarn 安装 yarn add vant/weapp --production# 安装 0.x 版本 npm i…

学术研讨 | 区块链与隐私计算领域专用硬件研讨会顺利召开

学术研讨 近日,国家区块链技术创新中心主办,长安链开源社区支持的“区块链与隐私计算领域专用硬件研讨会”顺利召开,会议围绕基于区块链与隐私计算的生成式AI上链、硬件加速、软硬协同等主题展开讨论,来自复旦大学、清华大学、北京…

钉钉 ai卡片 stream模式联调

sdk连接 新建卡片模板下载node.js sdkconfig.json 配置应用信息 启动项目npm i npm run build npm run start连接成功 获取卡片回调 注册卡片回调事件调用https://api.dingtalk.com/v1.0/card/instances 创建卡片实例,返回实例Id //参数结构 {"cardTempla…

【Hot100】LeetCode—279. 完全平方数

目录 题目1- 思路2- 实现⭐完全平方数——题解思路 3- ACM 实现 题目 原题连接:279. 完全平方数 1- 思路 思路 动规五部曲 2- 实现 ⭐完全平方数——题解思路 class Solution {public int numSquares(int n) {// 1. 定义 dpint[] dp new int[n1];//2. 递推公式…