#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. спасибо, да, я думаю, что уведомления решат эту проблему.