我正在尝试找出可以将数据写入 kinesis 的托管服务。通过这种方式,我需要我的消息至少可以传送到 kinesis 流。使用 SQS 写入 Kinesis 是推荐还是好主意。我正在寻找可以水平扩展的解决方案。
3 回答
根据您的经验和环境,有多种写入 Kinesis 的选项。
最直接的方法是直接调用 put-record API。您可以使用put-record一次写入一条记录,也可以将它们与put-records一起批处理。各种 SDK( Java、.NET、php、ruby、javascript、python ……)都支持这些 API 调用。
由于 Kinesis 最有用的用例之一是从数百万用户的移动设备或浏览器上收集信息,因此浏览器中有专门的 iOS、Android 和 JavaScript 移动 SDK。请参阅此处:http ://aws.amazon.com/mobile/sdk/ 。您可以使用这些 SDK 消除对 Kinesis 之外的摄取基础架构的需求。
其他一些选择是使用在运输日志中非常流行的工具,如 FluentD。在此处查看可以让您的生活更轻松的连接器:https ://github.com/awslabs/aws-fluent-plugin-kinesis
最近的另一个选择是使用Kinesis Producer Library (KPL),它增加了将许多事件聚合到一个事件中的能力,以将分片容量优化到极限。它还允许生产者异步写入 Kinesis,KPL 将处理阻塞、退休和其他导致延迟的方法。
log4j appender 也是一种流行的方式,可以将日志事件直接写入 kinesis,而开发人员只需付出最小的努力。有关更多详细信息,请参见此处:https ://github.com/awslabs/kinesis-log4j-appender
如果您从 HTTP 调用中获取资源,请尝试使用 Amazon API Gateway:http ://aws.amazon.com/api-gateway/
这是一篇关于功能的好文章:https ://aws.amazon.com/blogs/aws/amazon-api-gateway-build-and-run-scalable-application-backends/
您可以在 http 中发送 post 操作以将记录放入 kinesis:
POST / HTTP/1.1
Host: firehose.<region>.<domain>
Content-Length: <PayloadSizeBytes>
User-Agent: <UserAgentString>
Content-Type: application/x-amz-json-1.1
Authorization: <AuthParams>
Connection: Keep-Alive
X-Amz-Date: <Date>
X-Amz-Target: Firehose_20150804.PutRecord
{
"DeliveryStreamName": "some_delivery_stream",
"Record": {
"Data": "..."
}
}
https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecord.html