apache-flink - 动态调用 Flink 算子
问题描述
我最近开始学习流处理,并且正在尝试使用 Apache Flink。我正在尝试编写一个从 Kafka 主题读取事件的作业,可能执行一些无状态链式转换,并对另一个应用程序进行 REST 调用以发布每个转换后的事件。例如,我的主要方法可能如下所示 -
public class KafkaSourceToRestSinkJob {
public static void main(String[] args) {
String configPath = args[0];
//Read configuration for the job (like kafka properties, rest uri for sink, possibly operators to invoke)
...
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<String> dataStream = env.addSource(new FlinkKafkaConsumer<>(topic, new SimpleStringSchema(), kafkaProps));
dataStream.addSink(new RestSinkFunction<>()); //Custom sink function implementing org.apache.flink.streaming.api.functions.sink.SinkFunction
//Chain some operators depending on some parameters in the config file
...
env.execute("Confused Job");
}
}
我的目标是为具有相同类型的源和接收器的多个作业提供一个通用的 jar 工件。如果我需要一项工作来执行转换 A、B 和 C(实现将存在于 jar 中),我可以在配置文件中指定它们并将路径传递给程序 args 中的文件。
现在这是我的问题 -
- 是否可以动态调用运算符?
- 我知道在接收器中进行 REST 调用可能会导致一些不必要的延迟,但在我的应用程序中,这是可以容忍的。我也不在乎反应。牢记这一点,我是否有理由避免使用 REST 接收器?
- 总的来说,我是不是大错特错了?
谢谢!
解决方案
我可能会看看 Flink SQL。您可以定义公共源/接收器,然后只需将SQL 查询传递给 Flink。
过去我使用 Spark SQL 进行了类似的设置,并且效果很好。您不需要发明自己的规范语言,而且更容易理解。
推荐阅读
- r - Trigger observeEvent in Shiny even when condition hasn't changed
- kotlin - 如何在应用方法时将列表映射到集合(Java 到 Kotlin 代码转换)?
- python-3.x - 我如何生成一个从 1 到 200 的整数列表,它只打印前 20 个奇数/偶数?
- css - 为什么@font-face 在 iOS Safari 中不起作用?
- impala - 如果无效元数据可以做同样的事情,为什么需要在 Impala 中刷新
- c# - 将事件从线程发送到 UI
- javascript - input[type="file"] 判断用户是否没有选择任何文件
- cryptography - 什么是最安全的密钥交换方法
- c# - 在C#中如何在另一个方法执行时锁定方法的执行,没有自锁?
- ios - SwiftUI中ScrollView底部对齐内的VStack