Apache kafka 如何设计实时股价的发布/订阅体系结构

Apache kafka 如何设计实时股价的发布/订阅体系结构,apache-kafka,apache-pulsar,Apache Kafka,Apache Pulsar,我有一个外部系统,可以发布实时财务数据(例如全球交易所的股票报价和价格) 此外部系统对每个帐户连接的股票数量有一定限制,因为我们有许多应用程序需要使用这些实时流数据,因此我们不希望每个应用程序都连接到该外部系统并自行管理容量,因此,我们希望设计一个单一系统,对所有股票进行消费,然后发布到某个消息队列(例如kafka或pulsar),然后下游应用程序可以消费kafka主题 问题是我们如何设计主题,库存数量大约为1000万,但每个应用程序只对其中的子集感兴趣,子集大小可以是小的,也可以是大的,不同的

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

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

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

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


我不知道是否有更好的方法来达到我的要求,请提供建议,谢谢。

如果我正确理解您的要求,您可以获得一些实时的股票价格信息,其中包括该交易所所有证券的报价,即APPL、IBM和MSFT报价都包含在该单一信息中。此外,您不希望消费者直接连接到此提要,因此需要将该信息存储在中间消息系统中

在这种情况下,你可能想考虑使用脉冲星对数据进行预分类。然后,这些消费者中的每一位都可以将结果发布到特定主题的股票代码上。然后,客户只需要订阅他们感兴趣的主题,并使用该数据的子集


所有股票代码---->(500个代码特定主题)。卡夫卡是个硬性要求吗?复杂的路由场景更容易用AMQP建模。不,不必是卡夫卡,我将检查RabbitMQ,谢谢。RabbitMQ中的路由功能似乎符合我的基本要求,我可以动态地将新队列分配给新消费者,以发布消费者感兴趣的数据。但是,我对一个交换机和一个队列上的消息速率限制有些担心,我是否必须将所有消息放在一个交换机上,然后将它们路由到不同的队列?我们不能将一个队列绑定到多个交换机,对吗?Pulsar应该可以解决这两个问题,Kafka的可扩展性,具有类似于AMQP的路由特性。我从未亲自使用过它,但如果我是你,我可能会从这里开始。我以前确实看过Pulsar,但似乎路由功能不够好,可能需要使用Pulsar功能来实现我的要求?只是试图了解这些数据交换的数量,一次更新/消息的大约大小,如果一个交易所的所有证券都包含在一个提要中?如果我们谈论纽约证交所,这种实时更新的频率一般是多少?我看到他们的网站上有纽约证券交易所的实时订阅源。但只是试图从系统设计的角度来理解,这取决于数据提供商,即纽约证交所。然而,最好是有一个feed为所有股票提供报价,其中每条消息包含两条信息:股票代码和报价。如果我们使用股票代码作为消息键,然后使用Pulsar key shared subscription,那么数据将为我们预先排序,即所有APPL报价将发送给同一消费者。