web-dev-qa-db-ja.com

kafka同期: "Java.io.IOException:開いているファイルが多すぎます"

kafkaに問題があります。ときどき突然、警告なしに同期が解除され、イベントを発行するときに例外が発生し始めます。

私たちが得ている例外は

Java.io.IOException: Too many open files

これは、多くの場合Kafkaによってスローされる一般的な例外のようです。少し調査しましたが、根本的な原因は、あるトピックにイベントを発行しようとしたときに失敗したためです。kafkaこのトピックのリーダーパーティションがありません

誰かが助けることができますか?

9
Yonihu

Linuxを使用していると思います。その場合、何が起こっているのかというと、開いているファイル記述子が不足しているということです。本当の問題は、なぜこれが起こっているのかということです。

Linuxは通常、デフォルトでこの数をかなり低く保ちます。 ulimitを介して実際の値を確認できます。

ulimit -a | grep "open files"

次に、ulimitを使用してその値を設定できます。

Sudo ulimit -n 4096

とはいえ、問題のKafkaホストに多くのトピック/パーティションがない限り、その制限に達することは珍しいことです。おそらく起こっていることは、他のプロセスがファイルまたは接続を開いたままにしていることです。どのプロセスを実行するかを理解するには、lsofを使用して検出作業を行う必要があります。

8
nelsonda

これが発生するケースの1つは、パーティション番号が大きい場合です。これは、各パーティションが2つのファイルで構成されるブローカーのファイルシステム内のディレクトリにマップされるためです。 1つはインデックス用で、もう1つはデータ用です。ブローカーは両方のファイルを開きます。したがって、パーティション番号が多いほど、開いているファイルが多くなります。 Doomyが言ったように、Linuxで開いているファイルを増やすことはできますが、この構成は永続的ではなく、セッションを閉じるとこの構成は消えます。このコマンドで確認すると、次のlogginで

ulimit -a | grep "open files"

あなたは古い番号を見ることができます。しかし、この構成を使用すると、永続的にすることができます。

このファイルを開きます:

Sudo nano /etc/pam.d/common-session

次の行を追加します。

session required pam_limits.so

その後、limits.configで次のように制限を設定できます。

Sudo nano /etc/security/limits.conf

次に、このファイルに制限を設定できます。

* soft nofile 80000

または任意のハード構成。その後、セッションを閉じて、開いているファイルの制限をもう一度確認してください

2
Technovation

Linux/CentOSで同様の「Java.io.IOException:開いているファイルが多すぎます」という問題が発生しました。私の場合、開いているfdをisofでチェックした後、開いている接続が多すぎるのはkafka-web-consoleでした。それをやめると私の問題は解決しました。

1
srk