2014-06-15 13 views
7

Kinesis Akışı tarafından yakalanan etkinliğim var. Tüm olayları S3'te belirli bir klasör yapısına koymak istiyorum. 15 Haziran tüm olayları gibi tarih damgası ile bir klasör yapmak istiyorum ve bu klasörde gitmeli ve 16 hazirandan sonra yeni klasör olayları seçmek için gelmeli.Kinesis akışı S3 kabı içinde belirli bir klasör yapısında S3 depolama birimine nasıl depolanır

Kinesis için yeni olmakla birlikte yalnızca belgelere gidiyorum ve S3Emitter'in verilerin yayılması gereken S3 konumunu almak için yapılandırma ile birlikte kullanıldığı bağlayıcı bir çerçeve olduğunu gördüm. Birisi nasıl devam edeceğimi önerebilir Bir tarih bilgisi klasöründe olay tarihini yakalamak için bir klasör yapısı?

cevap

4

Aradığınız işlevsellik ne yazık ki Amazon Kinesis için S3Emitter adresinde mevcut değil, sadece giriş verileri miktarına göre temizlenen bir arabellek olarak çalışır, bkz. comment:

IEmitter Bu uygulama S3 bir Kinesis akışından dosyalarını depolamak için kullanılır. [...] Arabellek doluyken, bu sınıfın yayım yöntemi arabelleğin içeriğini S3'e tek dosya olarak ekler. Dosya adı, numaralı bir tire ile ayrılmış dosyada bulunan kayıtlarının ilk ve son sıra numaralarından oluşturulan biçimindedir. [...] [vurgu benim] Ayrıca

, Kinesis, etkinlikler için birinci seviye tarih kavramını (sırasıyla. Veri Kayıtları), sıra numaraları ile yerine yalnızca fırsatları yok 'sana bu yüzden d eklemek gerekir. Uygulama düzeyinde ele tarih, Amazon Kinesis Terminology içinde bölüm Veri Kaydı bkz:

Veri kayıtları bir Amazon Kinesis akışında depolanan verilerin birimlerdir. Veri kayıtları, bir dizi numarası, bir bölüm anahtarı ve bir yorumlanmamış, değişmez bayt dizisi olan bir veri bloğu'dan oluşur. Amazon Kinesis hizmeti, blobdaki verileri hiçbir şekilde denetlemez, yorumlamaz veya değiştirmez. [...] [vurgu benim]

7

Bu sorunu çözmek için bir yol bulmuş ve burada cevap gönderen:

Öyle: Burada https://github.com/awslabs/amazon-kinesis-connectors/issues/24

tekrar cevaptır S3sample.properties yılında

:

createS3Bucket = true 
örnek kod için aşağıdaki değişikliklerle elde etmek kolay S3Emitter.java yılında

: Bu yardımcı olur

/* Add the required imports */ 

import java.text.SimpleDateFormat; 
import java.util.Calendar; 

public class S3Emitter implements IEmitter { 

    //create date_bucket variable 

    protected final String date_bucket = new SimpleDateFormat("yyyy_MM_dd_HH").format(Calendar.getInstance().getTime()); 

    public S3Emitter(KinesisConnectorConfiguration configuration) { 
     s3Bucket = configuration.S3_BUCKET + "/" + date_bucket; 
    } 
} 

Umut!

1

2014'ten beri AWS yeni bir çözüm sunuyor. Ve özellikle Kinesis Firehose, bu çok iş yapıyor. Sadece Kinesis akışından Kinesis Firehose'a this lambda ile veri göndermek ve birkaç tıklamayla firehose oluşturmak zorundasınız.