我是 Kinesis 的新手。阅读我发现的文档,我可以创建 Kinesis Stream 以从 Producer 获取数据。然后使用 KCL 将从 Stream 中读取此数据以进行进一步处理。我了解如何通过实现 IRecordProcessor 来编写 KCL 应用程序。
然而,我仍然不清楚如何将数据放在 Kinesis 流上的第一阶段。我们是否有一些 AWS API 需要实施才能实现这一点。
场景:我有一台服务器,它不断地从文件夹中的各种来源获取数据。每个文件夹都包含文本文件,其行包含进一步分析工作所需的属性。我必须将所有这些数据推送到 Kinesis Stream。
我需要如下代码,类 putData 方法将用于在 Kinesis 流中输出
public class Put {
AmazonKinesisClient kinesisClient;
Put()
{
String accessKey = "My Access Key here" ;
String secretKey = "My Secret Key here" ;
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
kinesisClient = new AmazonKinesisClient(credentials);
kinesisClient.setEndpoint("kinesis.us-east-1.amazonaws.com", "kinesis", "us-east-1");
System.out.println("starting the Put Application");
}
public void putData(String fileContent,String session) throws Exception
{
final String myStreamName = "ClickStream";
PutRecordRequest putRecordRequest = new PutRecordRequest();
putRecordRequest.setStreamName(myStreamName);
String putData = fileContent;
putRecordRequest.setData(ByteBuffer.wrap(putData.getBytes()));
putRecordRequest.setPartitionKey("session"+session);
PutRecordResult putRecordResult = kinesisClient.putRecord(putRecordRequest);
System.out.println("Successfully putrecord, partition key : " + putRecordRequest.getPartitionKey()
+ ", ShardID : " + putRecordResult.getShardId());
System.out.println(fileContent);
System.out.println("Sequence Number: "+putRecordResult.getSequenceNumber());
System.out.println("Data has been PUT successfully");
}
}
但是从服务器的源文件夹中读取文件,然后我应该使用什么设计来调用 putData 以获取 Kinesis 流上的记录。我是否需要无限循环并读取所有文件,然后执行此操作或某些框架会更好地做到这一点,同时兼顾容错性和单点故障。任何帮助将不胜感激。
简而言之:我需要一种更好的技术来将定期生成的数据放到 Kinesis Stream 中,这些数据会定期生成到服务器。谢谢