如何将数据从服务器放到Kinesis Stream

时间:2014-06-21 16:12:10

标签: java amazon-web-services rabbitmq amazon-kinesis

我是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中,数据会定期生成到服务器。 感谢

4 个答案:

答案 0 :(得分:3)

如果要拖尾某些文件,请尝试使用Fluentd。 http://www.fluentd.org/

亚马逊Kinesis有一个相当不错的插件。 https://github.com/awslabs/aws-fluent-plugin-kinesis

答案 1 :(得分:2)

所以看来你已经在使用...... http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/kinesis/AmazonKinesisClient.html

您想要的具体方法如下。

您需要流名称,记录和流密钥。 http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/kinesis/model/PutRecordResult.html

但似乎你有这一切吗?

然后你需要一个程序运行总是拖尾你的服务器日志文件,当有新行时它会推动它。

但是你的数据只会持续24小时。然后,您需要一个工作程序来使用数据并将其放在其他AWS资源中。

答案 2 :(得分:2)

您可以使用Amazon kinesis代理监控一组文件,他们可以将数据流式传输到kinesis。

http://docs.aws.amazon.com/streams/latest/dev/writing-with-agents.html

答案 3 :(得分:0)

如果您正在尝试提取日志文件,请尝试使用Fluentd。 Fluentd可以连续拖尾日志文件,并进行数据缓冲,加密,压缩和重试。

Fluentd的Kinesis插件由Amazon Web Services本身开发。