Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Selesaikan tindakan resharding
Setelah segala jenis prosedur resharding di Amazon Kinesis Data Streams, dan sebelum pemrosesan rekaman normal dilanjutkan, prosedur dan pertimbangan lain diperlukan. Bagian berikut menjelaskan ini.
Topik
Tunggu streaming menjadi aktif kembali
Setelah Anda memanggil operasi resharding, salah satu splitShard
ataumergeShards
, Anda harus menunggu streaming menjadi aktif kembali. Kode yang akan digunakan sama seperti ketika Anda menunggu aliran menjadi aktif setelah membuat aliran. Kode itu adalah sebagai berikut:
DescribeStreamRequest describeStreamRequest = new DescribeStreamRequest(); describeStreamRequest.setStreamName( myStreamName ); long startTime = System.currentTimeMillis(); long endTime = startTime + ( 10 * 60 * 1000 ); while ( System.currentTimeMillis() < endTime ) { try { Thread.sleep(20 * 1000); } catch ( Exception e ) {} try { DescribeStreamResult describeStreamResponse = client.describeStream( describeStreamRequest ); String streamStatus = describeStreamResponse.getStreamDescription().getStreamStatus(); if ( streamStatus.equals( "ACTIVE" ) ) { break; } // // sleep for one second // try { Thread.sleep( 1000 ); } catch ( Exception e ) {} } catch ( ResourceNotFoundException e ) {} } if ( System.currentTimeMillis() >= endTime ) { throw new RuntimeException( "Stream " + myStreamName + " never went active" ); }
Pertimbangkan perutean data, persistensi data, dan status pecahan setelah reshard
Kinesis Data Streams adalah layanan streaming data real-time. Aplikasi Anda harus berasumsi bahwa data mengalir terus menerus melalui pecahan di aliran Anda. Saat Anda melakukan reshard, catatan data yang mengalir ke pecahan induk dirutekan ulang untuk mengalir ke pecahan anak berdasarkan nilai kunci hash yang dipetakan oleh kunci partisi rekam data. Namun, catatan data apa pun yang ada di pecahan induk sebelum reshard tetap berada di pecahan tersebut. Pecahan induk tidak hilang saat reshard terjadi. Mereka bertahan bersama dengan data yang mereka isi sebelum reshard. Catatan data dalam pecahan induk dapat diakses menggunakan getShardIteratordan getRecords operasi di Kinesis Data API Streams, atau melalui Perpustakaan Klien Kinesis.
catatan
Catatan data dapat diakses sejak ditambahkan ke aliran ke periode retensi saat ini. Ini berlaku terlepas dari perubahan apa pun pada pecahan dalam aliran selama periode waktu tersebut. Untuk informasi selengkapnya tentang periode retensi aliran, lihatUbah periode retensi data.
Dalam proses resharding, pecahan induk bertransisi dari suatu OPEN
keadaan ke keadaan ke negara CLOSED
bagian. EXPIRED
-
OPEN: Sebelum operasi reshard, pecahan induk dalam
OPEN
keadaan, yang berarti bahwa catatan data dapat ditambahkan ke pecahan dan diambil dari pecahan. -
CLOSED: Setelah operasi reshard, pecahan induk bertransisi ke status.
CLOSED
Ini berarti bahwa catatan data tidak lagi ditambahkan ke pecahan. Catatan data yang akan ditambahkan ke pecahan ini sekarang ditambahkan ke pecahan anak sebagai gantinya. Namun, catatan data masih dapat diambil dari pecahan untuk waktu yang terbatas. -
EXPIRED: Setelah periode retensi streaming kedaluwarsa, semua catatan data di pecahan induk telah kedaluwarsa dan tidak lagi dapat diakses. Pada titik ini, pecahan itu sendiri beralih ke suatu
EXPIRED
keadaan. PanggilangetStreamDescription().getShards
untuk menghitung pecahan dalam aliran tidak termasuk pecahan dalamEXPIRED
pecahan daftar yang dikembalikan. Untuk informasi selengkapnya tentang periode retensi aliran, lihatUbah periode retensi data.
Setelah reshard terjadi dan aliran kembali dalam ACTIVE
keadaan, Anda dapat segera mulai membaca data dari pecahan anak. Namun, pecahan induk yang tersisa setelah reshard mungkin masih berisi data yang belum Anda baca yang ditambahkan ke aliran sebelum reshard. Jika Anda membaca data dari pecahan anak sebelum membaca semua data dari pecahan induk, Anda dapat membaca data untuk kunci hash tertentu di luar urutan yang diberikan oleh nomor urut catatan data. Oleh karena itu, dengan asumsi bahwa urutan data itu penting, Anda harus, setelah reshard, selalu terus membaca data dari pecahan induk hingga habis. Hanya dengan begitu Anda harus mulai membaca data dari pecahan anak. Ketika getRecordsResult.getNextShardIterator
kembalinull
, ini menunjukkan bahwa Anda telah membaca semua data di pecahan induk. Jika Anda membaca data menggunakan Perpustakaan Klien Kinesis, Anda mungkin tidak menerima data secara berurutan setelah reshard terjadi.