我正在尝试使用alpakka kinesis connector向Kinesis Stream发送消息,但我没有成功。我尝试了下面的代码,但我的流中没有任何内容。
implicit val sys = ActorSystem()
implicit val mat = ActorMaterializer()
implicit val kinesisAsync: AmazonKinesisAsync = AmazonKinesisAsyncClientBuilder.defaultClient()
val debug = Flow[PutRecordsRequestEntry].map { reqEntry =>
println(reqEntry)
reqEntry
}
val entry = new PutRecordsRequestEntry()
.withData(ByteBuffer.wrap("Hello World".getBytes))
.withPartitionKey(Random.nextInt.toString)
Source.tick(1.second, 1.second, entry).to(KinesisSink("myStreamName", KinesisFlowSettings.defaultInstance)).run()
// 2) Source.tick(1.second, 1.second,entry).via(debug).to(KinesisSink("myStreamName", inesisFlowSettings.defaultInstance)).run()
Sink.foreach(println)
代替KinesisSink
每1秒打印PutRecordsRequestEntry
=>预期KinesisSink
,条目仅生成一次。我做错了什么?
我正在使用KinesisSource
检查我的流并且正在阅读(使用其他流测试)
AWS Kinesis的监控仪表板也不会显示任何PUT请求。
注1:我尝试启用alpakka的调试日志,但没有效果
<logger name="akka.stream.alpakka.kinesis" level="DEBUG"/>
在我的logback.xml
+根级调试
答案 0 :(得分:3)
下面要考虑的一些故障排除步骤 - 我希望他们有所帮助。
我怀疑您可能缺少Kinesis客户端的凭据和/或区域配置。
Kinesis Firehose
Kinesis制作人库(Alpakka似乎正在使用的)与Kinesis Firehose不兼容。如果您正在尝试写信给Firehose,那么这不会起作用。
应用程序记录
您可能希望为Kinesis Producer Library启用日志记录,而不仅仅是在Alpakka本身。相关文档可在此处获取:
Configuring the Kinesis Producer Library
Configuration Defaults for Kinesis Producer Library
AWS Side Logging
AWS CloudTrail自动为Kinesis流开箱即用,默认情况下AWS将为您保留90天的CloudTrail日志。
https://docs.aws.amazon.com/streams/latest/dev/logging-using-cloudtrail.html
您可以使用CloudTrail日志查看您的应用程序代表您向Kinesis发出的API调用。请求出现时通常会有适度的延迟 - 但是由于IAM权限不足或AWS资源配置存在其他问题,这会让您知道请求是否失败。
检查SDK身份验证
Kinesis客户端将使用DefaultAWSCredentialsProviderChain
凭据提供程序向AWS发出请求。
您需要确保提供具有IAM权限的有效AWS凭证,以便向Kinesis提出这些请求。如果您的代码在AWS上运行,则提供应用程序凭据的首选方法是使用IAM Roles(在实例启动时指定)。
在代码中构建客户端时,还需要指定AWS区域。使用application.properties
进行配置,或者如果您的应用程序是位于单个区域的CloudFormation堆栈的一部分 - 使用instance metadata服务在您的代码在AWS上运行时检索当前区域。 / p>
答案 1 :(得分:1)
问题是对流上的操作的访问被拒绝/许可。
我必须添加用于记录的akka actor配置
akka {
loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = "DEBUG"
stdout-loglevel = "DEBUG"
logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
logger-startup-timeout = "30s"
}
查看调试行,我实际上是在每个阶段的调试和步骤中运行。
在IAM角色中需要“PutRecord s ”权限