【问题标题】:Kafka Streams application opening too many files on kafka serversKafka Streams 应用程序在 kafka 服务器上打开太多文件
【发布时间】:2018-11-10 08:44:56
【问题描述】:

我一直在开发一个基于 java kafka-streams API 的应用程序,其目标是处理来自一个 kafka 主题的数据流,并将其生成到另一个主题中。

看起来,每当我开始使用 kafka-streams 应用程序生成消息时,文件句柄都会在我正在使用的 kafka 代理上保持打开状态,并且它们永远不会关闭,这意味着最终 kafka 服务器会打开太多文件,然后 kafka 和 zookeeper 守护进程崩溃。

我使用kafka-streams-1.0.1 API jar for Java,并在 JDK 11 上运行。kafka 集群是 Kafka 版本 1.0.0。

我的应用程序的配置包括以下 kafka 生产者配置:

  • batch.size:设置为 100,000 条消息。
  • linger.ms:设置为 1000 毫秒。
  • buffer.memory:设置为相当于 5 兆字节的字节。

流处理本身很简单,组成:

stream.map((k,v) -> handle(k,v)).filter((k,v) -> v != null).to(outgoingTopic);

如果你们有任何建议,我将不胜感激。

【问题讨论】:

  • Confluent 的建议是将主机的内核配置为允许 100.000+ 个打开的文件句柄。通常默认值远低于此值。
  • 并且配置到那个级别。尽管如此,文件仍在继续打开
  • 我认为 Java 11 没有得到 Kafka 社区的官方支持,也没有经过官方测试。不过不知道是不是这个问题
  • Java 11 用作我自己的应用程序的运行时,不应影响 Kafka 服务器上发生的事情
  • 看来您对 kafka 流的使用非常简单。我建议使用更新版本的 Kafka,看看是否能解决问题。 2.0.0 已经发布几个月了,2.1.0 即将发布,可能在接下来的几周内。

标签: java apache-kafka apache-kafka-streams


【解决方案1】:

使用 Java 8 或 Java 10 或更低版本,并且 使用最新的 Kafka,https://kafka.apache.org/quickstart

在此处查看有关 https://issues.apache.org/jira/browse/KAFKA-6855 提交的错误的一些报告

【讨论】:

    【解决方案2】:

    如果消息可能导致时间戳乱序,覆盖 Kafka 流时间戳提取器似乎不是一个好主意。 恢复到默认时间戳提取器后,我已经全部修复了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2016-12-27
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多