Пропускная способность производителя с переменным аком = 0,1, -1 - PullRequest
0 голосов
/ 19 ноября 2018

Я проводил некоторые тесты производительности с кластером kafka для моего проекта. У меня есть вопрос, касающийся отправки вызова и свойства «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 на все, пропускная способность производителя уменьшается. Чего я не могу понять, так это того, что если отправитель вызова отправителя является порождающим и забывающим по своей природе (см. Выше) и производитель не ожидает каких-либо подтверждений, то почему пропускная способность производителя падает при переходе к более сильным гарантиям подтверждения?

Буду очень признателен за понимание того, как Acks и производитель отправляют вызовы внутри компании в Kakfa.

P.S. Я спрашивал об этом в списке рассылки пользователей kafka, но не получил ответа, поэтому спрашивал об этом на SO.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Тот факт, что у вас нет обратного вызова в методе send, не означает, что он запущен и забыт на базовом уровне. Вы настроили продюсера с 3-мя различными уровнями подтверждения, которые определяют статус «запустить и забыть» или нет. Если acks = 0, это означает, что производитель отправляет сообщение, но не ожидает подтверждения от брокера; это настоящий «огонь и забудь». Итак, как вы можете видеть, это обеспечивает более высокую пропускную способность. С acks = 1, производитель ждет подтверждения. Это подтверждение отправляется посредником (к которому подключен производитель и на котором размещена реплика лидера). Это не "огонь и забыть", конечно. С acks = -1, производитель ждет подтверждения. Это подтверждение отправляется посредником, как указано выше, но только после того, как сообщения реплицированы всем подписчикам реплики на других посредниках. Конечно, в этом случае пропускная способность снижается, если вы увеличиваете коэффициент репликации, потому что сообщение должно быть скопировано большим количеством посредников (min.insync.replicas), прежде чем посредник-лидер вернет обратно подтверждение производителю. Обратите внимание, что при коэффициенте репликации = 1, ack = 1 и ack = -1 имеют одинаковую пропускную способность, поскольку существует только одна реплика (лидер), поэтому нет необходимости копировать подписчикам.

0 голосов
/ 19 ноября 2018

Это что-то о том, как kafka обрабатывает запрос продукта.Во-первых, KafkaProducer.send по умолчанию является асинхронным.KafkaProducer взял на себя тяжелую работу по пакетной обработке вашего запроса продукции и отправке брокеру.Брокер будет получать ответ продукта, который, в свою очередь, должен ждать min.insync.replicas от удаленных подписчиков.Вот причина.

...