在下沉到 Kafka 主题之前调用 DataStream 上的 forward()

问题描述 投票:0回答:0

环境

弗林克 =

v1.14.0

场景

  1. 来自 Kafka 的数据源。
  2. 通过 HTTP 获取额外数据并广播它。
  3. 通过
    CoProcessFunction
  4. 合并来自第一和第二数据源的数据
  5. 通过上一步的结果 DataStream
    KafkaSink
    下沉到 Kafka。
  6. 重新开始工作
  7. 从 4 号开始的所有记录都重新发送到 Kafka Topic,因为使用了
    AT_LEAST_ONCE
    策略。它导致 Kafka 主题中的记录重复,因此导致进一步的数据传输/分析/whatever 不正确。

KafkaSink

EXACTLY_ONCE
策略的使用不适合我们的案例。

建议的解决方案

之前从第 4 步下沉 DataStream 到 Kafka - 我决定在

forward()
 上调用 
DataStream<MyAwesomeObject> 方法(好吧,刚刚在源代码中找到了这个方法)

之前

...
myDataStream.sinkTo(preConfiguredKafkaSink)
...

之后

...
myDataStream.forward().sinkTo(preConfiguredKafkaSink)...
...

在 DataStream 上添加

forward()
调用似乎解决了问题:

  • 工作重新开始。
  • 资源重新初始化。
  • KafkaSink 也被重新初始化。
  • topic没有重复记录

在调用

forward()
之前调用
sinkTo(...)
的任何缺点/优点?

apache-flink flink-streaming
© www.soinside.com 2019 - 2024. All rights reserved.