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?
134
Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
Respostas:
Sim, o Zookeeper é necessário para executar o Kafka. Na documentação de introdução do Kafka:
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.
fonte
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/
fonte
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".
fonte
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 .
fonte
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 .
fonte
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:
Para mais detalhes confira aqui
fonte
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.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).
fonte
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.
fonte
Além da transferência usual de mensagens de carga útil, existem muitas outras comunicações que acontecem no kafka, como
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.
fonte
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).
fonte
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…
fonte
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.Concordar sobre quem é o líder de uma partição é um exemplo da aplicação prática do ZooKeeper no ecossistema Kafka.
Estes são do livro Kafka In Action . A imagem é deste curso
fonte