kafka broker节点出现“打开的文件太多”错误

jhdbpxl9  于 2021-06-06  发布在  Kafka
关注(0)|答案(0)|浏览(504)

我们有一个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)

我们部署了最新的kafka版本,并使用spring kafka作为客户端:
Kafka2.12-2.1.0(centos linux 7.6.1810版(核心))
有三个观察结果:
如果我们这样做了 lsof -p <kafka_pid>|wc -l ,我们得到的开放描述符总数仅为7000个左右。
如果我们这么做的话 lsof|grep kafka|wc -l ,我们有大约150万个开放的fd。我们已经检查过它们都只属于Kafka进程。
如果我们将系统降级到centos6,那么 lsof|grep kafka|wc -l 回到7000。
我们已经尝试将文件限制设置为非常大,但仍然遇到了这个问题。以下是Kafka进程的限制:

cat /proc/<kafka_pid>/limits
    Limit                     Soft Limit           Hard Limit           Units
    Max cpu time              unlimited            unlimited            seconds
    Max file size             unlimited            unlimited            bytes
    Max data size             unlimited            unlimited            bytes
    Max stack size            8388608              unlimited            bytes
    Max core file size        0                    unlimited            bytes
    Max resident set          unlimited            unlimited            bytes
    Max processes             513395               513395               processes
    Max open files            500000               500000               files
    Max locked memory         65536                65536                bytes
    Max address space         unlimited            unlimited            bytes
    Max file locks            unlimited            unlimited            locks
    Max pending signals       513395               513395               signals
    Max msgqueue size         819200               819200               bytes
    Max nice priority         0                    0
    Max realtime priority     0                    0
    Max realtime timeout      unlimited            unlimited            us

我们这里有几个问题:
当我们已经配置了如此大的进程限制时,为什么代理会间歇性地宕机?Kafka需要更多可用的文件描述符吗?
为什么产量有差异 lsof 以及 lsof -p 在centos 6和centos 7?
代理节点的数量是否减少了3个?将复制因子视为2,我们在3个节点之间分布了每个主题大约100个分区,因此每个节点大约33个分区。
编辑1:似乎我们正在讨论Kafka问题:https://issues.apache.org/jira/browse/kafka-7697
我们将计划把Kafka的版本降到2.0.1。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题