O consumo de dados do Log service em tempo real com um sdk exige o gerenciamento de detalhes de implementação, como balanceamento de carga e failover entre consumidores. Um consumer group lida com essas complexidades para você, permitindo o consumo de dados quase em tempo real, geralmente em segundos.
Visão geral
Um Logstore contém múltiplos shards. Um consumer group consome dados atribuindo esses shards aos seus consumidores com base nas seguintes regras:
Cada shard é atribuído a apenas um consumidor por vez.
Um único consumidor pode receber múltiplos shards.
Quando um novo consumidor entra em um consumer group, o sistema rebalanceia os shards entre todos os consumidores para garantir o balanceamento de carga. As mesmas regras se aplicam.
Conceitos principais
|
Termo |
Descrição |
|
consumer group |
Um consumer group consiste em múltiplos consumidores que consomem dados conjuntamente do mesmo Logstore sem duplicação. Importante
Você pode criar até 30 consumer groups para cada Logstore. |
|
consumer |
A unidade básica de um consumer group que realiza o consumo real de dados. Importante
Os consumidores no mesmo consumer group devem ter nomes exclusivos. |
|
Logstore |
Uma unidade para coleta, armazenamento e consulta de dados. Para mais informações, consulte Logstore. |
|
shard |
Uma unidade que controla a capacidade de leitura e gravação de um Logstore. Os dados são sempre armazenados em um shard. Para mais informações, consulte shard. |
|
checkpoint |
A posição em um fluxo de dados que marca os dados mais recentes processados por um consumidor. Isso permite que o consumidor retome o processamento a partir desse ponto após uma reinicialização. Nota
Ao consumir dados usando um consumer group, garanta que o sistema salve os checkpoints automaticamente se o programa falhar. Após a recuperação do programa, ele pode continuar consumindo dados a partir do último checkpoint. Isso evita o consumo duplicado. |
Pré-requisitos
Um projeto e um Logstore Standard foram criados, e os logs foram coletados. Para mais informações, consulte Manage projects, Create a basic LogStore e Data collection.
Você possui configured access credentials.
Você possui initialized the SLS SDK for Java.
Etapa 1: crie um consumer group
Não é possível criar um consumer group diretamente no console web do SLS. Você só pode criar um consumer group usando o sdk, a API ou a CLI.
crie um consumer group usando o sdk, a API ou a CLI.
SDK
O código a seguir cria um consumer group:
Para códigos de exemplo sobre como gerenciar consumer groups, consulte Use the Java SDK to manage consumer groups e Use Simple Log Service SDK for Python to manage consumer groups.
API
Crie um consumer group usando a API consultando CreateConsumerGroup.
Verifique se o consumer group foi criado consultando ListConsumerGroup.
CLI
Para a CLI, insira o comando consultando create_consumer_group.
Verifique se o consumer group foi criado consultando list_consumer_group.
Etapa 2: Consuma dados de log
Como funciona
Quando um consumidor que usa o sdk do consumer group é iniciado pela primeira vez, o sdk cria um consumer group caso ele ainda não exista. O checkpoint inicial permite que você defina a posição inicial de consumo, usada apenas quando o consumer group é criado pela primeira vez. Nas reinicializações subsequentes, o consumidor retoma a partir do último checkpoint salvo pelo servidor. Por exemplo:
LogHubConfig.ConsumePosition.BEGIN_CURSOR: O consumer group começa a consumir a partir do primeiro log no Logstore.LogHubConfig.ConsumePosition.END_CURSOR: O consumer group começa a consumir após o último log no Logstore.
Exemplos
Você pode consumir dados com um consumer group usando os SDKs Java, C++, Python e Go. Os exemplos a seguir usam Java.
Exemplo 1: Consumo com SDK
-
Adicione as dependências do Maven.
-
Crie uma classe para definir sua lógica de processamento de logs.
Para mais exemplos de código, consulte os repositórios aliyun-log-consumer-java e Aliyun LOG Go Consumer.
-
Crie uma fábrica para gerar instâncias do seu processador de logs.
-
Crie uma classe principal e configure a thread de trabalho.
-
execute
Main.java.
Exemplo 2: Consumo com SDK e SPL
-
Adicione as dependências do Maven.
-
Crie uma classe para definir sua lógica de processamento de logs.
-
Crie uma fábrica para gerar instâncias do seu processador de logs.
-
Crie uma classe principal e configure a thread de trabalho.
-
execute
Main.java.
Etapa 3: visualize o status do consumer group
visualize o status de um consumer group usando um dos seguintes métodos:
Java SDK
-
visualize o checkpoint de consumo para cada shard. O código a seguir fornece um exemplo:
-
Console
Faça login no console do Simple Log Service.
-
Na seção Projects, clique em um projeto desejado.

Na aba , clique em um ícone
à esquerda do Logstore de destino e, em seguida, clique em um ícone
à esquerda de Data Consumption.Na lista de consumer groups, clique em um consumer group de destino.
Na página Consumer Group Status, visualize o checkpoint de consumo para cada shard. Esta página mostra detalhes para cada shard, incluindo seu ID (shard), Last Consumed Time e o Client consumidor. Você também pode usar os botões Refresh e Reset Checkpoint.
Operações relacionadas
-
Autorização de usuário RAM
Para que um usuário RAM gerencie consumer groups, conceda as permissões necessárias a ele. Para mais informações, consulte Create and authorize a RAM user.
A tabela a seguir lista as Actions necessárias.
Action
Descrição
Resource
log:GetCursorOrData(GetCursor)
Obtém um cursor com base em um tempo especificado.
acs:log:${regionName}:${projectOwnerAliUid}:project/${projectName}/logstore/${LogStoreName}
log:CreateConsumerGroup(CreateConsumerGroup)
Cria um consumer group em um Logstore especificado.
acs:log:${regionName}:${projectOwnerAliUid}:project/${projectName}/logstore/${LogStoreName}/consumergroup/${consumerGroupName}
log:ListConsumerGroup(ListConsumerGroup)
Lista todos os consumer groups em um Logstore especificado.
acs:log:${regionName}:${projectOwnerAliUid}:project/${projectName}/logstore/${LogStoreName}/consumergroup/*
log:ConsumerGroupUpdateCheckPoint(UpdateCheckPoint)
Atualiza o checkpoint em um shard para um consumer group especificado.
acs:log:${regionName}:${projectOwnerAliUid}:project/${projectName}/logstore/${LogStoreName}/consumergroup/${consumerGroupName}
log:ConsumerGroupHeartBeat(ConsumerGroupHeartBeat)
Envia um heartbeat de um consumidor especificado para o servidor.
acs:log:${regionName}:${projectOwnerAliUid}:project/${projectName}/logstore/${LogStoreName}/consumergroup/${consumerGroupName}
log:UpdateConsumerGroup(UpdateConsumerGroup)
Modifica as propriedades de um consumer group especificado.
acs:log:${regionName}:${projectOwnerAliUid}:project/${projectName}/logstore/${LogStoreName}/consumergroup/${consumerGroupName}
log:GetConsumerGroupCheckPoint(GetConsumerGroupCheckPoint)
Obtém o checkpoint de um ou de todos os shards para um consumer group especificado.
acs:log:${regionName}:${projectOwnerAliUid}:project/${projectName}/logstore/${LogStoreName}/consumergroup/${consumerGroupName}
Para conceder a um usuário RAM as permissões listadas abaixo, use a seguinte política de exemplo.
ID da conta Alibaba Cloud: 174649****602745
ID da região: cn-hangzhou
Nome do projeto: project-test
Nome do Logstore: logstore-test
Nome do consumer group: consumergroup-test
Alternativamente, você pode anexar a política de sistema
AliyunLogFullAccess, que concede permissões para gerenciar o Simple Log Service, ao usuário RAM. Essa política já inclui todas as permissões que as operações de consumer group exigem, portanto, não é necessário criar uma política personalizada. -
Solução de problemas
Para facilitar a solução de problemas, configure o Log4j para sua aplicação consumidora registrar exceções do consumer group. A seguir, uma configuração de exemplo do log4j.properties:
log4j.rootLogger = info,stdout log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%nApós configurar o Log4j, a aplicação consumidora gera informações de exceção semelhantes às seguintes:
[WARN ] 2018-03-14 12:01:52,747 method:com.aliyun.openservices.loghub.client.LogHubConsumer.sampleLogError(LogHubConsumer.java:159) com.aliyun.openservices.log.exception.LogException: Invalid loggroup count, (0,1000] -
Consumir dados a partir de um tempo especificado
// consumerStartTimeInSeconds indicates the time from which to start consuming data. public LogHubConfig(String consumerGroupName, String consumerName, String loghubEndPoint, String project, String logStore, String accessId, String accessKey, int consumerStartTimeInSeconds); // position is an enumeration. LogHubConfig.ConsumePosition.BEGIN_CURSOR starts consumption from the oldest data. LogHubConfig.ConsumePosition.END_CURSOR starts consumption from the latest data. public LogHubConfig(String consumerGroupName, String consumerName, String loghubEndPoint, String project, String logStore, String accessId, String accessKey, ConsumePosition position);NotaEscolha um construtor com base nos seus requisitos.
Se um checkpoint já estiver salvo no servidor, o consumo será retomado a partir desse checkpoint.
O Simple Log Service prioriza um checkpoint salvo para o consumo. Caso especifique um tempo de início, certifique-se de que o valor consumerStartTimeInSeconds esteja dentro do período de retenção de dados (TTL). Caso contrário, o tempo de início especificado será ignorado.
-
Redefinir um checkpoint
public static void updateCheckpoint() throws Exception { Client client = new Client(host, accessId, accessKey); // The timestamp must be a UNIX timestamp in seconds. If your timestamp is in milliseconds, divide it by 1000. long timestamp = Timestamp.valueOf("2017-11-15 00:00:00").getTime() / 1000; ListShardResponse response = client.ListShard(new ListShardRequest(project, logStore)); for (Shard shard : response.GetShards()) { int shardId = shard.GetShardId(); String cursor = client.GetCursor(project, logStore, shardId, timestamp).GetCursor(); client.UpdateCheckPoint(project, logStore, consumerGroup, shardId, cursor); } }
Referências
-
API
Ações
API
crie um consumer group
Consulte um consumer group
exclua um consumer group
atualize um consumer group
Envie heartbeat do consumidor
Consulte checkpoints do consumer group
Atualize checkpoints do consumer group
-
SDK
Linguagem
Referências
Java
Python
-
CLI
Ações
CLI
crie um consumer group
Consulte um consumer group
atualize um consumer group
exclua um consumer group
Consulte checkpoints do consumer group
Atualize checkpoints do consumer group