Слишком много открытых файлов в проекте с использованием Spring-Cloud Stream и Kafka после обновления до 2.1 - PullRequest
1 голос
/ 23 мая 2019

После обновления до весеннего облачного потока 2.1 в проекте, использующем multi binder kafka (2 брокера) и rabbit (1 брокер), мы столкнулись с проблемой слишком большого количества открытых файлов.

Количество открытых файлов продолжает расти до предела, определенного os (redhat 7.3).

Я использую конечную точку привода для контроля: /actuator/metrics/process.files.open

{
"name": "process.files.open",
"description": "The open file descriptor count",
"baseUnit": "files",
"measurements": [
{
"statistic": "VALUE",
"value": 1686
}

]
}

При использовании версии 2.0 весеннего облачного потока проблема не наблюдается, количество открытых файлов стабильно около 80 файлов. Используя точные следующие версии:

 +- org.springframework.cloud:spring-cloud-stream-binder-kafka-core:jar:2.0.0.RELEASE:compile
[INFO] |  |  \- org.springframework.integration:spring-integration-kafka:jar:3.0.3.RELEASE:compile
[INFO] |  +- org.apache.kafka:kafka-clients:jar:1.0.2:compile
[INFO] |  |  +- org.lz4:lz4-java:jar:1.4:compile
[INFO] |  |  \- org.xerial.snappy:snappy-java:jar:1.1.4:compile
[INFO] |  \- org.springframework.kafka:spring-kafka:jar:2.1.10.RELEASE:compile

Я подозреваю, что возможной проблемой является обновление до kafka-client 2.0.0.

В первой попытке я хотел попробовать весенний облачный поток 2.1 с kafka-client 1.0.2, согласно docs это возможно, но я столкнулся с проблемой. Вот моя конфигурация maven с исключением:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-stream-binder-kafka</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-kafka</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>1.0.2</version>
</dependency>
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-kafka</artifactId>
    <version>3.1.0.RELEASE</version>
</dependency>

У меня следующая ошибка:

java.lang.NoSuchMethodError: org.apache.kafka.clients.consumer.Consumer.poll(Ljava/time/Duration;)Lorg/apache/kafka/clients/consumer/ConsumerRecords;
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.pollAndInvoke(KafkaMessageListenerContainer.java:741)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:698)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
    at java.base/java.lang.Thread.run(Thread.java:834)

Есть идеи о слишком большом количестве открытых файлов и о том, как их диагностировать? Как я могу проводить тестирование с клиентами с пониженным качеством kafka?

Спасибо за помощь.

1 Ответ

0 голосов
/ 28 мая 2019

java.lang.NoSuchMethodError: org.apache.kafka.clients.consumer.Consumer.poll (Ljava / time / Duration;) Lorg / apache / kafka / clients / customer / ConsumerRecords;

spring-kafka 2.2.x требуется клиент 2.0.0 или более поздней версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...