小编Ank*_*hal的帖子

Kafka 代理节点因“打开的文件太多”错误而宕机

我们有一个 3 节点的 Kafka 集群部署,总共有 35 个主题,每个主题有 50 个分区。总的来说,我们已经配置了replication factor=2. 我们看到一个非常奇怪的问题,Kafka 节点间歇性地停止响应并显示错误:

ERROR Error while accepting connection (kafka.network.Acceptor)
java.io.IOException: Too many open files
  at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
  at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)
  at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
  at kafka.network.Acceptor.accept(SocketServer.scala:460)
  at kafka.network.Acceptor.run(SocketServer.scala:403)
  at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

我们已经部署了最新的 Kafka 版本并使用 spring-kafka 作为客户端:

kafka_2.12-2.1.0(CentOS Linux 版本 7.6.1810(核心))

  • 有以下三点观察:
    1. 如果我们这样做lsof -p <kafka_pid>|wc -l,我们得到的打开描述符总数只有 7000 左右。
    2. 如果我们这样做lsof|grep kafka|wc -l,我们将获得大约 150 万个开放 FD。我们已经检查过它们都只属于 Kafka 进程。
    3. 如果我们将系统降级到 Centos6,那么 outlsof|grep kafka|wc -l会回到 7000。

我们已尝试将文件限制设置为非常大,但仍然出现此问题。以下是为 kafka 进程设置的限制:

cat /proc/<kafka_pid>/limits
    Limit …
Run Code Online (Sandbox Code Playgroud)

centos lsof ulimit apache-kafka spring-kafka

8
推荐指数
1
解决办法
7298
查看次数

标签 统计

apache-kafka ×1

centos ×1

lsof ×1

spring-kafka ×1

ulimit ×1