Является ли AdminClient в потокобезопасном пакете kafka-clients?

Мне нужно обеспечить существование темы kafka перед созданием событий, а автоматическое создание темы kafka по умолчанию неадекватно. Я решил использовать класс AdminClient, но меня беспокоят проблемы параллелизма.
В документации для Apache Kafka 2.2.x нет информации о безопасности потоков AdminClient. У кого-нибудь есть идеи?

я не думаю, что это синхронизировано

Deadpool 15.07.2019 13:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
1
738
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Kafka AdminClient предназначен для административных задач, поэтому нет необходимости использовать его в контексте, требующем потокобезопасности.

Если вам нужно, чтобы несколько потоков использовали AdminClient для разных задач одновременно, вы можете просто создать несколько его экземпляров и использовать их отдельно, каждый в своем собственном потоке. Все они будут делать свое дело по отдельности, без проблем с параллелизмом, поскольку им не нужно разговаривать друг с другом или даже знать друг о друге. Нет необходимости, чтобы несколько потоков обращались к одному и тому же экземпляру AdminClient.

Создание экземпляров AdminClient требует больших затрат, поскольку им необходимо установить новое соединение. Добавьте рукопожатия SSL и тому подобное, и вы поймете, почему имеет смысл повторно использовать существующий AdminClient. Следовательно, неплохо иметь несколько потоков, обращающихся к одному и тому же экземпляру.

Nether 11.05.2020 09:09

раздел предложений КИП указывает:

«Клиент будет многопоточным; несколько потоков смогут безопасно совершать вызовы, используя один и тот же объект AdminClient».

Кроме того, потокобезопасность Admin Client не документирована.

Ответ принят как подходящий

Да, AdminClient Apache Kafka является потокобезопасным в каждой версии Kafka, в которой он появляется. Мы создадим PR для обновления документации (я думал, что это уже было в JavaDoc, но похоже, что нет).

Другие вопросы по теме