【问题标题】:kafka message log files rolling over frequentlykafka消息日志文件频繁滚动
【发布时间】:2017-05-14 12:08:25
【问题描述】:

我安装并配置了 confluent kafka。并且 kafka 以 1GB 的堆大小运行。

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" #from /bin/kafka-server-start

我创建了一个只有一个分区的主题“事物数据”,并使用自动化作业每 5 秒将一些数据注入该主题。每条消息的大小约为 2400 字节。

我看到的是我的主题的最小偏移量变化太频繁。这意味着 kafka 队列能够在给定的时间点保存很少的记录。我查看了 /var/log/kafka/thing-data-0/ 中的主题消息日志文件大小

[hduser@laptop thing-data-0]$ ll

-rw-r--r--. 1 confluent confluent 10485760 Dec 30 17:05 00000000000000148868.index
-rw-r--r--. 1 confluent confluent   119350 Dec 30 17:05 00000000000000148868.log

[hduser@laptop thing-data-0]$ ll

-rw-r--r--. 1 confluent confluent 10485760 Dec 30 17:08 00000000000000148928.index
-rw-r--r--. 1 confluent confluent    54901 Dec 30 17:08 00000000000000148928.log

[hduser@laptop thing-data-0]$ ll

-rw-r--r--. 1 confluent confluent 10485760 Dec 30 17:12 00000000000000148988.index
-rw-r--r--. 1 confluent confluent    38192 Dec 30 17:13 00000000000000148988.log

如您所见,日志文件非常频繁地翻转。每次旧文件都被标记为 .deleted 并在配置的时间后被删除。

以下是与 /etc/kafka/server.properties 中的日志相关的配置设置。

log.roll.hours=168
log.retention.hours=168  #i tried with log.retention.ms as well .. :-)  
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000

当我重新启动 kafka 时,文件如下所示。

-rw-r--r--. 1 confluent confluent 10485760 Dec 30 17:21 00000000000000149099.index
-rw-r--r--. 1 confluent confluent        0 Dec 30 17:21 00000000000000149099.log

我怀疑 .index 文件大小有问题,因为它设置为最大值(segment.index.bytes 默认值为 10485760)。 (我怀疑这是因为 kafka 集群运行了将近一个月)

不确定这是怎么回事,任何帮助将不胜感激。

我在下面给出了一些参考。

http://kafka.apache.org/documentation/

https://stackoverflow.com/questions/28586008/delete-message-after-consuming-it-in-kafka

【问题讨论】:

  • 您还指定了哪些其他自定义配置?例如,您是否指定了 'log.index.interval.bytes' ?此外,.index 文件应该是预先分配的,所以它的大小是正确的。
  • 感谢 amethystic.. 看起来您对每次分配的索引文件是正确的。 issues.apache.org/jira/browse/KAFKA-1554 .. 让我从帖子中删除该部分以避免混淆。我没有添加 log.index.interval.bytes.. 所以应该默认为 4096
  • 会不会是File.lastModified检索到的最后修改时间为零触发频繁删除日志段?
  • 你写的消息的时间戳是什么,你使用什么版本?在早期版本的 Kafka 中,日志滚动是基于挂钟时间触发的,但后来的版本使用记录时间戳进行日志滚动。因此,如果您使用最新的 Kafka 编写带有旧时间戳的消息,则可能会非常频繁地触发日志滚动。
  • 感谢 Mathias 提供的信息。我不知道这一点。我正在使用 kafka 0.10.0.1 。从链接issues.apache.org/jira/browse/KAFKA-4099 看来,基于时间的日志滚动是从 0.10.1.0 开始应用的......这是正确的吗?

标签: logging apache-kafka rollover


【解决方案1】:

您是否检查了log.roll.ms - 这是主要配置。默认情况下,它没有任何价值。但如果存在,它将覆盖log.roll.hours

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多