Hai! Saya pemasok Shed Locks, dan hari ini saya ingin mengobrol tentang bagaimana Anda dapat menggunakan Shed Locks dalam sistem berbasis Kafka. Ini mungkin terdengar agak teknis, tapi jangan khawatir, saya akan menjelaskannya untuk Anda dengan cara yang sederhana.
Pertama, mari kita bahas apa itu Kafka dan Shed Locks. Kafka adalah platform streaming terdistribusi yang sangat populer untuk menangani umpan data waktu nyata. Ini memungkinkan Anda untuk menerbitkan, berlangganan, menyimpan, dan memproses aliran rekaman. Di sisi lain,Kunci Gudangadalah alat yang hebat untuk memastikan bahwa hanya satu tugas yang berjalan pada satu waktu dalam sistem terdistribusi.
Jadi, mengapa Anda ingin menggunakan Shed Lock dalam sistem berbasis Kafka? Nah, dalam pengaturan Kafka, Anda sering kali memiliki banyak konsumen yang memproses pesan dari suatu topik. Terkadang, Anda mungkin memiliki tugas yang tidak boleh dijalankan secara bersamaan. Misalnya, Anda dapat memiliki tugas yang memperbarui sumber daya bersama berdasarkan pesan Kafka. Jika beberapa contoh tugas ini dijalankan secara bersamaan, hal ini dapat menyebabkan inkonsistensi data atau masalah lainnya. Di situlah Shed Lock berguna.
Mengintegrasikan Shed Lock dengan Kafka
Langkah pertama dalam menggunakan Shed Lock dengan sistem berbasis Kafka adalah menambahkan dependensi yang diperlukan. Jika Anda menggunakan proyek Java, Anda dapat menambahkan ketergantungan Shed Lock ke proyek Andapom.xmljika Anda menggunakan Maven.
<dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.44.0</version> </dependency>
Setelah Anda menambahkan ketergantungan, Anda perlu mengonfigurasi penyedia kunci. Ada berbagai jenis penyedia kunci yang tersedia, seperti berbasis database atau berbasis Redis. Untuk mempermudah, anggaplah kita menggunakan penyedia kunci berbasis database. Anda harus menyiapkan tabel di database Anda untuk menyimpan informasi kunci.
CREATE TABLE shedlock( nama VARCHAR(64), lock_until TIMESTAMP(3) NULL,locked_at TIMESTAMP(3) NULL,locked_by VARCHAR(255), PRIMARY KEY (nama) );
Di aplikasi Spring Boot, Anda dapat mengonfigurasi penyedia kunci seperti ini:
impor 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; impor javax.sql.DataSource; @Konfigurasi kelas publik ShedLockConfig { @Bean public LockProvider lockProvider(DataSource dataSource) { kembalikan JdbcTemplateLockProvider baru( JdbcTemplateLockProvider.Configuration.builder() .withJdbcTemplate(new JdbcTemplate(dataSource)) .usingDbTime() .build() ); } }
Menggunakan Shed Lock di Konsumen Kafka
Sekarang setelah kita menyiapkan Shed Lock, mari kita lihat bagaimana kita dapat menggunakannya di konsumen Kafka. Misalkan Anda memiliki konsumen Kafka yang memproses pesan dari suatu topik dan memperbarui sumber daya bersama. Anda dapat menggunakan@SchedulerLockanotasi yang disediakan oleh Shed Lock untuk memastikan bahwa hanya satu contoh tugas yang berjalan pada satu waktu.
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 mengkonsumsiMessage(String message) {// Memproses pesan dan memperbarui sumber daya bersama System.out.println("Pesan yang diterima: " + pesan); } }
Dalam kode di atas,@SchedulerLockanotasi memastikan bahwakonsumsiPesanmetode terkunci minimal 1 menit dan maksimal 10 menit. Itunamaatribut digunakan untuk mengidentifikasi kunci.
Pertimbangan dan Praktik Terbaik
Saat menggunakan Shed Lock dengan sistem berbasis Kafka, ada beberapa hal yang perlu diperhatikan.


- Durasi Kunci: Anda harus hati-hati memilih
lockAtMostForDanlockAtLeastFornilai-nilai. JikalockAtMostFornilainya terlalu pendek, kunci mungkin dilepaskan sebelum tugas selesai, menyebabkan beberapa instance berjalan pada waktu yang sama. Jika terlalu lama, hal ini dapat menyebabkan penundaan yang tidak perlu. - Penanganan Kesalahan: Anda harus memiliki penanganan kesalahan yang tepat. Jika terjadi kesalahan selama pelaksanaan tugas yang terkunci, kunci harus dilepaskan dengan baik. Jika tidak, hal ini dapat menyebabkan situasi kebuntuan.
- Skalabilitas: Seiring skala sistem Kafka Anda, pastikan penyedia kunci dapat menangani peningkatan beban. Misalnya, jika Anda menggunakan penyedia kunci berbasis database, pastikan database Anda dapat menangani permintaan kunci secara bersamaan.
Jenis Kunci Lainnya untuk Kasus Penggunaan Berbeda
KetikaKunci Gudangsangat bagus untuk memastikan eksekusi tugas instans tunggal, ada jenis kunci lain yang mungkin berguna dalam sistem berbasis Kafka. Misalnya, jika Anda berurusan dengan kunci fisik pada pintu atau penutup di pusat data tempat infrastruktur Kafka Anda berada, Anda dapat mempertimbangkanKunci Seperempat PutaranatauKunci Pintu Bulat. Kunci ini dapat memberikan lapisan keamanan ekstra untuk peralatan Anda.
Kesimpulan
Menggunakan Shed Lock dengan sistem berbasis Kafka dapat membantu Anda menghindari inkonsistensi data dan masalah lain yang dapat timbul dari pelaksanaan tugas secara bersamaan. Dengan mengikuti langkah-langkah yang diuraikan di atas, Anda dapat dengan mudah mengintegrasikan Shed Lock ke dalam aplikasi Kafka Anda. Jika Anda tertarik untuk membeli Kunci Gudang kami yang berkualitas tinggi atau memiliki pertanyaan tentang bagaimana kunci tersebut dapat masuk ke dalam sistem Kafka Anda, jangan ragu untuk menghubungi diskusi pengadaan. Kami di sini untuk membantu Anda menemukan solusi terbaik untuk kebutuhan Anda.
Referensi
- Dokumentasi Boot Musim Semi
- Dokumentasi Kafka
- Repositori GitHub Kunci Gudang
