Comment utiliser Shed Lock avec un système basé sur Kafka ?

Oct 29, 2025

Laisser un message

Amanda Li
Amanda Li
En tant qu'analyste de durabilité, je me concentre sur la mise en œuvre de pratiques écologiques dans nos processus de production. Chez Lianhu, nous nous engageons à minimiser notre empreinte environnementale.

Salut! Je suis un fournisseur de Shed Locks et aujourd'hui, je souhaite discuter de la façon dont vous pouvez utiliser Shed Locks dans un système basé sur Kafka. Cela peut paraître un peu technique, mais ne vous inquiétez pas, je vais vous l'expliquer de manière simple.

Tout d’abord, examinons rapidement ce que sont Kafka et Shed Locks. Kafka est une plate-forme de streaming distribuée très populaire pour gérer les flux de données en temps réel. Il vous permet de publier, de vous abonner, de stocker et de traiter des flux d'enregistrements. D'autre part,Serrure de hangarest un excellent outil pour garantir qu'une seule instance d'une tâche s'exécute à la fois dans un système distribué.

Alors, pourquoi voudriez-vous utiliser un Shed Lock dans un système basé sur Kafka ? Eh bien, dans une configuration Kafka, plusieurs consommateurs traitent souvent les messages des sujets. Parfois, vous pouvez avoir des tâches qui ne doivent pas s'exécuter simultanément. Par exemple, vous pourriez avoir une tâche qui met à jour une ressource partagée en fonction des messages Kafka. Si plusieurs instances de cette tâche s'exécutent en même temps, cela peut entraîner des incohérences de données ou d'autres problèmes. C'est là que Shed Lock est utile.

Intégration de Shed Lock à Kafka

La première étape de l'utilisation de Shed Lock avec un système basé sur Kafka consiste à ajouter les dépendances nécessaires. Si vous utilisez un projet Java, vous pouvez ajouter la dépendance Shed Lock à votrepom.xmlsi vous utilisez Maven.

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

Une fois que vous avez ajouté la dépendance, vous devez configurer le fournisseur de verrouillage. Il existe différents types de fournisseurs de verrous disponibles, comme ceux basés sur une base de données ou basés sur Redis. Pour plus de simplicité, supposons que nous utilisons un fournisseur de verrouillage basé sur une base de données. Vous devrez configurer une table dans votre base de données pour stocker les informations de verrouillage.

CREATE TABLE shedlock( nom VARCHAR(64), lock_until TIMESTAMP(3) NULL, verrouillé_à TIMESTAMP(3) NULL, verrouillé_par VARCHAR(255), PRIMARY KEY (nom) );

Dans votre application Spring Boot, vous pouvez configurer le fournisseur de verrouillage comme ceci :

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

Utilisation de Shed Lock chez les consommateurs Kafka

Maintenant que nous avons configuré Shed Lock, voyons comment nous pouvons l'utiliser chez nos consommateurs Kafka. Supposons que vous disposiez d'un consommateur Kafka qui traite les messages d'un sujet et met à jour une ressource partagée. Vous pouvez utiliser le@SchedulerLockannotation fournie par Shed Lock pour garantir qu’une seule instance de la tâche s’exécute à la fois.

importer net.javacrumbs.shedlock.spring.annotation.SchedulerLock ; importer org.springframework.kafka.annotation.KafkaListener ; importer 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 consumeMessage(String message) { // Traite le message et met à jour la ressource partagée System.out.println("Message reçu : " + message); } }

Dans le code ci-dessus, le@SchedulerLockl'annotation garantit que leconsommerMessageLa méthode est verrouillée pendant au moins 1 minute et au maximum 10 minutes. LenomL'attribut est utilisé pour identifier le verrou.

Considérations et meilleures pratiques

Lorsque vous utilisez Shed Lock avec un système basé sur Kafka, il y a quelques points à garder à l'esprit.

21-62-2

  • Durée de verrouillage: Vous devez choisir avec soin lelockAtMostForetverrouillerAuMoinsPourvaleurs. Si lelockAtMostForSi la valeur est trop courte, le verrou peut être libéré avant la fin de la tâche, ce qui entraîne l'exécution simultanée de plusieurs instances. Si c'est trop long, cela pourrait entraîner des retards inutiles.
  • Gestion des erreurs: Vous devez avoir mis en place une gestion appropriée des erreurs. Si une erreur se produit lors de l'exécution de la tâche verrouillée, le verrou doit être libéré en douceur. Autrement, cela pourrait conduire à une situation de blocage.
  • Évolutivité: À mesure que votre système Kafka évolue, assurez-vous que le fournisseur de verrous peut gérer la charge accrue. Par exemple, si vous utilisez un fournisseur de verrouillage basé sur une base de données, assurez-vous que votre base de données peut gérer les demandes de verrouillage simultanées.

Autres types de verrous pour différents cas d'utilisation

Alors queSerrure de hangarest idéal pour garantir l'exécution de tâches à instance unique, il existe d'autres types de verrous qui pourraient être utiles dans un système basé sur Kafka. Par exemple, si vous avez affaire à des verrous physiques sur des portes ou des boîtiers dans un centre de données où se trouve votre infrastructure Kafka, vous pouvez envisagerVerrouillage quart de tourouSerrure de porte ronde. Ces verrous peuvent fournir une couche de sécurité supplémentaire pour votre équipement.

Conclusion

L'utilisation de Shed Lock avec un système basé sur Kafka peut vous aider à éviter les incohérences des données et d'autres problèmes pouvant survenir lors de l'exécution de tâches simultanées. En suivant les étapes décrites ci-dessus, vous pouvez facilement intégrer Shed Lock dans votre application Kafka. Si vous êtes intéressé par l'achat de nos serrures de hangar de haute qualité ou si vous avez des questions sur la façon dont elles peuvent s'intégrer dans votre système Kafka, n'hésitez pas à nous contacter pour une discussion sur l'achat. Nous sommes là pour vous aider à trouver la meilleure solution pour vos besoins.

Références

  • Documentation de démarrage de printemps
  • Documentation Kafka
  • Dépôt GitHub de verrouillage du hangar
Envoyez demande