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




Kafka AdminClient предназначен для административных задач, поэтому нет необходимости использовать его в контексте, требующем потокобезопасности.
Если вам нужно, чтобы несколько потоков использовали AdminClient для разных задач одновременно, вы можете просто создать несколько его экземпляров и использовать их отдельно, каждый в своем собственном потоке. Все они будут делать свое дело по отдельности, без проблем с параллелизмом, поскольку им не нужно разговаривать друг с другом или даже знать друг о друге. Нет необходимости, чтобы несколько потоков обращались к одному и тому же экземпляру AdminClient.
Создание экземпляров AdminClient требует больших затрат, поскольку им необходимо установить новое соединение. Добавьте рукопожатия SSL и тому подобное, и вы поймете, почему имеет смысл повторно использовать существующий AdminClient. Следовательно, неплохо иметь несколько потоков, обращающихся к одному и тому же экземпляру.
раздел предложений КИП указывает:
«Клиент будет многопоточным; несколько потоков смогут безопасно совершать вызовы, используя один и тот же объект AdminClient».
Кроме того, потокобезопасность Admin Client не документирована.
Да, AdminClient Apache Kafka является потокобезопасным в каждой версии Kafka, в которой он появляется. Мы создадим PR для обновления документации (я думал, что это уже было в JavaDoc, но похоже, что нет).
я не думаю, что это синхронизировано