O blog de tecnologia da Uber publicou um artigo, Introdução ao armazenamento em camadas Kafka na Uber, com o objetivo de maximizar a retenção de dados com menos corretores Kafka e menos memória. Isso permite tempos de retenção de mensagens mais longos em vários aplicativos de negócios.
Uma solução comum é integrar o armazenamento externo manualmente, sincronizando periodicamente os dados com o sistema externo. No entanto, isso envolve esforços significativos de desenvolvimento e manutenção, como determinar como salvar os dados, definir a frequência de sincronização, acionar processos, buscar dados e usar indexação.
Portanto, a Uber propôs uma solução que encapsula a lógica do armazenamento externo, tornando-o plug-and-play com configurações simples. Este recurso está sendo desenvolvido em colaboração com a Apache Foundation e estará disponível em versões futuras.
É importante entender que Kafka é um componente de fila de mensagens (MQ) somente anexado com recursos de rendimento muito altos. Kafka armazena logs no armazenamento local do corretor e os usuários podem configurar o tempo de retenção ou o tamanho do log. Na minha empresa anterior (Lenovo), usávamos o Flink para consumir dados continuamente. Um grande volume de dados faria com que o Kafka excedesse o limite de armazenamento em disco, levando a falhas de gravação de dados e erros de negócios. Para reduzir custos, em vez de implantar mais máquinas, poderíamos apenas ajustar o tempo de retenção.
Além disso, se cada empresa desenvolvesse seu próprio sistema para salvar dados mais antigos em armazenamento externo, isso envolveria uma enorme quantidade de trabalho de desenvolvimento. Também haveria vários problemas relacionados à sincronização e consistência de dados.
A essência é transformar o Broker adicionando gerenciamento remoto de log e gerenciamento de armazenamento a ele.
RemoteLogManager: gerencia o ciclo de vida de segmentos de log remotos, incluindo cópia, limpeza e busca.
RemoteStorageManager: gerencia ações para segmentos de log remoto, incluindo cópia, busca e exclusão. Os metadados associados a segmentos de log remoto incluem informações sobre deslocamentos de início e fim do segmento, carimbos de data/hora, instantâneos de estado do produtor e pontos de verificação de época líder.
RemoteLogMetadataManager monitora esses metadados para garantir que o sistema saiba onde cada segmento começa e termina e outras informações críticas necessárias para recuperação e gerenciamento de dados.
RemoteLogMetadataManager: gerencia o ciclo de vida de metadados para segmentos de log remotos com forte consistência.
Entre eles, o RemoteLogManager atua como um componente de controle, conectando-se diretamente ao disco no Broker para recuperar os dados lidos. Também é responsável por retornar os dados remotos. RemoteStorageManager é a entidade que opera nos dados e RemoteLogMetadataManager é responsável por gerenciar os metadados.
Resumo das três ações no armazenamento em camadas Kafka
Copiando segmentos para armazenamento remoto
Um segmento de log é considerado elegível para cópia para armazenamento remoto se seu deslocamento final (o deslocamento da última mensagem no segmento) for menor que o último deslocamento estável da partição.(Last-Stable-Offset (LSO): O deslocamento mais alto para o qual todas as mensagens anteriores são totalmente reconhecidas por todas as réplicas sincronizadas, garantindo nenhuma perda de dados.)RemoteStorageManager lida com a cópia de segmentos de log junto com seus índices associados, carimbos de data e hora, instantâneos do produtor e cache de época líder.
Limpeza de segmentos remotos
Os dados remotos são limpos em intervalos regulares computando os segmentos elegíveis por um pool de threads dedicado. Isso é diferente da limpeza assíncrona dos segmentos de log locais. Quando um tópico é excluído, a limpeza dos segmentos de log remotos é feita de forma assíncrona e não bloqueará a operação de exclusão existente nem recriará um novo tópico.
Buscando segmentos do armazenamento remoto
RemoteLogManager determina o segmento remoto de destino com base no deslocamento desejado e na época líder, examinando o armazenamento de metadados usando RemoteLogMetadataManager. Ele usa RemoteStorageManager para encontrar a posição dentro do segmento e começar a buscar os dados desejados.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3