kafka架构+原理+源码

1.安装jdk17

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

相关推荐
快乐非自愿2 小时前
分布式系统架构2:服务发现
架构·服务发现
2401_854391082 小时前
SSM 架构中 JAVA 网络直播带货查询系统设计与 JSP 有效实现方法
java·开发语言·架构
264玫瑰资源库2 小时前
从零开始C++棋牌游戏开发之第二篇:初识 C++ 游戏开发的基本架构
开发语言·c++·架构
神一样的老师2 小时前
面向高精度网络的时间同步安全管理架构
网络·安全·架构
2401_857026232 小时前
基于 SSM 架构的 JAVA 网络直播带货查询系统设计与 JSP 实践成果
java·开发语言·架构
9527华安2 小时前
FPGA实现MIPI转FPD-Link车载同轴视频传输方案,基于IMX327+FPD953架构,提供工程源码和技术支持
fpga开发·架构·mipi·imx327·fpd-link·fpd953
DT辰白2 小时前
如何解决基于 Redis 的网关鉴权导致的 RESTful API 拦截问题?
后端·微服务·架构
老猿讲编程4 小时前
技术发展历程:从 CORBA 到微服务
微服务·云原生·架构
碳学长4 小时前
2025系统架构师(一考就过):案例题之一:嵌入式架构、大数据架构、ISA
大数据·架构·系统架构
brzhang7 小时前
十年磨一剑:那些关于长期软件开发的思考,架构设计中如何做好技术选型
前端·后端·架构