Позвольте мне сначала попытаться вызвать различие между flush()
и acks
, прежде чем я перейду к двум вопросам.
flush()
- Это метод, который должен вызываться в продюсере длясообщения брокерам из буфера (настраиваемые), поддерживаемые на стороне производителя.Вы бы либо вызвали этот метод, либо close()
для отправки сообщений посредникам из буфера производителя.Это вызывается автоматически, если буферная память, доступная производителю, заполняется (как описано Маноджем в его ответе).Тем не менее,
acks=ALL
является обязанностью брокера, т.е. отправлять подтверждение обратно производителю после синхронной репликации сообщений другим брокерам согласно настройке, запрашиваемой у производителя.Вы можете использовать этот параметр, чтобы настроить семантику доставки сообщений.В этом случае, как только сообщения будут реплицированы в назначенные синхронные реплики, брокер отправит подтверждение производителю со словами: «Я получил ваши сообщения».
Теперь по вашим вопросам, т. Е. Еслиесть какое-то значение вызова сброса с параметром acks и того, будет ли производитель ждать запуска сброса перед отправкой в брокер.
Что ж, асинхронный характер производителя гарантирует, что производительне ждет.Однако, если вы вызываете flush()
явно или если он вызывается сам по себе, любые дальнейшие отправки будут блокироваться, пока производитель не получит подтверждение от брокера.Таким образом, отношения между этими двумя очень тонкие.
Надеюсь, это поможет!