java - 低延迟 Flink 流连接

标签 java real-time apache-flink flink-streaming low-latency

我想使用 Flink 流处理低延迟(<1ms)的市场数据。

我有一组计算,每个计算订阅三个流:缓慢移动的参数数据、股票价格和外汇汇率。

例如

参数(缓慢滴答:每天一次或两次):

symbol|asset|strike
12345 |AAPL |1020
12346 |AAPL | 500
12347 |AAPL |1200
12348 |DAX  |2020
12349 |DAX  |2500
12350 |DAX  |2200
12348 |BASF | 400
12349 |BASF | 300
12350 |BA   |1000

Assets (每秒滴答多次):

symbol|currency | spot
AAPL | USD | 2300
DAX  | EUR | 4002
BASF | EUR |  304
BA   | GBP |  234

fx(每秒滴答多次):

symbol|rate
USD  | 1
GBP  | 1.2
EUR  | 1.15
NZD  | 1.8

每当股票、外汇汇率或参数数据发生变化时,我想立即计算结果并将其输出为新流。这在逻辑上可以表示为连接:

例如从 params、asset、fx 中选择价格=( params.strike - asset.spot ) * fx.rate 其中 fx.symbol = asset.currency 且 asset.symbol = params.asset

股票和外汇汇率将以不同的速率/时间快速变动(每秒多次),并且参数数据的变动频率非常低(每天一次或两次)。每当这些值发生任何变化时,我都会重新计算并发布价格。

到目前为止,我已经尝试过不使用 Windows 的“广播”,这确实有效,但这确实意味着我需要编写大量自定义连接代码,并且我无法使用更优雅的“连接”语法,而且绝对不是 SQL。它似乎也效率低下,因为数据正在被复制和广播。

为了使用联接,我尝试了 Windows,使用自定义触发来尝试在数据到达时立即发送数据,以及自定义驱逐代码来保留最新值。这似乎有效,但延迟很高(很多秒)。

还有其他人有什么建议吗?

谢谢

最佳答案

Flink SQL(尚)无法执行广播连接,因此您能够手动实现的优化不适用于 SQL API。关注 FLIP-92 的进展,旨在使这成为可能。

关于java - 低延迟 Flink 流连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59875064/

相关文章:

parallel-processing - Apache 弗林克 : How to execute in parallel but keep order of messages?

apache-flink - 如何将flink任务或背压相关指标导出到prometheus?

apache-flink - Apache 弗林克 : Sorting dataset and creating DataStream from multiple input files with Event times

java - 清除应用缓存时,Firebase 匿名身份验证是否仍然存在?

java - 处理高频读取的两个线程

java - 参与者数量有限的 Firebase 房间

c - linux/bin/ld : cannot find -lrtdk Xenomai

java - 如何在 Java 中对对象数组进行排序?

java - 从一个 csv 读取与从文件夹读取然后再从 csv 读取

java - Apache 公共(public) CLI 1.3.1 : Option coming after another option with multiple arguments is consumed as ARGUMENT