Узел Kafka Broker завершает работу с ошибкой «Слишком много открытых файлов» - PullRequest
2 голосов
/ 12 марта 2019

У нас есть 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:

kafka_2.12-2.1.0 (CentOS Linux выпуск 7.6.1810 (Core))

  • Есть три наблюдения:
    1. Если мы сделаем lsof -p <kafka_pid>|wc -l, мы получимобщее количество открытых дескрипторов - всего около 7000.
    2. Если мы просто сделаем lsof|grep kafka|wc -l, мы получим около 1,5 миллиона открытых FD.Мы проверили, что все они принадлежат только процессу Кафки.
    3. Если мы понижаем систему до 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 в сентосах 6 и центосах 7?
  • Количество узлов брокера 3Меньше?Считая коэффициент репликации равным 2, мы имеем около 100 разделов на тему, распределенных между 3 узлами, то есть около 33 разделов на узел.

Редактировать 1: Похоже, мы столкнулись с проблемой Кафки:https://issues.apache.org/jira/browse/KAFKA-7697

Мы планируем понизить версию Kafka до 2.0.1.

...