Usando o Apache Kafka

O Apache Kafka é uma plataforma de mensagens de publicação-assinatura distribuída de código aberto criada especificamente para lidar com dados de streaming em tempo real para streaming distribuído, pipelining e reprodução de feeds de dados para operações rápidas e escaláveis. O Kafka é uma solução baseada em corretores que opera mantendo fluxos de dados como registros dentro de um cluster de servidores.

Nos clusters do Big Data Service, o Kafka pode ser usado das seguintes maneiras.

  1. Crie um cluster de perfil do Kafka:
    1. Criar um cluster.
    2. No campo Perfil do cluster, selecione Kafka.
  2. Crie um cluster de perfil Hadoop_Extended e adicione o Kafka ao cluster:
    1. Criar um cluster.
    2. No campo Perfil do cluster, selecione Hadoop_Extended.
    3. Adicione o Kafka ao cluster.

Melhores Práticas do Apache Kafka

Requisitos de Hardware

O Apache Kafka, por seu funcionamento regular, requer uma pequena quantidade de recursos, especialmente com algum ajuste de configuração. Por padrão, o Kafka pode ser executado em 1 núcleo e 1 GB de memória com armazenamento dimensionado com base nos requisitos para retenção de dados.

A CPU raramente é um gargalo porque o Kafka é pesado para E/S. No entanto, uma CPU de tamanho moderado com threads suficientes é importante para lidar com conexões simultâneas e tarefas em segundo plano.

  • Nó Broker do Kafka: Oito núcleos, de 64 GB a 128 GB de RAM, dois ou mais discos de 2 TB (padrão 2.8 ou superior, de preferência DenseIO ou equivalente)
  • Um mínimo de três nós de broker do Kafka
  • Perfil de hardware: Mais RAM e discos de alta velocidade são melhores
  • Instale brokers Kafka nos nós de trabalho, pois eles podem crescer horizontalmente em tamanho

Topologia de Cluster do Kafka Recomendada

  1. Remover gerente de nó do nó de trabalho
  2. Como os brokers do Kafka precisam de pelo menos três nós para replicação/HA, talvez você considere provisionar nós de trabalho adicionais para o Kafka.
  3. Provisione nós de trabalho HDFS adicionais e desative o nó de dados e o gerenciador de nós.
    Observação

    Os nós de trabalho atuais são modelados após os nós de trabalho do HDFS, que estão sendo redefinidos para os nós de broker do Kafka. Portanto, se os nós de broker do Kafka forem executados junto com os nós de dados do HDFS, o HDFS perderá o armazenamento efetivo.

Alguns parâmetros comuns a serem ajustados durante a configuração do Kafka são os seguintes:

Recursos para ajustar Parâmetros a Serem Ajustados
Retenção de Mensagem Tamanho do disco
Throughput do Cliente (Produtor e Consumidor) Capacidade de rede
Throughput do produtor E/S de Disco
Throughput do consumidor Memória

Esses parâmetros variam de caso para caso e precisam ser definidos com cuidado para obter um melhor desempenho. Nenhuma configuração única adequada a todos os casos de uso.

ZooKeeper

ZooKeeper é um componente importante de um cluster do Kafka que atua como um serviço de coordenação distribuído. ZooKeeper é responsável por monitorar e preservar os metadados do cluster, coordenar as operações de muitos nós e garantir a estabilidade e a consistência gerais do cluster Kafka.

Os clusters HA do Big Data Service incluem três hosts do Zookeeper. No entanto, para casos de uso de produção maiores, recomendamos dimensionar horizontalmente os hosts do Zookeeper, pois ele é compartilhado entre outros serviços com o cluster do Big Data Service.

Considerações sobre Desempenho

O Kafka é otimizado pronto para uso. No entanto, é necessário algum ajuste para melhorar o desempenho do cluster. Considere duas métricas principais:

  • Throughput: O número de mensagens que chegam em um determinado período de tempo.
  • Latência: o tempo necessário para processar cada mensagem.

Ajustando Corretores

Você controla o número de partições em um tópico. Aumentar o número de partições e o número de corretores em um cluster leva a um maior paralelismo do consumo de mensagens, o que, por sua vez, melhora o throughput de um cluster Kafka. No entanto, o tempo necessário para replicar dados em conjuntos de réplicas também aumenta.

Produtores de Ajuste

Você pode executar um produtor em dois modos diferentes: síncrono e assíncrono. No modo síncrono, assim que uma mensagem é publicada, o produtor envia uma solicitação ao broker. Portanto, se voce esta produzindo 100 mensagens por segundo, o produtor envia 100 pedidos por segundo para o corretor. Isso diminui o throughput e atua como uma operação de bloqueio. Então, ao publicar um grande número de mensagens, é melhor executar produtores no modo assíncrono.

No modo assíncrono, você deve ajustar dois parâmetros para obter o melhor desempenho: batch.size e linger.ms (tempo de lançamento). O tamanho do lote é o tamanho dos dados a serem enviados em um lote, medido em bytes. Por exemplo, se você definir o tamanho do batch como 100, o produtor aguardará até que as mensagens adicionem até 100 bytes antes de fazer uma chamada ao broker. Se a produção de mensagens for baixa e você definir um tamanho de lote alto, o produtor aguardará muito tempo antes de eventualmente produzir mensagens. Isso reduz o throughput e aumenta a latência de entrega de mensagens. Portanto, dependendo do número de mensagens sendo produzidas, esse valor deve ser otimizado. O tamanho do batch padrão é 16.384.

O tempo de inatividade é outra métrica baseada em quando um produtor decide enviar uma solicitação a um corretor. Usando o exemplo anterior, se o tamanho do batch for definido como 100 bytes e você estiver produzindo apenas 50 bytes por segundo, o produtor deverá aguardar dois segundos antes de publicar essas mensagens. Para evitar esse atraso, você pode ajustar o tempo de permanência (medido em milissegundos) para garantir que o produtor não espere muito tempo antes de enviar mensagens. Definir o tempo de permanência como 500 ms neste exemplo faz com que o produtor espere meio segundo no máximo.

A compactação também pode melhorar a latência. Por padrão, as mensagens do Kafka não são compactadas, mas você pode configurar produtores para compactá-las. Corretores e consumidores têm a sobrecarga adicional de descompactar mensagens, mas a latência geral deve ser reduzida à medida que o tamanho físico dos dados transmitidos pela rede é menor.

Ajustando Consumidores

Os consumidores recebem mensagens em lotes, semelhante à forma como os produtores publicam em lotes. Se você puxar muitas mensagens e levar muito tempo para processar cada uma, o throughput sofrerá. Da mesma forma, se você pesquisar no broker uma única mensagem toda vez, o número de solicitações ao broker poderá diminuir o throughput.

Ter mais partições e consumidores dentro de um grupo de consumidores pode ajudar a melhorar o throughput. Mas lembre-se de que, à medida que o número de consumidores aumenta, o número de solicitações de commit de compensação para o corretor também aumenta. Como o commit de um deslocamento está enviando uma mensagem Kafka para um tópico interno, isso aumenta indiretamente a carga no broker. Portanto, ter um número ideal de consumidores é crucial.

MirrorMaker Otimização de Desempenho

O Kafka MirrorMaker é uma ferramenta usada para espelhar mensagens do Kafka de um data center ou cluster para outro. Como isso está produzindo internamente mensagens para o Kafka, a maioria das técnicas de otimização já discutidas também é válida aqui. Como isso também envolve a transmissão de mensagens em longas distâncias, há mais alguns parâmetros de configuração que podem ser ajustados para melhor desempenho.

Observação

Ao ajustar, certifique-se de basear suas ações nas necessidades do seu caso de uso de negócios.
  • MirrorMaker2 Localização: MirrorMaker pode ser instalado na origem ou no destino. No entanto, recomendamos a instalação no destino porque a produção de mensagens a longas distâncias aumenta as chances de perda de dados durante a transmissão.
  • Compactação: Por padrão, a compactação de mensagens nos produtores do Kafka é definida como nenhuma. No entanto, para compactar mensagens que saem da origem para o destino, altere a compactação para gzip. Isso ajuda com tamanhos de lote maiores.
  • Tamanho do Batch: Aumentar o tamanho do batch de mensagens aumenta o throughput. Combinar isso com a compactação garante que um grande número de mensagens seja transmitido rapidamente. Se o tamanho do lote de destino estiver demorando mais do que o tempo de permanência configurado, os lotes que estão sendo enviados não serão completamente preenchidos. Isso diminui a eficiência da compressão e desperdiça a largura de banda. Portanto, o ajuste do tamanho do lote, juntamente com a ativação da compactação e do ajuste do tempo de permanência, é importante.
  • Tempo de permanência: Aumentar o tempo de permanência para permitir que os lotes sejam preenchidos completamente é importante. Isso pode aumentar a latência, mas o throughput geral melhora. Você deve considerar a importância da latência para o seu caso de uso comercial.
  • Aumentar o Paralelismo: Para aumentar ainda mais o throughput, você pode implantar várias instâncias de MirrorMaker no mesmo grupo de consumidores. Isso facilita que vários consumidores MirrorMaker recebam da mesma origem e produzam para o destino em paralelo.

Configurações do Servidor de Produção no Ajuste Kafka

Vários outros parâmetros de configuração podem ser ajustados para melhorar o desempenho do Kafka em um ambiente de produção. Os seguintes parâmetros melhoram o desempenho de replicação de mensagens dentro de partições:

  • num.replica.fetchers: Especifica o número de threads usados para replicar mensagens do líder para os seguidores. Um número maior de fetchers de réplica melhora o paralelismo na replicação.
  • replica.fetch.max.bytes: Indica o número de bytes de dados a serem extraídos do líder. Um número maior indica um pedaço maior de dados sendo extraídos, melhorando o throughput da replicação.
  • num.partitions: Especifica o número máximo de consumidores que um tópico pode ter em um grupo de usuários específico, que é igual ao número de partições disponíveis nesse tópico. Aumentar as partições aumenta o paralelismo e, portanto, a taxa de transferência. No entanto, muitas partições também consomem mais recursos, portanto, você também deve expandir os recursos.

Balanceando Clusters do Apache Kafka

Sempre que um novo broker é adicionado a um cluster Kafka, as partições existentes não são distribuídas por meio do novo broker. Isso significa que o novo corretor não está ocupado e, se um ou mais corretores antigos caírem, a replicação e os líderes em potencial serão reduzidos. Isso é conhecido como líder skew. Você pode evitar isso certificando-se de que qualquer corretor recém-adicionado receba uma parte das partições. O rebalanceamento do cluster é importante. Da mesma forma, se um corretor tiver mais do que o número médio de partições para um tópico, conhecido como desvio de corretor, isso pode levar a problemas de desempenho.

Otimizando o Desempenho do Kafka

Ao executar o Kafka como um cluster, há várias maneiras de otimizar seu desempenho. Você pode ajustar vários parâmetros de configuração para encontrar um equilíbrio entre throughput e latência. A engenharia está envolvida para calcular os melhores valores para alguns desses parâmetros, como tempo de permanência, tamanho do lote, número de partições e assim por diante. Dependendo do caso de uso, você pode decidir que o throughput é mais importante do que a latência, que a latência é mais importante do que o throughput ou que um equilíbrio entre os dois é melhor.