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.log
、00000000000000000001.log
等。索引文件 : 除了日志文件外,每个日志段还有对应的索引文件 (
.index
) 和时间戳文件 (.timeindex
),用于加速数据的查找和存取。示例
假设你有一个主题
my-topic
,它有两个分区(0
和1
),在 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 中,消息(或记录)的结构包括以下几个主要部分:
键(Key): 可选的消息键,用于消息的分区策略。键在消息存储中可能会被序列化和附加到消息的开头。
值(Value): 消息的实际内容,这就是我们通常所说的 payload。它是消息的主要数据部分。
时间戳(Timestamp): 消息的时间戳,通常是消息被生产者发送的时间。
头(Headers): 可选的消息头,用于附加元数据到消息中。
Kafka 日志文件中的数据格式
Kafka 使用二进制格式来存储消息数据,日志文件中的数据通常是按照以下结构存储的:
消息偏移量: 每条消息在分区中的位置,这个偏移量用于快速访问和定位消息。
消息的长度: 消息的总长度(包括键、值、时间戳等)。
消息内容: 实际的消息数据。根据配置,消息内容可能包括:
- 键: 消息的键(如果存在)。
- 值: 消息的值(payload)。
- 时间戳: 消息的时间戳。
- 消息头: 消息的头部信息(如果存在)。
文件内容示例
在分区的日志文件中,消息数据以二进制形式存储。例如,一个日志文件可能包含如下内容:
- Message Offset: 位置1
- Message Length: 200 bytes
- Message Payload: 包含消息键、值、时间戳等数据
读取和解析
Kafka 客户端(如生产者和消费者)通过 Kafka 协议与 Kafka broker 交互,发送和接收这些消息数据。客户端使用协议来读取这些二进制数据并将其解码为实际的消息对象。
总结
Payload 是指消息的实际内容,它存储在 Kafka 日志文件中。在日志文件里,payload 是消息的一部分,包括在写入分区日志文件时的实际数据内容。Kafka 的设计旨在高效地管理和存储这些数据,保证高吞吐量和低延迟。