Я строю планировщик корпоративных событий на основе потоков Kafka.Запланированные события собираются или генерируются из микросервисов в облаке.Каждый микросервис будет иметь около 200 рабочих потоков для обработки пользовательских запросов с пропускной способностью более 10K TPS.Каждый запрос будет генерировать событие, которое будет запущено в будущем, и это событие необходимо опубликовать в Kafka для обработки потоков с семантикой с однократным определением.Я могу найти много примеров в Интернете, которые отправляют много записей в цикле между beginTransaction и commitTransaction для производителя.В моем случае около 200 потоков генерируют события, и я не считаю правильным начинать новую транзакцию для каждого сообщения.Мое текущее решение состоит в том, чтобы создать BlockingQueue и позволить всем потокам проталкивать в него событие, и одиночный производитель Kafka будет периодически истощать очередь и отправлять событие в Kafka в транзакции.Пока что это довольно стабильно, но я обеспокоен тем, что нет возможности для каждого запроса узнать, было ли сообщение успешно передано в Kafka.С точки зрения отдельного запроса, он отправляет событие в очередь блокировки и немедленно возвращается к вызывающей стороне.В случае сбоя микросервиса мы можем потерять события в очереди блокировки.Другое решение, о котором я думаю, - это создать пул производителей с десятками производителей, созданных и инициированных с разными идентификаторами транзакций;Тем не менее, я думаю, что это будет очень ресурсоемким.Мне интересно, если у кого-нибудь есть лучшее решение для этого варианта использования.Спасибо.