Jak używać Shed Lock w systemie opartym na Kafce?

Oct 29, 2025

Zostaw wiadomość

Amanda Li
Amanda Li
Jako analityk ds. Zrównoważonego rozwoju koncentruję się na wdrażaniu ekologicznych praktyk w naszych procesach produkcyjnych. W Lianhu zobowiązujemy się do minimalizacji naszego śladu środowiska.

Hej tam! Jestem dostawcą Shed Locks i dzisiaj chcę porozmawiać o tym, jak możesz używać Shed Locks w systemie opartym na Kafce. Może to brzmieć trochę technicznie, ale nie martw się, wyjaśnię ci to w prosty sposób.

Na początek przyjrzyjmy się szybko, czym są Kafka i Shed Locks. Kafka to rozproszona platforma do przesyłania strumieniowego, która jest bardzo popularna w obsłudze strumieni danych w czasie rzeczywistym. Umożliwia publikowanie, subskrybowanie, przechowywanie i przetwarzanie strumieni rekordów. Z drugiej strony,Zamek szopyto świetne narzędzie, jeśli chodzi o zapewnienie, że tylko jedna instancja zadania będzie uruchomiona w danym momencie w systemie rozproszonym.

Dlaczego więc miałbyś chcieć używać blokady Shed Lock w systemie opartym na Kafce? Cóż, w konfiguracji Kafki często wielu klientów przetwarza wiadomości z tematów. Czasami możesz mieć zadania, które nie powinny być uruchamiane jednocześnie. Na przykład możesz mieć zadanie, które aktualizuje udostępniony zasób na podstawie komunikatów Kafki. Jeśli jednocześnie zostanie uruchomionych wiele wystąpień tego zadania, może to prowadzić do niespójności danych lub innych problemów. Właśnie tam przydaje się Shed Lock.

Integracja blokady szopy z Kafką

Pierwszym krokiem w użyciu Shed Lock z systemem opartym na Kafce jest dodanie niezbędnych zależności. Jeśli używasz projektu Java, możesz dodać zależność Shed Lock do swojegopom.xmljeśli używasz Mavena.

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

Po dodaniu zależności należy skonfigurować dostawcę blokady. Dostępne są różne typy dostawców blokad, np. bazujący na bazie danych lub oparty na Redis. Dla uproszczenia załóżmy, że korzystamy z dostawcy blokad opartego na bazie danych. Będziesz musiał skonfigurować tabelę w swojej bazie danych, aby przechowywać informacje o blokadzie.

UTWÓRZ TABELĘ shedlock(nazwa VARCHAR(64), lock_until TIMESTAMP(3) NULL, zablokowana_at TIMESTAMP(3) NULL, zablokowana_by VARCHAR(255), KLUCZ PODSTAWOWY (nazwa) );

W aplikacji Spring Boot możesz skonfigurować dostawcę blokady w następujący sposób:

importuj net.javacrumbs.shedlock.core.LockProvider; importuj net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; importuj javax.sql.DataSource; @Configuration public class ShedLockConfig { @Bean public LockProvider lockProvider(DataSource dataSource) { zwróć nowy JdbcTemplateLockProvider( JdbcTemplateLockProvider.Configuration.builder() .withJdbcTemplate(nowy JdbcTemplate(dataSource)) .usingDbTime() .build() ); } }

Używanie blokady szopy u konsumentów Kafki

Teraz, gdy mamy już skonfigurowaną blokadę szopy, zobaczmy, jak możemy jej użyć u naszych konsumentów platformy Kafka. Załóżmy, że masz konsumenta platformy Kafka, który przetwarza wiadomości z tematu i aktualizuje udostępniony zasób. Możesz skorzystać z@SchedulerLockadnotacja dostarczona przez Shed Lock, aby upewnić się, że w danym momencie działa tylko jedno wystąpienie zadania.

importuj net.javacrumbs.shedlock.spring.annotation.SchedulerLock; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Service; @Service klasa publiczna KafkaConsumerService { @KafkaListener(topics = "twój - temat", groupId = "twoja - grupa - id") @SchedulerLock(name = "kafkaConsumerTask", lockAtMostFor = "PT10M", lockAtLeastFor = "PT1M") public void zużywaMessage(String komunikat) { // Przetwórz wiadomość i zaktualizuj udostępniony zasób System.out.println("Otrzymano wiadomość: " + wiadomość); } }

W powyższym kodzie@SchedulerLockadnotacja gwarantuje, żekonsumujWiadomośćmetoda jest zablokowana na co najmniej 1 minutę i maksymalnie 10 minut. Thenazwaatrybut służy do identyfikacji zamka.

Rozważania i najlepsze praktyki

Używając Shed Lock z systemem opartym na Kafce, należy pamiętać o kilku rzeczach.

21-62-2

  • Czas trwania blokady: Musisz dokładnie wybraćzablokujAtMostForIzablokuj przynajmniej dlawartości. JeślizablokujAtMostForwartość jest za krótka, blokada może zostać zwolniona przed zakończeniem zadania, co może spowodować jednoczesne uruchomienie wielu instancji. Jeśli będzie zbyt długi, może spowodować niepotrzebne opóźnienia.
  • Obsługa błędów: Powinieneś mieć odpowiednią obsługę błędów. Jeśli podczas wykonywania zablokowanego zadania wystąpi błąd, należy bezpiecznie zwolnić blokadę. W przeciwnym razie może to doprowadzić do sytuacji impasu.
  • Skalowalność: W miarę skalowania systemu Kafka upewnij się, że dostawca zamków jest w stanie obsłużyć zwiększone obciążenie. Na przykład, jeśli korzystasz z dostawcy blokady opartego na bazie danych, upewnij się, że baza danych może obsłużyć współbieżne żądania blokady.

Inne typy zamków do różnych zastosowań

ChwilaZamek szopydoskonale nadaje się do zapewnienia wykonania zadania w pojedynczej instancji, istnieją inne typy blokad, które mogą być przydatne w systemie opartym na Kafce. Na przykład, jeśli masz do czynienia z fizycznymi zamkami w drzwiach lub obudowach w centrum danych, w którym znajduje się Twoja infrastruktura Kafka, możesz rozważyćZamek ćwierćobrotowyLubOkrągły zamek do drzwi. Zamki te mogą zapewnić dodatkową warstwę bezpieczeństwa dla Twojego sprzętu.

Wniosek

Korzystanie z Shed Lock w systemie opartym na platformie Kafka może pomóc uniknąć niespójności danych i innych problemów, które mogą wyniknąć z jednoczesnego wykonywania zadań. Wykonując kroki opisane powyżej, możesz łatwo zintegrować Shed Lock z aplikacją Kafka. Jeśli jesteś zainteresowany zakupem naszych wysokiej jakości zamków do szop lub masz jakiekolwiek pytania dotyczące ich dopasowania do Twojego systemu Kafka, nie wahaj się skontaktować w celu omówienia zakupów. Jesteśmy tutaj, aby pomóc Ci znaleźć najlepsze rozwiązanie dla Twoich potrzeb.

Referencje

  • Dokumentacja rozruchu wiosennego
  • Dokumentacja Kafki
  • Repozytorium GitHub Shed Lock
Wyślij zapytanie