Como usar o Shed Lock com um sistema baseado em Kafka?

Oct 29, 2025

Deixe um recado

Amanda Li
Amanda Li
Como analista de sustentabilidade, concentro-me na implementação de práticas ecológicas em nossos processos de produção. Na Lianhu, estamos comprometidos em minimizar nossa pegada ambiental.

Ei! Sou fornecedor de Shed Locks e hoje quero conversar sobre como você pode usar Shed Locks em um sistema baseado em Kafka. Pode parecer um pouco técnico, mas não se preocupe, vou explicar para você de uma forma simples.

Primeiro, vamos examinar rapidamente o que são Kafka e Shed Locks. Kafka é uma plataforma de streaming distribuída muito popular para lidar com feeds de dados em tempo real. Ele permite publicar, assinar, armazenar e processar fluxos de registros. Por outro lado,Bloqueio de galpãoé uma ótima ferramenta quando se trata de garantir que apenas uma instância de uma tarefa seja executada por vez em um sistema distribuído.

Então, por que você usaria um Shed Lock em um sistema baseado em Kafka? Bem, em uma configuração Kafka, muitas vezes você tem vários consumidores processando mensagens de tópicos. Às vezes, você pode ter tarefas que não deveriam ser executadas simultaneamente. Por exemplo, você poderia ter uma tarefa que atualiza um recurso compartilhado com base nas mensagens Kafka. Se várias instâncias desta tarefa forem executadas ao mesmo tempo, isso poderá levar a inconsistências de dados ou outros problemas. É aí que o Shed Lock se torna útil.

Integrando Shed Lock com Kafka

A primeira etapa para usar o Shed Lock com um sistema baseado em Kafka é adicionar as dependências necessárias. Se estiver usando um projeto Java, você pode adicionar a dependência Shed Lock ao seupom.xmlse você estiver usando o Maven.

<dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.44.0</version> </dependency>

Depois de adicionar a dependência, você precisa configurar o provedor de bloqueio. Existem diferentes tipos de provedores de bloqueio disponíveis, como baseados em banco de dados ou baseados em Redis. Para simplificar, vamos supor que estamos usando um provedor de bloqueio baseado em banco de dados. Você precisará configurar uma tabela em seu banco de dados para armazenar as informações de bloqueio.

CREATE TABLE shedlock (nome VARCHAR (64), lock_until TIMESTAMP (3) NULL, bloqueado_em TIMESTAMP (3) NULL, bloqueado_por VARCHAR (255), CHAVE PRIMÁRIA (nome));

Em seu aplicativo Spring Boot, você pode configurar o provedor de bloqueio assim:

importar net.javacrumbs.shedlock.core.LockProvider; importar net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider; importar org.springframework.context.annotation.Bean; importar org.springframework.context.annotation.Configuration; importar org.springframework.jdbc.core.JdbcTemplate; importar javax.sql.DataSource; @Configuration public class ShedLockConfig { @Bean public LockProvider lockProvider(DataSource dataSource) { return new JdbcTemplateLockProvider( JdbcTemplateLockProvider.Configuration.builder() .withJdbcTemplate(new JdbcTemplate(dataSource)) .usingDbTime() .construir() ); } }

Usando Shed Lock em consumidores Kafka

Agora que configuramos o Shed Lock, vamos ver como podemos usá-lo em nossos consumidores Kafka. Suponha que você tenha um consumidor Kafka que processe mensagens de um tópico e atualize um recurso compartilhado. Você pode usar o@SchedulerLockanotação fornecida pelo Shed Lock para garantir que apenas uma instância da tarefa seja executada por vez.

importar net.javacrumbs.shedlock.spring.annotation.SchedulerLock; importar org.springframework.kafka.annotation.KafkaListener; importar org.springframework.stereotype.Service; @Service public class KafkaConsumerService { @KafkaListener(topics = "your - topic", groupId = "your - group - id") @SchedulerLock(name = "kafkaConsumerTask", lockAtMostFor = "PT10M", lockAtLeastFor = "PT1M") public void consumerMessage(String message) { // Processa a mensagem e atualiza o recurso compartilhado System.out.println("Mensagem recebida: " + mensagem); } }

No código acima, o@SchedulerLockanotação garante que oconsumirMessagemétodo fica bloqueado por no mínimo 1 minuto e no máximo 10 minutos. Onomeatributo é usado para identificar o bloqueio.

Considerações e Melhores Práticas

Ao usar o Shed Lock com um sistema baseado em Kafka, há algumas coisas a serem lembradas.

21-62-2

  • Duração do bloqueio: Você precisa escolher cuidadosamente olockAtMostForelockAtLeastForvalores. Se olockAtMostForfor muito curto, o bloqueio poderá ser liberado antes que a tarefa seja concluída, fazendo com que várias instâncias sejam executadas ao mesmo tempo. Se for muito longo, poderá causar atrasos desnecessários.
  • Tratamento de erros: você deve ter o tratamento de erros adequado. Se ocorrer um erro durante a execução da tarefa bloqueada, o bloqueio deverá ser liberado normalmente. Caso contrário, poderá levar a uma situação de impasse.
  • Escalabilidade: à medida que seu sistema Kafka é dimensionado, certifique-se de que o provedor de bloqueio possa lidar com o aumento de carga. Por exemplo, se você estiver usando um provedor de bloqueio baseado em banco de dados, certifique-se de que seu banco de dados possa lidar com as solicitações de bloqueio simultâneas.

Outros tipos de bloqueios para diferentes casos de uso

EnquantoBloqueio de galpãoé ótimo para garantir a execução de tarefas de instância única; existem outros tipos de bloqueios que podem ser úteis em um sistema baseado em Kafka. Por exemplo, se você estiver lidando com fechaduras físicas em portas ou gabinetes em um data center onde sua infraestrutura Kafka está localizada, considereBloqueio de um quarto de voltaouFechadura de porta redonda. Essas fechaduras podem fornecer uma camada extra de segurança para o seu equipamento.

Conclusão

Usar o Shed Lock com um sistema baseado em Kafka pode ajudá-lo a evitar inconsistências de dados e outros problemas que podem surgir da execução simultânea de tarefas. Seguindo as etapas descritas acima, você pode integrar facilmente o Shed Lock ao seu aplicativo Kafka. Se você estiver interessado em adquirir nossas fechaduras de galpão de alta qualidade ou tiver alguma dúvida sobre como elas podem se encaixar em seu sistema Kafka, sinta-se à vontade para entrar em contato para uma discussão sobre compras. Estamos aqui para ajudá-lo a encontrar a melhor solução para suas necessidades.

Referências

  • Documentação de inicialização Spring
  • Documentação Kafka
  • Repositório GitHub Shed Lock
Enviar inquérito