Я проводил несколько тестов производительности с кластером kafka для своего проекта. У меня вопрос относительно функции send call и свойства производителя «acks». Я видел ниже номера с приведенным ниже вызовом отправки вызова. Это простой вызов "выстрелил и забыл".
producer.send(record); // fire and forget call
В теме 5 разделов, и я вижу ниже результаты с разными значениями подтверждений и коэффициентом репликации. Кластер kafka имеет 5 узлов, работающих со значениями по умолчанию и использующими локальный диск.
acks Replication factor=1 Replication factor=3
0 1330k msgs/sec 1260k msgs/sec
1 1220k msgs/sec 1200k msgs/sec
-1(all) 1220k msgs/sec 325k msgs/sec
Как вы можете видеть, когда значение acks изменяется с 0 на all, пропускная способность производителя уменьшается. Чего я не могу понять, так это того, что если вызов отправки продюсера по своей природе запускается и забывается (см. Выше), а производитель не ждет каких-либо подтверждений, то почему пропускная способность производителя падает, когда мы переходим к более строгим гарантиям подтверждения?
Мы будем очень благодарны за любое понимание того, как acks и отправка вызова производителя работают внутри Kakfa.
P.S. Я спросил об этом в списке рассылки пользователей kafka, но не получил ответа, поэтому спросил об этом в SO.