В Kafka я хотел бы использовать только одного брокера, одну тему и один раздел с одним производителем и несколькими потребителями (каждый потребитель получает свою собственную копию данных от брокера). Учитывая это, я не хочу накладных расходов на использование Zookeeper; Могу я не использовать только брокера? Почему Zookeeper должен?
136
Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
Ответы:
Да, для запуска Kafka требуется Zookeeper. Из документации по началу работы с Kafka:
Что касается того, почему, то люди давно обнаружили, что вам нужен какой-то способ координации задач, управления состоянием, конфигурации и т.д. в распределенной системе. Некоторые проекты построили свои собственные механизмы (подумайте о сервере конфигурации в сегментированном кластере MongoDB или главном узле в кластере Elasticsearch). Другие решили использовать Zookeeper в качестве распределенной системы координации процессов общего назначения. Итак, Kafka, Storm, HBase, SolrCloud и многие другие используют Zookeeper для управления и координации.
Kafka - это распределенная система, построенная для использования Zookeeper. Тот факт, что вы не используете какие-либо распределенные функции Kafka, не влияет на то, как он был построен. В любом случае использование Zookeeper не должно вызывать больших накладных расходов. Более серьезный вопрос заключается в том, почему вы должны использовать этот конкретный шаблон проектирования - реализация Kafka с одним брокером упускает все функции надежности кластера с несколькими брокерами, а также его способность масштабироваться.
источник
Как объясняли другие, 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/
источник
Важное обновление - август 2019 г .:
Зависимость ZooKeeper будет удалена из Apache Kafka . См. Обсуждение высокого уровня в KIP-500 : Замена ZooKeeper на самоуправляемый кворум метаданных .
Эти усилия потребуют нескольких выпусков Kafka и дополнительных KIP. Контроллеры Kafka возьмут на себя задачи текущих задач ZooKeeper. Контроллеры будут использовать преимущества журнала событий, который является основной концепцией Kafka.
Некоторые преимущества новой архитектуры Kafka - это более простая архитектура, простота операций и лучшая масштабируемость (например, возможность «неограниченного количества разделов».
источник
Обновлено в августе 2020 г.
В последней версии (2.6.0) ZooKeeper по-прежнему требуется для работы Kafka, но в ближайшем будущем ZooKeeper будет заменен на самоуправляемый кворум метаданных. .
Подробности смотрите в принятом КИП-500 .
источник
Kafka построен для использования Zookeeper. От этого никуда не деться.
Kafka - это распределенная система, использующая Zookeeper для отслеживания состояния узлов кластера kafka. Он также отслеживает темы Kafka, разделы и т. Д.
Глядя на ваш вопрос, кажется, Кафка вам не нужен. Вы можете использовать любое приложение, которое поддерживает pub-sub, такое как Redis , Rabbit MQ или размещенные решения, такие как Pub-nub .
источник
IMHO Zookeeper - это не накладные расходы, но значительно облегчает вашу жизнь.
Он в основном используется для поддержания координации между различными узлами в кластере. Одна из самых важных вещей для Kafka заключается в том, что он использует zookeeper для периодической фиксации смещений, чтобы в случае сбоя узла он мог возобновить работу с ранее зафиксированного смещения (представьте, что вы позаботитесь обо всем этом самостоятельно).
Zookeeper также играет жизненно важную роль для обслуживания многих других целей, таких как обнаружение лидера, управление конфигурацией, синхронизация, обнаружение, когда новый узел присоединяется к кластеру или покидает его и т. Д.
В будущих выпусках Kafka планируется удалить зависимость zookeeper, но на данный момент она является ее неотъемлемой частью.
Вот несколько строк, взятых из их страницы часто задаваемых вопросов:
Для получения дополнительной информации проверьте здесь
источник
IMHO zookeeper is not an overhead but makes your life a lot easier.
-> не с точки зрения сисопа. Zk - это кусок отсталого старого java-мусора. Например, у него есть давно неурегулированная ошибка, заключающаяся в том, что он не соответствует ttl записи DNS, поэтому он не будет повторно разрешать запись. Из окна исчезают возможности подкачки вашего сервера. С удовольствием обменял бы на etcd.Zookeeper - это система централизации и управления для любых распределенных систем. Распределенная система - это разные программные модули, работающие на разных узлах / кластерах (могут быть в географически удаленных местах), но работающие как одна система. Zookeeper упрощает обмен данными между узлами, разделяя конфигурации между узлами, он отслеживает, какой узел является лидером, какой узел присоединяется / покидает и т. Д. Zookeeper - это тот, кто поддерживает распределенные системы в здравом уме и поддерживает согласованность. Zookeeper - это, по сути, платформа для оркестровки.
Кафка - это распределенная система. И, следовательно, ему нужна какая-то оркестровка для своих узлов, которые могут быть географически удаленными (или нет).
источник
Да, Zookeeper изначально необходим для Kafka. Потому что Zookeeper отвечает за управление кластером Kafka. В нем есть список всех брокеров Kafka. Он уведомляет Kafka, если какой-либо брокер выходит из строя, или раздел выходит из строя, или новый брокер работает, или раздел работает. Короче говоря, ZK держит каждого брокера Kafka в курсе текущего состояния кластера Kafka.
Затем каждому клиенту Kafka (производитель / потребитель) все, что нужно сделать, это подключиться к любому отдельному брокеру, и у этого брокера все метаданные обновлены Zookeeper, поэтому клиенту не нужно беспокоиться о головной боли обнаружения брокера.
источник
Помимо обычной передачи сообщений полезной нагрузки, в kafka происходит много других коммуникаций, например
Сам Zookeeper - это распределенная система, состоящая из нескольких узлов в ансамбле. Zookeeper - это централизованный сервис для поддержки таких метаданных.
источник
В этой статье объясняется роль Zookeeper в Kafka. В нем объясняется, как кафка не имеет состояния и как zookeper играет важную роль в распределенной природе кафки (и многих других распределенных систем).
источник
Запрос на запуск Kafka без Zookeeper кажется довольно распространенным. Библиотека Charlatan занимается этим.
Согласно описанию, Charlatan в большей или меньшей степени является имитацией Zookeeper, предоставляя услуги Zookeeper, поддерживаемые другими инструментами или базой данных.
Я столкнулся с этой библиотекой, когда имел дело с основным продуктом авторов для библиотеки Charlatan; там нормально работает…
источник
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.
Это из книги « Кафка в действии» . Изображение из этого курса
источник