Почему Kafka Producer ack=all такой медленный при отправке синхронных сообщений

У меня есть приложение Kafka version : 0.9.0.1, которое отправляет сообщения синхронно с ack=all.

С этой настройкой я получаю сообщение в секунду прибл. 75.

Когда я перехожу на ack=1, я увеличиваю пропускную способность до 453 сообщений в секунду.

Почему ack=all работает в 6 раз медленнее?

Мои целевые темы Kafka имеют один раздел и репликацию, установленную на 3.

Можно ли как-нибудь увеличить производительность ack=all?


person Hector    schedule 31.08.2016    source источник


Ответы (2)


Можно ли как-нибудь увеличить производительность ack=all?

Используйте асинхронную отправку с включенным повтором сообщения. сообщения будут отправляться в пакетном режиме, вы получите лучшую пропускную способность.

асинхронная отправка не означает потерю данных, повторная попытка сообщения и обратный вызов отправки сообщения могут быть использованы для гарантии успешной отправки, даже когда (replication factor - min.insync.replicas) брокеры не работают.

person Shawn Guo    schedule 31.08.2016
comment
Я не могу отправлять сообщения повторно, так как это может привести к тому, что сообщения будут отображаться не по порядку. Я должен использовать синхронную отправку - person Hector; 31.08.2016

Нет никакого способа, потому что настройка ack предназначена для компромисса между производительностью и изменением потерянных данных. Таким образом, вы не можете выбрать оба.

person hainguyen    schedule 31.08.2016
comment
Я это понимаю, но почему получение экка с трех серверов в 6 раз медленнее, чем с одного? - person Hector; 31.08.2016
comment
При отправке сообщения: Клиент --› Лидер --› Реплика. Затем лидер ждет подтверждения от всех реплик лидеру, затем лидер отправляет подтверждение клиенту: Реплика --> Лидер --> Клиент. Думаю с replica=3 должно тормозить раза в 2-4, но вообще время сети непредсказуемо. - person hainguyen; 31.08.2016
comment
Я ожидаю, что ack=all будет медленнее, чем ack=1, однако мы видим в 6-8 раз медленнее (на самом деле ближе к 8-кратному замедлению). Где я ожидал бы в 3-4 раза медленнее максимум. Как узнать, как Kafka реализует ack=all? - person Hector; 31.08.2016