我想使用 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/