จะใช้ Shed Lock กับระบบที่ใช้ Kafka ได้อย่างไร

Oct 29, 2025

ฝากข้อความ

Amanda Li
Amanda Li
ในฐานะนักวิเคราะห์ความยั่งยืนฉันมุ่งเน้นไปที่การใช้แนวทางปฏิบัติที่เป็นมิตรกับสิ่งแวดล้อมในกระบวนการผลิตของเรา ที่ Lianhu เรามุ่งมั่นที่จะลดรอยเท้าด้านสิ่งแวดล้อมของเราให้น้อยที่สุด

เฮ้! ฉันเป็นซัพพลายเออร์ของ Shed Locks และวันนี้ฉันต้องการพูดคุยเกี่ยวกับวิธีที่คุณสามารถใช้ Shed Locks ในระบบที่ใช้ Kafka อาจฟังดูเป็นเทคนิคเล็กน้อย แต่ไม่ต้องกังวล ฉันจะแจกแจงรายละเอียดให้คุณด้วยวิธีง่ายๆ

ก่อนอื่น เรามาดูกันก่อนว่า Kafka และ Shed Locks คืออะไร Kafka เป็นแพลตฟอร์มสตรีมมิ่งแบบกระจายที่ได้รับความนิยมอย่างมากในการจัดการฟีดข้อมูลแบบเรียลไทม์ ช่วยให้คุณสามารถเผยแพร่ สมัครสมาชิก จัดเก็บ และประมวลผลสตรีมของบันทึกได้ ในทางกลับกันเพิงล็อคเป็นเครื่องมือที่ดีเยี่ยมในการตรวจสอบให้แน่ใจว่างานหนึ่งอินสแตนซ์เท่านั้นที่ทำงานพร้อมกันในระบบแบบกระจาย

แล้วทำไมคุณถึงต้องการใช้ Shed Lock ในระบบที่ใช้ Kafka? ในการตั้งค่า Kafka คุณมักจะมีผู้บริโภคหลายรายกำลังประมวลผลข้อความจากหัวข้อต่างๆ บางครั้ง คุณอาจมีงานที่ไม่ควรทำงานพร้อมกัน ตัวอย่างเช่น คุณอาจมีงานที่อัปเดตทรัพยากรที่ใช้ร่วมกันตามข้อความ Kafka หากงานนี้ทำงานหลายอินสแตนซ์พร้อมกัน อาจทำให้ข้อมูลไม่สอดคล้องกันหรือเกิดปัญหาอื่นๆ นั่นคือจุดที่ Shed Lock มีประโยชน์

การรวม Shed Lock เข้ากับ Kafka

ขั้นตอนแรกในการใช้ Shed Lock กับระบบที่ใช้ Kafka คือการเพิ่มการขึ้นต่อกันที่จำเป็น หากคุณกำลังใช้โปรเจ็กต์ Java คุณสามารถเพิ่มการพึ่งพา Shed Lock ให้กับคุณได้pom.xmlหากคุณใช้ Maven

<การพึ่งพา> <groupId>net.javaccrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.44.0</version> </dependency>

เมื่อคุณเพิ่มการขึ้นต่อกันแล้ว คุณจะต้องกำหนดค่าผู้ให้บริการล็อค มีผู้ให้บริการล็อคหลายประเภทให้เลือก เช่น อิงฐานข้อมูลหรืออิง Redis เพื่อความง่าย สมมติว่าเรากำลังใช้ผู้ให้บริการล็อคที่ใช้ฐานข้อมูล คุณจะต้องตั้งค่าตารางในฐานข้อมูลของคุณเพื่อเก็บข้อมูลการล็อค

สร้างตาราง shedlock (ชื่อ VARCHAR (64), lock_until TIMESTAMP (3) NULL, lock_at TIMESTAMP (3) NULL, lock_by VARCHAR (255), PRIMARY KEY (ชื่อ) );

ในแอปพลิเคชัน Spring Boot คุณสามารถกำหนดค่าผู้ให้บริการล็อคได้ดังนี้:

นำเข้า net.javaccrumbs.shedlock.core.LockProvider; นำเข้า net.javaccrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider; นำเข้า org.springframework.context.annotation.Bean; นำเข้า org.springframework.context.annotation.Configuration; นำเข้า org.springframework.jdbc.core.JdbcTemplate; นำเข้า javax.sql.DataSource; @Configuration คลาสสาธารณะ ShedLockConfig { @Bean public LockProvider lockProvider (DataSource dataSource) { ส่งคืน JdbcTemplateLockProvider ใหม่ ( JdbcTemplateLockProvider.Configuration.builder () .withJdbcTemplate (ใหม่ JdbcTemplate (dataSource)) .usingDbTime () .build () ); -

การใช้ Shed Lock ในผู้บริโภค Kafka

ตอนนี้เราได้ตั้งค่า Shed Lock แล้ว มาดูกันว่าเราจะนำไปใช้กับผู้บริโภค Kafka ได้อย่างไร สมมติว่าคุณมีผู้ใช้ Kafka ที่ประมวลผลข้อความจากหัวข้อและอัปเดตทรัพยากรที่ใช้ร่วมกัน คุณสามารถใช้@SchedulerLockคำอธิบายประกอบที่จัดทำโดย Shed Lock เพื่อให้แน่ใจว่างานจะทำงานครั้งละหนึ่งอินสแตนซ์เท่านั้น

นำเข้า net.javaccrumbs.shedlock.spring.annotation.SchedulerLock; นำเข้า org.springframework.kafka.annotation.KafkaListener; นำเข้า org.springframework.stereotype.Service; @Service public class KafkaConsumerService { @KafkaListener(topics = "your - topic", groupId = "your - group - id") @SchedulerLock(name = "kafkaConsumerTask", lockAtMostFor = "PT10M", lockAtLeastFor = "PT1M") โมฆะสาธารณะบริโภคข้อความ (ข้อความสตริง) { // ประมวลผลข้อความและอัปเดตทรัพยากรที่ใช้ร่วมกัน System.out.println("ข้อความที่ได้รับ: " + ข้อความ); -

ในโค้ดด้านบนนี้@SchedulerLockคำอธิบายประกอบทำให้มั่นใจได้ว่าบริโภคข้อความวิธีการนี้จะถูกล็อคไว้อย่างน้อย 1 นาที และสูงสุด 10 นาที ที่ชื่อคุณลักษณะที่ใช้ในการระบุการล็อค

ข้อควรพิจารณาและแนวปฏิบัติที่ดีที่สุด

เมื่อใช้ Shed Lock กับระบบที่ใช้ Kafka มีบางสิ่งที่ต้องคำนึงถึง

21-62-2

  • ล็อคระยะเวลา: คุณต้องระมัดระวังในการเลือกล็อคAtMostForและล็อคอย่างน้อยที่สุดสำหรับค่านิยม ถ้าล็อคAtMostForค่าสั้นเกินไป การล็อกอาจถูกปล่อยก่อนที่งานจะเสร็จสิ้น ส่งผลให้หลายอินสแตนซ์ทำงานพร้อมกัน หากยาวเกินไปอาจทำให้เกิดความล่าช้าโดยไม่จำเป็น
  • การจัดการข้อผิดพลาด: คุณควรมีการจัดการข้อผิดพลาดที่เหมาะสม หากมีข้อผิดพลาดเกิดขึ้นระหว่างการดำเนินการงานที่ถูกล็อค การล็อคควรได้รับการปลดล็อคอย่างสง่างาม มิฉะนั้นอาจนำไปสู่สถานการณ์หยุดชะงักได้
  • ความสามารถในการขยายขนาด: เมื่อระบบ Kafka ของคุณปรับขนาด ตรวจสอบให้แน่ใจว่าผู้ให้บริการล็อคสามารถรองรับโหลดที่เพิ่มขึ้นได้ ตัวอย่างเช่น หากคุณใช้ผู้ให้บริการล็อกตามฐานข้อมูล ตรวจสอบให้แน่ใจว่าฐานข้อมูลของคุณสามารถจัดการกับคำขอล็อกที่เกิดขึ้นพร้อมกันได้

ล็อคประเภทอื่นสำหรับการใช้งานที่แตกต่างกัน

ในขณะที่เพิงล็อคเหมาะอย่างยิ่งสำหรับการดำเนินการงานที่มีอินสแตนซ์เดียว นอกจากนี้ยังมีการล็อกประเภทอื่นๆ ที่อาจมีประโยชน์ในระบบที่ใช้ Kafka ตัวอย่างเช่น หากคุณกำลังเผชิญกับการล็อคแบบกายภาพบนประตูหรือกรอบในศูนย์ข้อมูลที่เป็นที่ตั้งของโครงสร้างพื้นฐานของ Kafka คุณอาจพิจารณาล็อคเลี้ยวควอเตอร์หรือล็อคประตูกลม- ล็อคเหล่านี้สามารถเพิ่มระดับความปลอดภัยให้กับอุปกรณ์ของคุณได้

บทสรุป

การใช้ Shed Lock กับระบบที่ใช้ Kafka สามารถช่วยคุณหลีกเลี่ยงความไม่สอดคล้องกันของข้อมูลและปัญหาอื่นๆ ที่อาจเกิดขึ้นจากการปฏิบัติงานไปพร้อมๆ กัน ด้วยการทำตามขั้นตอนที่อธิบายไว้ข้างต้น คุณสามารถรวม Shed Lock เข้ากับแอปพลิเคชัน Kafka ของคุณได้อย่างง่ายดาย หากคุณสนใจที่จะซื้อ Shed Locks คุณภาพสูงของเรา หรือมีคำถามใดๆ เกี่ยวกับวิธีการติดตั้งเข้ากับระบบ Kafka ของคุณ โปรดติดต่อเพื่อหารือเกี่ยวกับการจัดซื้อจัดจ้าง เราพร้อมช่วยคุณค้นหาโซลูชันที่ดีที่สุดสำหรับความต้องการของคุณ

อ้างอิง

  • เอกสาร Spring Boot
  • เอกสารคาฟคา
  • พื้นที่เก็บข้อมูล Shed Lock GitHub
ส่งคำถาม