O Zookeeper é obrigatório para Kafka?

134

No Kafka, eu gostaria de usar apenas um único broker, tópico único e uma única partição com um produtor e vários consumidores (cada consumidor obtendo sua própria cópia dos dados do broker). Diante disso, não quero a sobrecarga de usar o Zookeeper; Não posso apenas usar apenas o corretor? Por que um tratador deve?

Paaji
fonte
12
Um dos maiores objetivos de design do Kafka são as implantações de cluster. Esse é o problema que eles estão resolvendo e seria tolo criar uma versão sem zk para um servidor independente. Eu tenho a sensação de que Kafka não é a ferramenta para seu trabalho, mas que seria melhor de usar apenas um arquivo de baunilha ..
RickyA
5
Eu realmente adoraria saber o que você finalizou? Como você não escolheu nenhuma das respostas, presumo que você tenha sua própria solução para isso. Obrigado !
precisa saber é o seguinte
Jocko é uma implementação golang de Kafka sem tratador dependência & binário único instalar
Arun Gopalpuri
1
O Zookeeper foi removido, veja a resposta abaixo - stackoverflow.com/a/57328140/1699956
Mangat Rai Modi
1
apenas para adicionar, se você ler o que o tratador faz, você terá a idéiaZookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
#

Respostas:

128

Sim, o Zookeeper é necessário para executar o Kafka. Na documentação de introdução do Kafka:

Etapa 2: Iniciar o servidor

O Kafka usa o zookeeper, então você precisa primeiro iniciar um servidor do zookeeper se ainda não o tiver. Você pode usar o script de conveniência fornecido com o kafka para obter uma instância rápida e suja do zookeeper de nó único.

Quanto ao motivo, as pessoas descobriram há muito tempo que é necessário coordenar tarefas, gerenciamento de estado, configuração etc. em um sistema distribuído. Alguns projetos criaram seus próprios mecanismos (pense no servidor de configuração em um cluster fragmentado do MongoDB ou em um nó Mestre em um cluster Elasticsearch). Outros optaram por tirar proveito do Zookeeper como um sistema de coordenação de processos distribuídos de uso geral. Portanto, Kafka, Storm, HBase, SolrCloud, para citar apenas alguns, usam o Zookeeper para ajudar a gerenciar e coordenar.

O Kafka é um sistema distribuído e foi desenvolvido para usar o Zookeeper. O fato de você não estar usando nenhum dos recursos distribuídos do Kafka não altera a forma como ele foi construído. De qualquer forma, não deve haver muita sobrecarga no uso do Zookeeper. Uma questão maior é por que você usaria esse padrão de design específico - uma implementação de um único broker do Kafka perde todos os recursos de confiabilidade de um cluster com vários broker, além de sua capacidade de escalabilidade.

John Petrone
fonte
9
De fato, o kafka foi projetado de maneira que, mesmo que você vá com um único broker, ele ainda esteja no modo distribuído, mas com o fator de replicação 1 - não haverá mecanismos de atalho ou modo especial (e isso é bom, na verdade).
Om-nom-nom
2
O Kafka 0.8.1 requer zk. E me pergunto: se não existe uma camada abstrata no Kafka para trabalhar com um sistema de coordenação, como outro sistema de coordenação pode ser ativado para o Kafka.
stanleyxu2005
Atualização importante stackoverflow.com/a/57328140/3438570
theodosis
64

Conforme explicado por outros, o Kafka (mesmo na versão mais recente) não funcionará sem o Zookeeper.

Kafka usa o Zookeeper para o seguinte:

Elegendo um controlador . O controlador é um dos intermediários e é responsável por manter o relacionamento líder / seguidor para todas as partições. Quando um nó é desligado, é o controlador que instrui outras réplicas a se tornarem líderes de partição para substituir os líderes de partição no nó que está desaparecendo. O Zookeeper é usado para eleger um controlador, verifique se existe apenas um e escolha um novo para ele, se ele travar.

Associação ao cluster - quais corretores estão ativos e fazem parte do cluster? isso também é gerenciado através do ZooKeeper.

Configuração de tópico - quais tópicos existem, quantas partições cada um possui, onde estão as réplicas, quem é o líder preferencial, quais substituições de configuração são definidas para cada tópico

(0.9.0) - Cotas - quantos dados cada cliente tem permissão para ler e gravar

(0.9.0) - ACLs - quem tem permissão para ler e gravar em qual tópico (consumidor antigo de alto nível) - Quais grupos de consumidores existem, quem são seus membros e qual é o último deslocamento que cada grupo obteve de cada partição.

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

Em relação ao seu cenário, apenas uma instância do broker e um produtor com vários consumidores, você pode usar o empurrador para criar um canal e enviar evento para esse canal no qual o consumidor pode se inscrever e entregar esses eventos. https://pusher.com/

Kevin Li
fonte
3
Deseja editar "a versão mais recente" na versão real. Torna sua resposta melhor.
akauppi
Eu adiciono a referência, o último parágrafo é originalmente de mim.
Kevin Li
47

Atualização importante - agosto de 2019:

A dependência do ZooKeeper será removida do Apache Kafka . Veja a discussão de alto nível no KIP-500 : Substitua o ZooKeeper por um quorum de metadados auto-gerenciados .

Esses esforços levarão alguns lançamentos do Kafka e KIPs adicionais. Os controladores Kafka assumirão as tarefas atuais do ZooKeeper. Os controladores aproveitarão os benefícios do log de eventos, que é um conceito central do Kafka.

Alguns benefícios da nova arquitetura Kafka são uma arquitetura mais simples, facilidade de operações e melhor escalabilidade (por exemplo, permita "partições ilimitadas".

Kai Wähner
fonte
17

Atualizado em julho de 2020

Para a versão mais recente (2.5.0), o ZooKeeper ainda é necessário para executar o Kafka, mas em um futuro próximo o ZooKeeper será substituído por um Quorum de metadados auto-gerenciados .

Veja detalhes no KIP-500 aceito .

Iskuskov Alexander
fonte
11

O Kafka foi desenvolvido para usar o Zookeeper. Não há como escapar disso.

O Kafka é um sistema distribuído e usa o Zookeeper para rastrear o status dos nós do cluster kafka. Ele também mantém o controle de tópicos, partições etc. do Kafka

Olhando para a sua pergunta, parece que você não precisa do Kafka. Você pode usar qualquer aplicativo que suporte pub-sub, como Redis , Rabbit MQ ou soluções hospedadas, como Pub-nub .

Roteiro Santosh
fonte
9

O IMHO Zookeeper não é uma sobrecarga, mas facilita muito a sua vida.

É basicamente usado para manter a coordenação entre nós diferentes em um cluster. Uma das coisas mais importantes para o Kafka é que ele usa o tratador para confirmar periodicamente compensações, para que, em caso de falha do nó, possa retomar a partir da compensação confirmada anteriormente (imagine-se cuidando de tudo isso sozinho).

O Zookeeper também desempenha um papel vital para servir a muitos outros propósitos, como detecção de líder, gerenciamento de configuração, sincronização, detecção de quando um novo nó entra ou sai do cluster, etc.

Os lançamentos futuros do Kafka estão planejando remover a dependência do tratador, mas a partir de agora é parte integrante.

Aqui estão algumas linhas extraídas da página de perguntas frequentes:

Quando o quorum do Zookeeper cai, os corretores podem resultar em um estado ruim e normalmente não podem atender às solicitações dos clientes, etc. Embora quando o quorum do Zookeeper se recupere, os corretores Kafka devem poder retornar ao estado normal automaticamente, ainda existem alguns casos de esquina eles não podem e é necessário um processo de recuperação e recuperação para que ele volte ao normal. Portanto, é recomendável monitorar de perto o cluster do zookeeper e provisioná-lo para que ele tenha desempenho.

Para mais detalhes confira aqui

user2720864
fonte
13
Zookeeper é uma grande dor de cabeça. No HBase. Em Kafka. Na Tempestade. Há erros de longa data que eu conheço no Kafka / ZK que fizeram com que minha equipe o abandonasse em favor do RabbitMQ. A instalação do HBase envolve tempo para lidar com problemas de ZK. No entanto, sua resposta relacionada ao OP está correta: ZK é necessário.
Javadba
2
É verdade que existem problemas de compatibilidade de bugs e versões (pelo menos com Kafka e ZK), mas a principal intenção do zookeeper é gerenciar as tarefas complexas necessárias para qualquer sistema distribuído.Eu concordo que o gerenciamento e o ajuste do cluster zk exigem algum esforço e depende muito no zk pode não ser uma decisão sábia. Provavelmente é por isso que o kafka está tentando reduzir as dependências do zk nas versões posteriores. Em uma nota diferente Eu acredito RabitMQ e Kafka tem um muito diferentes filosofias de design e tem como objectivo resolver diferentes casos de uso, mas que eu acho que está além do escopo desta discussão :)
user2720864
Sim, o kafka é superior para cenários de alta carga. Decidimos fazer o RabbitMQ até / a menos que exigíssemos claramente essas vantagens. A programação no RabbitMQ também foi mais fácil: havia dependências difíceis da versão do scala para o Kafka.
javadba
4
IMHO zookeeper is not an overhead but makes your life a lot easier.-> não da visão de um sysop. Zk é um pedaço de Java antigo para trás. Por exemplo, ele possui um bug pendente há muito tempo, pois não adere ao ttl de uma entrada de DNS, para que não a resolva novamente. Fora da janela, vão as possibilidades de troca do servidor. Eu trocaria feliz por etcd.
RickyA
"Decidimos fazer o RabbitMQ até / a menos que claramente exijamos essas vantagens". Gostaria que minha equipe fosse esclarecida assim. IMHO, que claramente não têm alta carga suficiente para justificar Kafka, mas estamos usando Kafka qualquer maneira :(
Sr. Smith
4

O Zookeeper é um sistema centralizador e de gerenciamento para qualquer tipo de sistema distribuído. Sistema distribuído são diferentes módulos de software executando em diferentes nós / clusters (podem estar em locais geograficamente distantes), mas executando como um sistema. O Zookeeper facilita a comunicação entre os nós, compartilhando configurações entre os nós, mantém o controle de qual nó é líder, qual nó se junta / sai etc. O Zookeeper é quem mantém os sistemas distribuídos sãos e mantém a consistência. O Zookeeper é basicamente uma plataforma de orquestração.

Kafka é um sistema distribuído . E, portanto, precisa de algum tipo de orquestração para seus nós que possam estar geograficamente distantes (ou não).

Shree
fonte
3

Sim, o Zookeeper é obrigatório por design para o Kafka. Porque o Zookeeper tem a responsabilidade de gerenciar o cluster Kafka. Possui uma lista de todos os corretores Kafka. Ele notifica o Kafka, se algum intermediário ficar inoperante ou se a partição ficar inativa ou se um novo broker estiver ativo ou se a partição estiver ativa. Em resumo, o ZK mantém todos os corretores Kafka atualizados sobre o estado atual do cluster Kafka.

Então, todo cliente Kafka (produtor / consumidor) tudo o que precisa fazer é conectar-se a um único broker e esse broker possui todos os metadados atualizados pelo Zookeeper, para que o cliente não precise se preocupar com a dor de cabeça da descoberta do broker.

CPATIL9767
fonte
3

Além da transferência usual de mensagens de carga útil, existem muitas outras comunicações que acontecem no kafka, como

  • Eventos relacionados aos intermediários que solicitam a associação do cluster.
  • Eventos relacionados à corretores disponíveis.
  • Obtendo as configurações de inicialização.
  • Eventos relacionados a atualizações de controladores e líderes.
  • Atualizações de status da Ajuda, como atualizações de pulsação.

O Zookeeper em si é um sistema distribuído que consiste em vários nós em um conjunto. O Zookeeper é um serviço centralizado para manter esses metadados.

Amulya Holla
fonte
1

Este artigo explica o papel do Zookeeper em Kafka. Explica como o kafka é apátrida e como o tratador desempenha um papel importante na natureza distribuída do kafka (e em muitos outros sistemas distribuídos).

J. P
fonte
1

A solicitação para executar o Kafka sem o Zookeeper parece ser bastante comum. A biblioteca Charlatan trata disso.

De acordo com a descrição, Charlatan é mais ou menos uma farsa para o Zookeeper, fornecendo os serviços do Zookeeper com o backup de outras ferramentas ou de um banco de dados.

Encontrei essa biblioteca ao lidar com o principal produto dos autores da biblioteca de Charlatan; aí funciona bem…

tquadrat
fonte
0

primeiramente

O Apache ZooKeeper é um armazenamento distribuído usado para fornecer serviços de configuração e sincronização de uma maneira altamente disponível. Nas versões mais recentes do Kafka, foi feito um trabalho para que os clientes clientes não armazenassem informações sobre até que ponto haviam consumido mensagens (chamadas de compensações) no ZooKeeper. .This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.Enquanto o Kafka fornece tolerância a falhas e resiliência , é necessário algo para fornecer o coordenação necessária e o ZooKeeper permite essa parte do sistema geral.

Em segundo lugar

Concordar sobre quem é o líder de uma partição é um exemplo da aplicação prática do ZooKeeper no ecossistema Kafka.

Zookeeper would work if there was even a single broker. 

Estes são do livro Kafka In Action . A imagem é deste curso

fgul
fonte