我有Kinesis Stream捕获的事件。我希望将所有事件放在S3上的特定文件夹结构中。我想创建一个带有日期戳的文件夹,就像6月15日的所有事件应该进入该文件夹一样,6月16日之后新文件夹应该来挑选事件等等。
作为Kinesis的新手我正在使用文档,我发现有连接器框架,其中S3Emitter与配置一起使用来选择需要发出数据的S3位置。但是有人可以建议我如何维护用于在日期文件夹中捕获事件日期的文件夹结构?
答案 0 :(得分:7)
我找到了解决此问题的方法,并在此处发布了答案: https://github.com/awslabs/amazon-kinesis-connectors/issues/24
以下是答案:
通过对示例代码进行以下更改很容易实现:
在S3sample.properties中:
createS3Bucket = true
在S3Emitter.java中:
/* 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;
}
}
希望这有帮助!
答案 1 :(得分:4)
目前,您正在查找的功能S3Emitter中Amazon Kinesis暂不可用,而只是作为根据输入数据量刷新的缓冲区,请参阅RESP。 comment:
IEmitter的这种实现用于存储Kinesis中的文件 在S3流。 [...] 当缓冲区已满时,此类的emit方法 将缓冲区的内容作为一个文件添加到S3。 文件名是 从记录的第一个和最后一个序列号生成 包含在该文件中的短划线。 [...] [强调我的]
此外,Kinesis没有事件的第一级日期概念(分别为数据记录),而只处理序列号,因此您需要添加resp。应用程序级别的日期处理,请参阅Amazon Kinesis Terminology中的数据记录部分:
数据记录是存储在Amazon Kinesis流中的数据单位。 数据记录由序列号,分区键和数据blob 组成,这是一个未解释的,不可变的字节序列。 Amazon Kinesis服务不会以任何方式检查,解释或更改blob中的数据。 [...] [强调我的]
答案 2 :(得分:1)
自2014年起,AWS提供了新的解决方案。尤其是Kinesis Firehose,它完成了这项工作。 您只需使用this lambda将Kinesis流中的数据发送到Kinesis Firehose,然后只需点击几下即可创建firehose。