GeminiStateBackend é um mecanismo de armazenamento chave-valor projetado para processamento de streaming e é o state backend padrão do Realtime Compute for Apache Flink. Este tópico descreve os benefícios do GeminiStateBackend, o armazenamento state backend de nível empresarial, e compara o desempenho entre GeminiStateBackend e RocksDBStateBackend.
Visão geral
A computação com estado é um cenário complexo e desafiador no processamento de streaming. O acesso a dados no processamento de streaming tem as seguintes características:
-
Há um grande número de acessos aleatórios e poucas consultas de intervalo são realizadas.
-
O tráfego de dados e os hotspots mudam com frequência. Nesse caso, diferentes threads paralelas do mesmo operador utilizam modos de acesso a dados distintos.
O GeminiStateBackend oferece os seguintes benefícios:
-
Usa uma nova arquitetura e design de estrutura de dados para melhorar o desempenho geral do processamento de dados.
A arquitetura geral do GeminiStateBackend é projetada com base na estrutura de dados log-structured merge-tree (LSM tree). O GeminiStateBackend oferece três capacidades: adaptação às mudanças no volume de dados e nas características de acesso, armazenamento em camadas de dados quentes e frios, e alternância entre arquiteturas anti-caching e caching. O GeminiStateBackend também suporta a estrutura de armazenamento hash que permite acesso aleatório. A comparação de desempenho usando o Nexmark mostra que o GeminiStateBackend oferece desempenho superior ao RocksDBStateBackend. O desempenho de cerca de metade dos casos de uso do GeminiStateBackend é mais de 70% superior ao desempenho dos casos de uso do RocksDBStateBackend.
-
Suporta separação computação-armazenamento para eliminar a dependência dos dados de estado em discos locais.
O espaço dos discos locais é limitado. Por isso, uma implantação com grande quantidade de dados de estado frequentemente encontra o problema de espaço insuficiente em disco local. Na maioria dos casos, se uma implantação baseada em RocksDBStateBackend encontrar esse problema, é necessário aumentar o paralelismo de threads ou usar outros métodos para aumentar os recursos. O GeminiStateBackend suporta a separação computação-armazenamento. Dessa forma, o armazenamento de estado pode ser independente dos discos locais, o que evita falhas de implantação causadas por excesso de dados de estado locais. Para obter mais informações sobre a configuração relacionada à separação computação-armazenamento, consulte Parâmetros para separação computação-armazenamento.
-
Suporta separação chave-valor adaptativa para melhorar significativamente o desempenho de implantações que envolvem JOIN de fluxo duplo ou JOIN de múltiplos fluxos.
O JOIN de fluxo duplo ou o JOIN de múltiplos fluxos é um dos cenários mais desafiadores no processamento de streaming e um cenário típico em que o armazenamento de estado encontra um gargalo. O GeminiStateBackend oferece o recurso de separação chave-valor para se adaptar a cenários em que a taxa de sucesso das operações JOIN é baixa ou o comprimento dos valores dos dados de estado é longo. Isso melhora significativamente o desempenho de implantações que envolvem JOIN de fluxo duplo ou JOIN de múltiplos fluxos. O recurso de separação chave-valor suporta ajuste adaptativo sem a necessidade de configurações e otimizações manuais. A verificação durante o Double 11 Shopping Festival do Alibaba Group mostra que o throughput das implantações pode ser aumentado em 50% a 70% ou mais, e a utilização de recursos computacionais pode ser aumentada em média 50% após a ativação do recurso de separação chave-valor. Em cenários típicos, a utilização de recursos computacionais pode ser aumentada em 100% a 200%. Para obter mais informações sobre a configuração relacionada à separação chave-valor, consulte Parâmetros para separação chave-valor.
-
Usa savepoints leves, o que acelera significativamente a criação de checkpoints e savepoints para implantações que contêm grande quantidade de dados de estado.
O GeminiStateBackend suporta savepoints de implantação com granularidade mais fina e desacopla o recurso de checkpoint do mecanismo de compactação da LSM tree. Isso acelera e estabiliza a criação de checkpoints e savepoints. O GeminiStateBackend também suporta o recurso Native Incremental Savepoint. Esse recurso é usado em conjunto com os savepoints nativos do Realtime Compute for Apache Flink para fornecer desempenho semelhante ao dos checkpoints, melhorando a disponibilidade dos savepoints.
-
Suporta ajuste adaptativo de parâmetros, eliminando a carga de trabalho do ajuste manual de parâmetros.
Em tarefas de processamento de streaming, diferentes operadores têm modos de acesso ao estado distintos. Na maioria dos casos, diferentes combinações de parâmetros são necessárias para alcançar o desempenho ideal do armazenamento de estado. As configurações desses parâmetros envolvem tecnologias subjacentes. O ajuste manual de parâmetros tem alto custo de aprendizado e compreensão. Para resolver esse problema, o GeminiStateBackend suporta a tecnologia de ajuste adaptativo de parâmetros. Quando uma implantação está em execução, as configurações de parâmetros podem ser ajustadas automaticamente com base no modo de acesso a dados e no tráfego atual, alcançando o desempenho ideal do armazenamento de estado em vários cenários. A verificação durante o Double 11 Shopping Festival do Alibaba Group mostra que essa tecnologia pode reduzir o ajuste manual de parâmetros em mais de 95% e aumentar o throughput de núcleo único em 10% a 40%. Para obter mais informações sobre a configuração relacionada ao ajuste adaptativo de parâmetros, consulte Parâmetros para ajuste adaptativo de parâmetros.
Comparação de desempenho usando o Nexmark
Neste exemplo, os casos de uso relacionados a gargalos de estado e recursos de hardware no Nexmark são usados para comparar o desempenho entre RocksDBStateBackend e GeminiStateBackend.
O link do Nexmark é proveniente de um site de terceiros. Ao visitar o site, o acesso pode falhar ou estar sujeito a atrasos.
O resultado da comparação mostra que o GeminiStateBackend otimiza significativamente o desempenho geral (throughput de núcleo único) das implantações. A tabela a seguir apresenta o resultado da comparação.
|
Nome do caso |
GeminiStateBackend TPS/Core |
RocksDBStateBackend TPS/Core |
Melhoria de desempenho do GeminiStateBackend |
|
q4 |
83.63 K/s |
53.26 K/s |
57.02% |
|
q5 |
84.52 K/s |
57.86 K/s |
46.08% |
|
q8 |
468.96 K/s |
361.37 K/s |
29.77% |
|
q9 |
59.42 K/s |
26.56 K/s |
123.72% |
|
q11 |
93.08 K/s |
48.82 K/s |
90.66% |
|
q18 |
150.93 K/s |
87.37 K/s |
72.75% |
|
q19 |
143.46 K/s |
58.5 K/s |
145.23% |
|
q20 |
75.69 K/s |
22.44 K/s |
237.30% |
Referências
-
Para obter mais informações sobre como criar, visualizar ou excluir um estado de uma implantação, ou restaurar uma implantação a partir de um estado especificado, consulte Gerenciamento do conjunto de status.
-
Para obter mais informações sobre as diferenças em eficiência de migração e desempenho de implantação durante a migração de dados de estado entre RocksDBStateBackend e GeminiStateBackend, consulte Visão geral.
-
Para obter mais informações sobre o impacto de modificações em instruções SQL de uma implantação na compatibilidade entre a implantação e os dados de estado, consulte Modificações SQL e impacto na compatibilidade.
-
Para obter mais informações sobre o teste de desempenho Nexmark do Realtime Compute for Apache Flink, consulte White paper de desempenho (teste de desempenho com Nexmark).
-
Para obter mais informações sobre respostas a perguntas frequentes sobre checkpoints ou savepoints do Realtime Compute for Apache Flink, consulte Perguntas frequentes sobre checkpoints ou savepoints de uma implantação.