首页 > 解决方案 > 获取服务:AmazonKinesis;状态码:502 使用 apache-flink 和 localstack Kinesis

问题描述

我的本地设置包括local apache-flink(通过 brew 安装)并localstack运行 Kinesis 服务。

我的 docker-compose 有

  localstack:
    image: localstack/localstack:0.10.7
    environment:
      - SERVICES=kinesis
    ports:
      - "4568:4568"

和我的 Kinesis 消费者:

kinesisConsumerConfig.setProperty(ConsumerConfigConstants.AWS_ACCESS_KEY_ID, "123");
kinesisConsumerConfig.setProperty(ConsumerConfigConstants.AWS_SECRET_ACCESS_KEY, "123");
kinesisConsumerConfig.setProperty(ConsumerConfigConstants.AWS_ENDPOINT, "http://localhost:4568");

但是当我运行 Flink 程序时,我得到了这个错误:

原因:org.apache.flink.kinesis.shaded.com.amazonaws.services.kinesis.model.AmazonKinesisException:null(服务:AmazonKinesis;状态代码:502;错误代码:null;请求 ID:null)

仅在使用时发生localstack。如果我在我的 AWS 账户上连接到我的 Kinesis 流,它就可以完美运行。

标签: apache-flinkerror-codelocalstack

解决方案


在将 FlinkKinesisConsumer 添加为源之前添加这些行:

System.setProperty("com.amazonaws.sdk.disableCbor", "true") System.setProperty("org.apache.flink.kinesis.shaded.com.amazonaws.sdk.disableCbor", "true")

这与导出 ENV 变量的效果相同,但在代码中使用它可以减少设置环境所花费的时间。


推荐阅读