Почему Кафка основывается на подтягивании, а не на толчке?

Почему Кафка основывается на подтягивании, а не на толчке? Я согласен, что Кафка дает высокую пропускную способность, поскольку я испытал это, но я не вижу, как пропускная способность Кафки снизилась бы, если бы она была на основе толкания. Любые идеи о том, как push-based может снизить производительность?

Ответ 1

Масштабируемость была основным движущим фактором при разработке таких систем (тяга против толчка). Кафка очень масштабируема. Одним из ключевых преимуществ Kafka является то, что очень легко добавить большое количество потребителей без ущерба для производительности и без простоев.

Кафка может обрабатывать события со скоростью 100k+ в секунду от производителей. Поскольку потребители Kafka извлекают данные из этой темы, разные потребители могут потреблять сообщения с разной скоростью. Kafka также поддерживает различные модели потребления. Один пользователь может обрабатывать сообщения в режиме реального времени, а другой - обрабатывать сообщения в пакетном режиме.

Другой причиной может быть то, что Kafka был разработан не только для отдельных потребителей, таких как Hadoop. У разных потребителей могут быть разные потребности и возможности.

У систем на основе Pull есть некоторые недостатки, такие как потеря ресурсов из-за регулярного опроса. Kafka поддерживает режим ожидания "длинного опроса", пока не будут получены реальные данные, чтобы устранить этот недостаток.

Ответ 2

Обратитесь к документации Kafka, в которой подробно описано конкретное проектное решение: Push vs pull

Основные моменты, которые были в пользу тяги:

  1. Pull лучше справляется с разноплановыми потребителями (без брокера, определяющего скорость передачи данных для всех);
  2. Потребители могут более эффективно контролировать уровень своего индивидуального потребления;
  3. Более простая и оптимальная реализация пакетной обработки.

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