【问题标题】:What are the different logs under kafka data log dirkafka数据日志目录下有哪些不同的日志
【发布时间】:2020-12-25 20:08:01
【问题描述】:

我正在尝试了解 kafka 数据日志。我可以看到logs.dir中设置的目录下的日志为“Topicname_partitionnumber”。但是我想知道在它下面捕获的不同日志是什么。以下是示例日志的屏幕截图。

【问题讨论】:

标签: apache-kafka


【解决方案1】:

在 Kafka 日志中,每个分区都有一个 log.dir 目录。每个分区被分割成段。

段只是消息的集合。 Kafka 不是将所有消息都写入一个文件,而是将它们拆分为多个段。

每当 Kafka 写入分区时,它都会写入活动段。每个段都有定义的大小限制。当达到段大小限制时,它会关闭段并打开一个变为活动的新段。根据配置,一个分区可以有一个或多个段。

每个段包含三个文件 - segment.log、segment.index 和segment.timeindex

每个Kafka主题分区有三种文件类型:

-rw-r--r-- 1 kafka hadoop  10485760 Dec  3 23:57 00000000000000000000.index
-rw-r--r-- 1 kafka hadoop 148814230 Oct 11 06:50 00000000000000000000.log
-rw-r--r-- 1 kafka hadoop  10485756 Dec  3 23:57 00000000000000000000.timeindex

日志和索引文件前面的00000000000000000000 是段的名称。它表示写入该段的第一条记录的偏移量。如果有 2 个段,即段 1 包含消息偏移量 0,1,段 2 包含消息偏移量 2 和 3。

-rw-r--r-- 1 kafka hadoop  10485760 Dec  3 23:57 00000000000000000000.index
-rw-r--r-- 1 kafka hadoop 148814230 Oct 11 06:50 00000000000000000000.log
-rw-r--r-- 1 kafka hadoop  10485756 Dec  3 23:57 00000000000000000000.timeindex
-rw-r--r-- 1 kafka hadoop  10485760 Dec  3 23:57 00000000000000000002.index
-rw-r--r-- 1 kafka hadoop 148814230 Oct 11 06:50 00000000000000000002.log
-rw-r--r-- 1 kafka hadoop  10485756 Dec  3 23:57 00000000000000000002.timeindex

.log 文件存储偏移量、消息的物理位置、时间戳以及消息内容。在特定偏移量从 Kafka 读取消息时,在巨大的日志文件中查找偏移量成为一项昂贵的任务。 这就是.index 文件变得有用的地方。它将消息的偏移量和物理位置存储在日志文件中。

.timeindex 文件基于消息的时间戳。

【讨论】:

  • 谢谢。这很清楚。我也没有在 .log 文件中看到消息时间戳。我们是否需要对配置文件进行任何更改才能将其记录下来?我们需要及时知道分区中的消息。
  • 时间戳包含在 Kafka 0.10+ 版本的消息中。您使用的是哪个 kafka 版本?
  • 0.10.2.x是kafka版本
  • 这是来自 .log(数据)文件之一的示例。我可以看到一些额外的字符/符号,但看不到日期。我尝试用记事本和记事本++打开它。 pastebin.com/hStyCW13
【解决方案2】:

没有后缀的文件是段文件,即数据实际写入的文件,以最早包含的消息偏移量命名。其中最新的是活动段,即当前附加消息的段。

.index 是从偏移量到段文件中位置的对应映射。 .timeindex 是从时间戳到偏移量的映射。

【讨论】:

  • 没有扩展名的文件可能是因为Windows配置选项在链接到应用程序时隐藏扩展名
  • 当然不在 Windows 上运行 Kafka :)
  • 检查来自 OP 的屏幕截图,即 Windows 资源管理器。 Kafka 在 Windows 中运行,他也可以通过 FTP 复制文件。
【解决方案3】:

以下是示例日志的屏幕截图

您应该添加您的screenshotsample log,然后我们可以给出您期望的具体答案。


在此之前,只能给大家一些常识:

例如:在我的 CentOS 中,对于文件夹:

/root/logs/kafka/kafka.log/storybook_add-0

  • storybook_add: 是 主题 名称
    • 在代码中,真正的主题名称是storybook-add

它包含:

[root@xxx storybook_add-0]# ll
total 8
-rw-r--r-- 1 root root 10485760 Aug 28 16:44 00000000000000000023.index
-rw-r--r-- 1 root root      700 Aug 28 16:45 00000000000000000023.log
-rw-r--r-- 1 root root 10485756 Aug 28 16:44 00000000000000000023.timeindex
-rw-r--r-- 1 root root        9 Aug 28 16:44 leader-epoch-checkpoint
  • 00000000000000000023.log: 日志文件
    • 存储真实数据 = kafka 消息
  • 00000000000000000023.index: 索引文件
  • 00000000000000000023.timeindex:时间索引文件

->

  • 00000000000000000023 调用段名
    • 为什么是23
      • 00000000000000000023.log中,存储第一条消息的位置是23
        • kafka 之前已经完全收到了23 消息
  • 消息数据是什么样的?

    • 我们可以看穿它的内容:


进一步了解kafka的基本概念和逻辑,推荐阅读这篇文章:

A Practical Introduction to Kafka Storage Internals

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 2017-01-16
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多