После обновления до весеннего облачного потока 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?
Спасибо за помощь.