如何设计实时股价的发布/订阅架构

时间:2019-06-14 06:34:10

标签: apache-kafka apache-pulsar

我有一个外部系统来发布实时财务数据(例如,全球交易所的股票报价和价格)。

此外部系统对每个帐户连接的存货数量有一定的限制,因为我们有许多应用程序需要使用这些实时流数据,因此我们不希望每个应用程序都连接到该外部系统并通过以下方式管理容量因此,我们希望设计一个单一系统来处理所有股票的消耗,然后发布到某些消息队列(例如kafka或pulsar),然后下游应用程序就可以从kafka主题中消费。

问题在于我们如何设计主题,股票数量大约为1000万,但是每个应用程序只对其中的子集感兴趣,子集的大小可以小也可以大,并且不同的子集可以共享相同的主题股票。

我能想到的是动态创建一些流作业(例如,kafka流或单独的flink作业以进行预聚合,以收集所有主题中每个消费者的感兴趣的股票,然后发布给每个消费者另一个主题) ,这样,每个消费者将只拥有自己感兴趣的股票,从而拥有自己的主题,但无疑会带来消息传输时间,消息重复和延迟的开销,此外,如果数量越来越多,容量也会成为问题。消费者。

我不知道是否有更好的方法可以满足我的要求,请提出建议,谢谢。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的要求,那么您会有一些股票的实时供稿,其中包括该交易所所有证券的报价,即该单个供稿中包含APPL,IBM和MSFT报价。另外,您不希望消费者直接附加到此提要,因此您需要将该信息存储在中间消息系统中

在这种情况下,您可能需要考虑使用Pulsar的key_shared subscription按代码符号对数据进行预排序。然后,每个这些消费者都可以将其结果发布到股票代码特定的主题。然后,客户只需要订阅他们感兴趣的主题,并消费其中的一部分数据即可。

所有股票代号–>(500个特定于代号的主题)。 <----客户订阅了其中的一部分。

相关问题