Необходим ли Zookeeper для Kafka?


136

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


12
Одна из важнейших целей разработки Kafka - кластерное развертывание. Это проблема, которую они решают, и было бы глупо делать версию без zk для автономного сервера. У меня такое чувство, что kafka - не инструмент для вашей работы, но вам лучше просто использовать ванильный файл ..
RickyA,

5
Мне бы очень хотелось узнать, что вы доработали? Поскольку вы не выбрали ни одного ответа, я предполагаю, что у вас было собственное решение для этого. Спасибо !
Картикеян

Jocko - это реализация Kafka на голанге без зависимости от zookeeper и единой бинарной установки
Арун Гопалпури,

1
Zookeeper был удален, см. Ответ ниже - stackoverflow.com/a/57328140/1699956
Mangat Rai Modi

1
просто чтобы добавить, если вы прочитаете, что делает zookeeper, вы поймете идею -Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
roottraveller

Ответы:


128

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

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

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

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

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


9
Фактически, kafka спроектирована таким образом, что даже при использовании одного брокера он по-прежнему является распределенным режимом, но с коэффициентом репликации 1 - не будет никаких механизмов быстрого доступа или специального режима (и это хорошо, на самом деле).
om-nom-nom

2
Kafka 0.8.1 требует zk. И мне интересно, если в Kafka нет абстрактного слоя для работы с системой координации, как можно включить другую систему координации в Kafka.
stanleyxu2005

Важное обновление stackoverflow.com/a/57328140/3438570
theodosis

64

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

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

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

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

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

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

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

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

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


3
Вы хотите отредактировать «самую последнюю версию» на актуальную. Делает ваш ответ возрастом лучше.
akauppi


Добавляю ссылку, последний абзац изначально от меня.
Кевин Ли

47

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

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

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

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


18

Обновлено в августе 2020 г.

В последней версии (2.6.0) ZooKeeper по-прежнему требуется для работы Kafka, но в ближайшем будущем ZooKeeper будет заменен на самоуправляемый кворум метаданных. .

Подробности смотрите в принятом КИП-500 .


11

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

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

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


9

IMHO Zookeeper - это не накладные расходы, но значительно облегчает вашу жизнь.

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

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

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

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

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

Для получения дополнительной информации проверьте здесь


13
Zookeeper - большая головная боль. В HBase. В Кафке. В шторме. Мне известны давние ошибки в Kafka / ZK, из-за которых моя команда отказалась от него в пользу RabbitMQ. Установка HBase требует времени, чтобы разобраться с проблемами ZK. Однако ваш ответ, связанный с OP, является правильным: требуется ZK.
javadba

2
Правда, есть проблемы с совместимостью ошибок и версий (по крайней мере, с Kafka и ZK), но основное предназначение zookeeper - управлять этими сложными задачами, необходимыми для любой распределенной системы. Я согласен с тем, что управление и настройка вашего кластера zk требует определенных усилий и сильно зависит на zk не может быть мудрым решением. Вероятно, поэтому kafka пытается уменьшить зависимости zk в более поздних версиях. С другой стороны, я считаю, что RabitMQ и Kafka имеют совершенно разные философии дизайна и стремятся решать разные варианты использования, но я думаю, что это выходит за рамки этого обсуждения :)
user2720864

Да, кафка лучше всего подходит для сценариев с высокой нагрузкой. Мы решили использовать RabbitMQ до тех пор, пока нам не потребуются эти преимущества. Программирование в RabbitMQ также было проще: для Kafka существовали сложные зависимости версий scala.
javadba

4
IMHO zookeeper is not an overhead but makes your life a lot easier.-> не с точки зрения сисопа. Zk - это кусок отсталого старого java-мусора. Например, у него есть давно неурегулированная ошибка, заключающаяся в том, что он не соответствует ttl записи DNS, поэтому он не будет повторно разрешать запись. Из окна исчезают возможности подкачки вашего сервера. С удовольствием обменял бы на etcd.
RickyA

«Мы решили делать RabbitMQ до тех пор, пока нам не потребуются эти преимущества». Желаю, чтобы моя команда была такой просвещенной. ИМХО, у нас явно недостаточно высокой нагрузки, чтобы оправдать Кафку, но мы все равно используем Кафку :(
Мистер Смит

4

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

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


3

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

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


3

Помимо обычной передачи сообщений полезной нагрузки, в kafka происходит много других коммуникаций, например

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

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


1

В этой статье объясняется роль Zookeeper в Kafka. В нем объясняется, как кафка не имеет состояния и как zookeper играет важную роль в распределенной природе кафки (и многих других распределенных систем).


1

Запрос на запуск Kafka без Zookeeper кажется довольно распространенным. Библиотека Charlatan занимается этим.

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

Я столкнулся с этой библиотекой, когда имел дело с основным продуктом авторов для библиотеки Charlatan; там нормально работает…


0

во-первых

Apache ZooKeeper - это распределенное хранилище, которое используется для предоставления услуг конфигурации и синхронизации с высокой доступностью. В более поздних версиях Kafka была проделана работа для того, чтобы клиенты-потребители не сохраняли информацию о том, как далеко он получил сообщения (называемые смещениями) в ZooKeeper. .This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.Хотя Kafka обеспечивает отказоустойчивость и отказоустойчивость , что-то необходимо для обеспечения необходима координация, и ZooKeeper включает эту часть всей системы.

во-вторых

Согласование того, кто является лидером раздела , является одним из примеров практического применения ZooKeeper в экосистеме Kafka.

Zookeeper would work if there was even a single broker. 

Это из книги « Кафка в действии» . Изображение из этого курса

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.