Хорошо, теперь я понимаю, как продюсер и брокер работают для достижения порядка.
Итак, когда вызывается ProduceAsync, он добавляет сообщение в буфер отправки, создает обещание, которое используется для завершения будущего.и возвращает future.So, он создает исходный объект завершения задачи и возвращает свою задачу.
Клиентская библиотека (librdkafka) ждет, пока не получит настроенное количество сообщений или период ожидания для пакетной обработки сообщений.Создается пакет, содержащий сообщения в том же порядке, что и в буфере отправки.Пакет разбивается (случайным образом, если используется секционер по умолчанию) в зависимости от целевых разделов / тем, т. Е. Разбивается на меньшие партии.Каждый пакет после разделения отправляется соответствующему ведущему брокеру / ISR (отдельные send () выполняются последовательно), и каждый пакет проверяется соответствующим лидерским брокером в соответствии с request.required.acks.Клиентская библиотека вызывает обратный вызов для каждого полученного подтверждения, и обратный вызов завершает свое соответствующее будущее, то есть taskCompletionSource.Set ();