Setelah Resharding - Amazon Kinesis Data Streams

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Setelah 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.

Menunggu Streaming Menjadi Aktif Lagi

Setelah Anda memanggil operasi resharding, salah satu splitShard ataumergeShards, Anda harus menunggu streaming menjadi aktif kembali. Kode yang 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" ); }

Perutean Data, Persistensi Data, dan Status Shard setelah Reshard

Kinesis Data Streams adalah layanan streaming data real-time, yang berarti bahwa aplikasi Anda harus mengasumsikan 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. Dengan kata lain, pecahan induk tidak hilang ketika reshard terjadi. Mereka bertahan bersama dengan data yang mereka isi sebelum reshard. Rekaman data dalam pecahan induk dapat diakses menggunakan getShardIteratordan getRecords operasi di Kinesis Data Streams API, 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, lihatMengubah Periode Retensi Data.

Dalam proses resharding, pecahan induk bertransisi dari suatu OPEN keadaan ke keadaan ke negara CLOSED bagian. EXPIRED

  • BUKA: Sebelum operasi reshard, pecahan induk berada dalam OPEN status, yang berarti bahwa catatan data dapat ditambahkan ke pecahan dan diambil dari pecahan.

  • DITUTUP: 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.

  • KEDALUWARSA: 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. Panggilan getStreamDescription().getShards untuk menghitung pecahan dalam aliran tidak termasuk pecahan dalam EXPIRED pecahan daftar yang dikembalikan. Untuk informasi selengkapnya tentang periode retensi aliran, lihatMengubah 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.