多个FlinkKinesisProducer作为数据流的接收器

时间:2020-11-06 01:52:06

标签: apache-flink flink-streaming amazon-kinesis

我在不同帐户中具有Flink应用程序的多级KDA。我有一个用例,需要查看记录内容以确定将数据推送到哪个AWS账户(该账户中的运动流)。

link显示了可以根据记录内容选择流名称的可能性,我需要支持多个kinesis生产者来推送到差异AWS账户。

有帮助吗?

1 个答案:

答案 0 :(得分:0)

作为替代方案,您可以使用Side Outputs为其他AWS账户配置专用接收器(因此,FlinkKinesisProducer)。

您可以按照以下步骤进行操作:

val stream: DataStream[T] = ...
val account1OutputTag = OutputTag[T]("aws-account-1-output")
...
val accountNOutputTag = OutputTag[T]("aws-account-N-output")

val mainDataStream = stream
  .process(new ProcessFunction[T, T] {
    override def processElement(
        value: T,
        ctx: ProcessFunction[T, T]#Context,
        out: Collector[T]): Unit = {
      // emit data to regular output
      out.collect(value)

      // emit data to a corresponding side output
      ctx.output(accountKOutputTag, value)
    }
  })

...

val account1SideOutputStream: DataStream[T] = mainDataStream
    .getSideOutput(account1OutputTag)
    .addSink(account1KinesisProducer)
...

val accountNSideOutputStream: DataStream[T] = mainDataStream
    .getSideOutput(accountNOutputTag)
    .addSink(accountNKinesisProducer)