Кафка принудительно загружает JKS повторно

#java #apache-kafka

Вопрос:

У меня есть клиент kafka, который использует ssl.

 bootstrap.servers=kafka1:9093
security.protocol=SSL
ssl.truststore.location=/var/private/ssl/kafka.client.truststore.jks
ssl.truststore.password=test1234
ssl.keystore.location=/var/private/ssl/kafka.client.keystore.jks
ssl.keystore.password=test1234
ssl.key.password=test1234
 

Обстоятельства:
Файлы jks периодически обновляются,потому что через некоторое время срок их действия истекает. Таким образом, JKS постоянно обновляется в файловой системе.

Но клиент kafka все еще использует старый jks, потому что он читает его только при создании клиента.

Истекший срок действия JKS не имеет значения, если:

  • Является текущим сеансом (поскольку рукопожатие уже произошло в начале сеанса)
  • Клиент перезапускается (он получит новый jks и выполнит рукопожатие)

Проблема:

Когда в середине сеанса брокер кафки отключается и возвращается к жизни, процесс рукопожатия начинается снова БЕЗ считывания JKS из файловой системы, что приводит к ошибке рукопожатия.

Это приводит к ненадежному KafkaClient, если используется SSL.

Каково же решение?
Есть ли что-нибудь подобное ssl.keystore.forceread=true ?

Ответ №1:

В то время org.apache.kafka.common.network.SslChannelBuilder как предоставляет reconfigure метод, он, по-видимому, используется только кодом брокера Кафки.

В случае клиентов, похоже, вам потребуется перезапустить их, так как экземпляр ChannelBuilder настраивается только один раз при запуске.

Ссылка (Кафка 2.8):

Комментарии:

1. И как его перезапустить? Или как остановить клиента в случае неудачи? Исключение исходит из его собственного сетевого потока. Я не мог найти способ поймать его и действовать соответственно.

2. Неуклюжим решением было бы отслеживать показатели — возможно, некоторые из них (например, скорость закрытия соединения) могут указывать на то, что что-то не так (но это может быть вызвано другими факторами, отсюда и неуклюжесть). В целом, похоже, что вашей архитектуре нужен какой-то оркестратор, который уведомляет приложения о том, что пришло время закрыть и заново создать клиентов Kafka, потому что файлы сертификатов везде изменились.

3. спасибо, да, я думаю, что уведомления решат эту проблему.