Armazenamento Kafka (por que o Kafka usa o disco como meio de armazenamento?)

1. Visão geral da estrutura de armazenamento

  • Cada partição (pasta) é equivalente a um arquivo enorme que é distribuído uniformemente para vários arquivos de dados de segmento (segmento) de tamanho igual. No entanto, o número de mensagens em cada arquivo de segmento não é necessariamente igual.Este recurso facilita a exclusão em alta velocidade de arquivos de segmento antigos. (Por padrão, o tamanho de cada arquivo é 1G)
  • Cada partição só precisa oferecer suporte à leitura e gravação sequenciais. O ciclo de vida do arquivo de segmento é determinado pelos parâmetros de configuração do servidor.

1. Segmentar estrutura de armazenamento de arquivos em partição

Composição do arquivo de segmento: consiste em 2 partes. Eles são arquivo de índice e arquivo de dados, respectivamente.Estes dois arquivos correspondem um a um e aparecem em pares.Os sufixos ”.index”e sufixos “.log”representam respectivamente o segmentarquivo de índice e o arquivo de dados .

Regras de nomenclatura de arquivo de segmento: O primeiro segmento da partição global começa em 0, e o nome de cada arquivo de segmento pode ser o valor de deslocamento da última mensagem do arquivo de segmento anterior.

O valor máximo é de 64 bits. O comprimento de 19 dígitos é preenchido com zeros.

itcast@Server-node:/mnt/d/kafka_2.12-2.2.1$ ll /tmp/kafka/log/heima-0/ 
total 20480 
drwxr-xr-x 1 itcast sudo 		512 Aug 29 09:38 ./ 
drwxrwxrwx 1 dayuan dayuan 		512 Aug 29 09:41 ../ 
-rw-r--r-- 1 itcast sudo 10485760 Aug 29 09:38 00000000000000000000.index 
-rw-r--r-- 1 itcast sudo 			0 Aug 29 09:38 00000000000000000000.log 
-rw-r--r-- 1 itcast sudo 10485756 Aug 29 09:38 00000000000000000000.timeindex 
-rw-r--r-- 1 itcast sudo 			8 Aug 29 09:38 leader-epoch-checkpoint 
itcast@Server-node:/mnt/d/kafka_2.12-2.2.1$

Dois, índice de log

1. Segmentação de arquivos de dados

Um dos métodos de Kafka para resolver a eficiência da consulta é segmentar arquivos de dados. Por exemplo, existem 100 mensagens e seu deslocamento é de 0 a 99. Suponha que o arquivo de dados seja dividido em 5 segmentos, o primeiro segmento é 0-19, o segundo segmento é 20-39 e assim por diante, cada segmento é colocado em um arquivo de dados separado e o arquivo de dados é nomeado após o menor deslocamento no segmento. Desta forma, ao pesquisar por uma Mensagem com um deslocamento especificado, a pesquisa binária pode ser usada para localizar em qual segmento a Mensagem está.

2. Índice de compensação

A segmentação do arquivo de dados torna possível encontrar a Mensagem correspondente ao deslocamento em um arquivo de dados menor, mas isso ainda requer uma varredura sequencial para encontrar a Mensagem correspondente ao deslocamento. Para melhorar ainda mais a eficiência da pesquisa, Kafka cria um arquivo de índice para cada arquivo de dados segmentado.O nome do arquivo é o mesmo que o nome do arquivo de dados, mas a extensão do arquivo é .index.

Por exemplo: para encontrar a Mensagem com deslocamento absoluto de 7:

A primeira é usar a pesquisa binária para determinar em qual LogSegment ele está, que está naturalmente no primeiro segmento. Abra o arquivo de índice deste segmento e também use a pesquisa binária para encontrar o maior deslocamento entre as entradas de índice cujo deslocamento é menor ou igual ao deslocamento especificado. Naturalmente, o que procuramos é o índice com deslocamento 6. Através do arquivo de índice, sabemos que a posição da Mensagem com deslocamento 6 no arquivo de dados é 9807.

Abra o arquivo de dados e faça a varredura sequencialmente do local em 9807 até que a mensagem com deslocamento 7 seja encontrada.

Este conjunto de mecanismos é baseado no deslocamento ordenado. O arquivo de índice é mapeado para a memória, portanto, a velocidade de pesquisa ainda é muito rápida.

Word, Kafka usa a partição de armazenamento de mensagens (partição) , o segmento (logsegment) e índice esparso estes meios para alcançar uma alta eficiência.

Três, limpeza de log

1. Exclusão de log

O gerenciador de log Kafka permite estratégias de exclusão personalizadas . A estratégia atual é deletar os logs cujo tempo de modificação é N dias atrás (deletar por hora) Outra estratégia também pode ser utilizada: a estratégia de reter os últimos dados NGB (deletar por tamanho). Para evitar o bloqueio da operação de leitura durante a exclusão, uma implementação de cópia na gravação é adotada . Quando a operação de exclusão é realizada, a função de pesquisa binária da operação de leitura é realmente realizada em uma cópia de instantâneo estática, que é semelhante a Java CopyOnWriteArrayList. Pensamento de exclusão do log de consumo do Kafka: O Kafka divide um arquivo de partição grande em um tópico em vários segmentos de arquivos pequenos. Por meio de vários segmentos de arquivos pequenos, é fácil limpar ou excluir periodicamente os arquivos que foram consumidos, reduzindo o uso do disco .

log.cleanup.policy=delete 启用删除策略 
直接删除,删除后的消息不可恢复。可配置以下两个策略: 
清理超过指定时间清理: 
log.retention.hours=16 
超过指定大小后,删除旧的消息: 
log.retention.bytes=1073741824

2. Compressão de log

Comprima os dados e guarde apenas os dados da última versão de cada chave. Primeiro, defina o log.cleaner.enable=truelimpador de ativação na configuração do broker , que é desativado por padrão. Defina a log.cleanup.policy=compactestratégia de ativação de compactação na configuração do Tópico .

O deslocamento compactado pode ser descontínuo. Por exemplo, não há 5 e 7 na figura acima, porque as mensagens desses deslocamentos foram mescladas. Quando as mensagens desses deslocamentos são consumidas, as mensagens correspondentes aos deslocamentos maiores que este deslocamento serão obtidas. Por exemplo, ao tentar obter uma mensagem com deslocamento de 5, você realmente obterá uma mensagem com deslocamento de 6 e iniciará o consumo a partir desta posição.

Essa estratégia é adequada apenas para cenários especiais. Por exemplo, a chave da mensagem é o ID do usuário e o corpo da mensagem são as informações do usuário. Por meio dessa estratégia de compactação, as informações mais recentes de todos os usuários são salvas em todo o conjunto de mensagens.

A estratégia de compressão suporta a exclusão. Quando a versão mais recente de uma chave não tiver conteúdo, a chave será excluída, o que também está de acordo com a lógica acima.

Quarto, as vantagens do armazenamento em disco

Quando o Kafka foi projetado, ele usa um método de anexação de arquivo para escrever mensagens, ou seja, novas mensagens só podem ser anexadas ao final do arquivo de log e as mensagens que foram gravadas não podem ser modificadas. Este método é uma gravação sequencial típica Operação de julgamento, portanto, mesmo que Kafka use o disco como meio de armazenamento, o rendimento que pode ser alcançado é muito impressionante.

O Kafka usa uma grande quantidade de cache de página , que também é um dos fatores importantes para o Kafka atingir um alto rendimento .

Além da adição de sequência de mensagens , cache de página e outras tecnologias, o Kafka também usa tecnologia de cópia zero para melhorar ainda mais o desempenho. A " tecnologia de cópia zero " só precisa copiar os dados do arquivo do disco para o cache de página uma vez e, em seguida, enviar os dados do cache de página diretamente para a rede (ao enviar para assinantes diferentes, o mesmo cache de página pode ser usado), evitando Repita a operação de cópia. Se houver 10 consumidores, no método tradicional, o número de cópias de dados é 4 * 10 = 40 vezes, enquanto o uso da "tecnologia de cópia zero" só precisa de 1 + 10 = 11 vezes, uma vez que é copiado do disco para o cache de página, 10 vezes significa Cada um de 10 consumidores lê o cache da página uma vez.

Resumindo

Este capítulo descreve principalmente os pontos de conhecimento relacionadas com o armazenamento em Kafka, incluindo do próprio Kafka formato de log , índice de log , limpeza de registro, etc., e envolve também conhecimento do armazenamento físico subjacente. Por meio do estudo deste capítulo, você pode ter uma compreensão mais profunda do mecanismo central de Kafka.


Gerenciamento de partição Kafka (eleição de cópia prioritária, redistribuição de partição) os alunos interessados ​​podem clicar no link para ler meu último artigo, que também contém o método de obtenção deste artigo!

Acho que você gosta

Origin blog.csdn.net/Java_Caiyo/article/details/112794377
Recomendado
Clasificación