Является ли Zookeeper обязательным для Кафки?

В Kafka я хотел бы использовать только одного брокера, одну тему и один раздел, имеющий одного производителя и нескольких потребителей (каждый потребитель получает свою собственную копию данных от брокера). Учитывая это, я не хочу накладных расходов на использование Zookeeper; Могу ли я не просто использовать только брокера? Почему Zookeeper должен?

Ответ 1

Да, Zookeeper требуется для запуска Kafka. Из документации Kafka Getting Started:

Шаг 2. Запустите сервер

Kafka использует zookeeper, поэтому вам нужно сначала запустить zookeeper-сервер, если у вас его еще нет. Вы можете использовать удобство scriptупакованный с помощью kafka, чтобы получить быстрый и грязный однократный node zookeeper экземпляр.

Что касается того, почему люди давно обнаружили, что вам нужно иметь какой-то способ координации задач, управления состоянием, конфигурации и т.д. в распределенной системе. В некоторых проектах созданы свои собственные механизмы (подумайте о сервере конфигурации в кластерном блоке MongoDB или мастер node в кластере Elasticsearch). Другие решили использовать Zookeeper в качестве системы координации распределенных процессов общего назначения. Итак, Kafka, Storm, HBase, SolrCloud, чтобы просто назвать несколько, используют Zookeeper для управления и координации.

Kafka - это распределенная система и предназначена для использования Zookeeper. Тот факт, что вы не используете какие-либо распределенные функции Kafka, не меняет способ его создания. В любом случае от использования Zookeeper не должно быть слишком много накладных расходов. Более важный вопрос заключается в том, почему вы должны использовать этот конкретный шаблон проектирования - одна реализация брокера Kafka пропускает все функции надежности кластера с несколькими брокерами, а также способность масштабировать.

Ответ 2

Как объяснили другие, Kafka (даже в самой последней версии) не будет работать без Zookeeper.

Kafka использует Zookeeper для следующего:

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

Членство в кластерах - какие брокеры являются живыми и частью кластера? это также управляется через ZooKeeper.

Конфигурация темы - какие темы существуют, сколько разделов у каждого есть, где находятся реплики, кто является предпочтительным лидером, какие переопределения конфигурации установлены для каждой темы

(0.9.0) - Квоты - сколько данных каждому клиенту разрешено читать и писать

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

[from https://www.quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafka/answer/Gwen-Shapira ]

Что касается вашего сценария, только один экземпляр брокера и один продюсер с несколькими потребителями, вы можете использовать толкатель для создания канала и нажимать событие на тот канал, который потребитель может подписаться и передать эти события. https://pusher.com/

Ответ 3

Kafka построен для использования Zookeeper. От этого не избежать.

Kafka - это распределенная система и использует Zookeeper для отслеживания состояния узлов кластера kafka. Он также отслеживает темы, разделы и т.д.

Рассматривая свой вопрос, кажется, вам не нужна Кафка. Вы можете использовать любое приложение, поддерживающее pub-sub, такое как Redis, Rabbit MQ или размещенные решения, такие как Pub-nub.

Ответ 4

Важное обновление - август 2019 года:

Зависимость ZooKeeper будет удалена из Apache Kafka. См. обсуждение высокого уровня в KIP-500: замените ZooKeeper на Квадрат метаданных с самостоятельным управлением.

Эти усилия потребуют нескольких выпусков Kafka и дополнительных KIP. Контроллеры Kafka возьмут на себя задачи текущих задач ZooKeeper. Контроллеры будут использовать преимущества журнала событий, который является основной концепцией Kafka.

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

Ответ 5

IMHO Zookeeper не является накладными расходами, но делает вашу жизнь намного проще.

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

Zookeeper также играет жизненно важную роль для обслуживания многих других целей, таких как обнаружение лидеров, управление конфигурацией, синхронизация, обнаружение, когда новый узел соединяется или покидает кластер и т.д.

Будущие выпуски Kafka планируют удалить зависимость zookeeper, но на данный момент она является неотъемлемой частью этого.

Вот несколько строк, взятых на странице часто задаваемых вопросов:

После того, как кворум Zookeeper опущен, брокеры могут привести к плохому состоянию и обычно не могут обслуживать клиентские запросы и т.д. Хотя, когда кворум Zookeeper восстанавливается, брокеры Kafka должны иметь возможность автоматически вернуться в нормальное состояние, все еще есть несколько угловых случаев они не могут, и требуется жесткое убийство и восстановление, чтобы вернуть его к нормальной жизни. Поэтому рекомендуется внимательно следить за кластером zookeeper и обеспечивать его, чтобы он был выполнен.

Подробнее здесь.

Ответ 6

Jocko - это реализация golang Kafka без зависимости от zookeeper и single binary install

Ответ 7

Помимо обычной передачи сообщений полезной нагрузки, есть много других сообщений, которые происходят в kafka. например * События, связанные с брокерами, запрашивающими членство в кластере * События, связанные с доступностью брокеров * Получение настроек конфигурации загрузки. * События, связанные с обновлением контроллера и лидера. * Обновления статуса справки, такие как обновления Heartbeat.

Zookeeper - это распределенная система, состоящая из нескольких узлов в ансамбле. Zookeeper - это централизованное обслуживание для поддержки таких метаданных.

Ответ 8

Zookeeper - это система централизации и управления для любых распределенных систем. Распределенная система - это разные программные модули, работающие на разных узлах/кластерах (могут быть в географически удаленных местах), но работающие как одна система. Zookeeper облегчает связь между узлами, обменивается конфигурациями между узлами, отслеживает, какой узел является лидером, какой узел присоединяется/покидает и т.д. Zookeeper - это тот, кто поддерживает распределенные системы в здравом уме и поддерживает согласованность. Zookeeper в основном является платформой оркестровки.

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

Ответ 9

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

Тогда каждому клиенту Kafka (производителю/потребителю) все, что нужно сделать, это подключиться к какому-либо отдельному посреднику, и этот посредник обновил все метаданные Zookeeper, поэтому клиенту не нужно беспокоиться о головной боли при обнаружении посредника.