Hallo! Ich bin ein Anbieter von Shed Locks und möchte heute darüber sprechen, wie Sie Shed Locks in einem Kafka-basierten System verwenden können. Es hört sich vielleicht etwas technisch an, aber keine Sorge, ich erkläre es Ihnen auf einfache Weise.
Lassen Sie uns zunächst kurz erläutern, was Kafka und Shed Locks sind. Kafka ist eine verteilte Streaming-Plattform, die für die Verarbeitung von Echtzeit-Datenfeeds sehr beliebt ist. Es ermöglicht Ihnen, Datensatzströme zu veröffentlichen, zu abonnieren, zu speichern und zu verarbeiten. Auf der anderen Seite,Schuppenschlossist ein großartiges Tool, wenn es darum geht, sicherzustellen, dass in einem verteilten System jeweils nur eine Instanz einer Aufgabe ausgeführt wird.
Warum sollten Sie also ein Shed Lock in einem Kafka-basierten System verwenden wollen? Nun, in einem Kafka-Setup gibt es oft mehrere Verbraucher, die Nachrichten aus Themen verarbeiten. Manchmal gibt es möglicherweise Aufgaben, die nicht gleichzeitig ausgeführt werden sollten. Sie könnten beispielsweise eine Aufgabe haben, die eine freigegebene Ressource basierend auf den Kafka-Nachrichten aktualisiert. Wenn mehrere Instanzen dieser Aufgabe gleichzeitig ausgeführt werden, kann es zu Dateninkonsistenzen oder anderen Problemen kommen. Hier kommt Shed Lock zum Einsatz.
Integration von Shed Lock mit Kafka
Der erste Schritt bei der Verwendung von Shed Lock mit einem Kafka-basierten System besteht darin, die erforderlichen Abhängigkeiten hinzuzufügen. Wenn Sie ein Java-Projekt verwenden, können Sie Ihrem Projekt die Shed Lock-Abhängigkeit hinzufügenpom.xmlwenn Sie Maven verwenden.
<dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.44.0</version> </dependency>
Nachdem Sie die Abhängigkeit hinzugefügt haben, müssen Sie den Sperranbieter konfigurieren. Es stehen verschiedene Arten von Sperranbietern zur Verfügung, z. B. datenbankbasiert oder Redis-basiert. Nehmen wir der Einfachheit halber an, dass wir einen datenbankbasierten Sperranbieter verwenden. Sie müssen in Ihrer Datenbank eine Tabelle einrichten, um die Sperrinformationen zu speichern.
CREATE TABLE shedlock( name VARCHAR(64), lock_until TIMESTAMP(3) NULL, Locked_at TIMESTAMP(3) NULL, Locked_by VARCHAR(255), PRIMARY KEY (Name) );
In Ihrer Spring Boot-Anwendung können Sie den Sperranbieter wie folgt konfigurieren:
import net.javacrumbs.shedlock.core.LockProvider; import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import 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() ); } }
Verwendung von Shed Lock in Kafka-Konsumenten
Nachdem wir nun das Shed Lock eingerichtet haben, wollen wir sehen, wie wir es in unseren Kafka-Konsumenten verwenden können. Angenommen, Sie haben einen Kafka-Konsumenten, der Nachrichten aus einem Thema verarbeitet und eine freigegebene Ressource aktualisiert. Sie können die verwenden@SchedulerLockAnmerkung, die von Shed Lock bereitgestellt wird, um sicherzustellen, dass jeweils nur eine Instanz der Aufgabe ausgeführt wird.
import net.javacrumbs.shedlock.spring.annotation.SchedulerLock; import org.springframework.kafka.annotation.KafkaListener; import 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) { // Verarbeiten Sie die Nachricht und aktualisieren Sie die gemeinsam genutzte Ressource System.out.println("Empfangene Nachricht: " + Nachricht); } }
Im obigen Code ist die@SchedulerLockAnnotation stellt sicher, dass dieverbrauchenMessageDie Methode ist für mindestens 1 Minute und höchstens 10 Minuten gesperrt. DerNameDas Attribut wird zur Identifizierung der Sperre verwendet.
Überlegungen und Best Practices
Bei der Verwendung von Shed Lock mit einem Kafka-basierten System sind einige Dinge zu beachten.


- Sperrdauer: Sie müssen das sorgfältig auswählen
lockAtMostForUndlockAtLeastForWerte. Wenn dielockAtMostForIst der Wert zu kurz, wird die Sperre möglicherweise aufgehoben, bevor die Aufgabe abgeschlossen ist, was dazu führt, dass mehrere Instanzen gleichzeitig ausgeführt werden. Wenn es zu lang ist, kann es zu unnötigen Verzögerungen kommen. - Fehlerbehandlung: Sie sollten über eine ordnungsgemäße Fehlerbehandlung verfügen. Wenn während der Ausführung der gesperrten Aufgabe ein Fehler auftritt, sollte die Sperre ordnungsgemäß aufgehoben werden. Andernfalls könnte es zu einem Stillstand kommen.
- Skalierbarkeit: Stellen Sie bei der Skalierung Ihres Kafka-Systems sicher, dass der Sperranbieter die erhöhte Last bewältigen kann. Wenn Sie beispielsweise einen datenbankbasierten Sperranbieter verwenden, stellen Sie sicher, dass Ihre Datenbank die gleichzeitigen Sperranforderungen verarbeiten kann.
Andere Arten von Schlössern für verschiedene Anwendungsfälle
WährendSchuppenschlosseignet sich hervorragend, um die Ausführung von Einzelinstanzaufgaben sicherzustellen. Es gibt jedoch auch andere Arten von Sperren, die in einem Kafka-basierten System nützlich sein können. Wenn Sie es beispielsweise mit physischen Schlössern an Türen oder Gehäusen in einem Rechenzentrum zu tun haben, in dem sich Ihre Kafka-Infrastruktur befindet, könnten Sie darüber nachdenkenVierteldrehschlossoderRundes Türschloss. Diese Schlösser können eine zusätzliche Sicherheitsebene für Ihre Ausrüstung bieten.
Abschluss
Durch die Verwendung von Shed Lock mit einem Kafka-basierten System können Sie Dateninkonsistenzen und andere Probleme vermeiden, die durch die gleichzeitige Ausführung von Aufgaben entstehen können. Indem Sie die oben beschriebenen Schritte befolgen, können Sie Shed Lock ganz einfach in Ihre Kafka-Anwendung integrieren. Wenn Sie am Kauf unserer hochwertigen Schuppenschlösser interessiert sind oder Fragen dazu haben, wie diese in Ihr Kafka-System passen, können Sie sich gerne an ein Beschaffungsgespräch wenden. Wir sind hier, um Ihnen zu helfen, die beste Lösung für Ihre Bedürfnisse zu finden.
Referenzen
- Spring Boot-Dokumentation
- Kafka-Dokumentation
- Shed Lock GitHub-Repository
