股票报价的消息中间件是如何设计的?

2022-04-18 22:41:32 +08:00
 golangLover

如果是用 kafka 作为消息中间件。

股票的报价需要是高度实时,而且要严格的消息顺序(例如我必须先看到 12:01:01 的信息,然后再看到 12:01:02 的信息)。

而 Kafka 只在同一个 partition 内的消息是严格顺序的,所以只有就是一个 topic 一个 partition 才能保证消息顺序。

那用户是属于哪一个 topic 这种关联应该怎么样去绑定呢?

要保证 exactly once,还有幂等性之类,很多细节都不清楚。哪位能赐教一下,谢谢。

2569 次点击
所在节点    程序员
17 条回复
xderam
2022-04-18 23:18:00 +08:00
你说的是股票行情还是下单撮合交易?”报价“这个词没太理解。
gabon
2022-04-18 23:21:15 +08:00
可以找个项目读一下,最近想读一下 qmq ,你说的这几个特性基本上支持
haozibi
2022-04-18 23:29:59 +08:00
kafka 的 Partition 保证有序,每个 Message 通过 Message.Key 字段做 Hash 决定 Message 发送给某个 Partition (默认分区器)

所以你可以只用一个 topic ,然后 user_id 做 key ,这样就能保证同一个 user_id 的消息都只存在同一个 Partition ,即可保证 user_id 消息有序
golangLover
2022-04-18 23:59:43 +08:00
@xderam 行情,派送给 app ,像富途牛牛
golangLover
2022-04-19 00:00:33 +08:00
@gabon 找了一些,但觉得不是很完整。您有推荐的吗?
neoblackcap
2022-04-19 01:30:19 +08:00
你这个报价有没有时效性的啊?据我了解,股票报价都是按时效算钱的。不同延迟的报价收费可不一样。
这行里面的很多公司的解决方案都是自研的,因为一般开源解决方案满足不了他们对时效性的追求。
levelworm
2022-04-19 03:46:03 +08:00
@neoblackcap 话说什么样的水平才能做这种系统
gabon
2022-04-19 09:34:01 +08:00
@golangLover 就是 qmq ,qunar 开源的
neoblackcap
2022-04-19 10:06:04 +08:00
@levelworm 什么样的水平不好说,反正有很多用 C++的。如果是 Java 的,可以去看看 LMAX 写的 Disruptor 框架。那可是正经八百的金融公司写的,用于解决报价问题的框架
levelworm
2022-04-19 10:10:49 +08:00
@neoblackcap 多谢推荐
milkpuff
2022-04-19 11:39:46 +08:00
这种对顺序不敏感吧,大部分数据是顺序的,少部分顺序乱了,靠客户端把旧消息过滤丢掉就好了。
mrsatangel
2022-04-19 16:33:46 +08:00
关键字:tibco rv, solace
golangLover
2022-04-19 23:12:45 +08:00
@haozibi 这个我也有了解。但实际上一个 app 上面的用户千万个,按照这说法实际操作其实是单一一个 kafka instance, 而他只有负责某类股票(例如美股) 的 topic 只有一个,而且这 topic 只有一个 partition? 那对应这个 topic 的 consumer 也只有一个。读完以后,就缓存到 redis 。那这个 redis 的 value 不停更新,大家就多线程读这个 redis 的 value 。是这样吗?
golangLover
2022-04-19 23:13:23 +08:00
golangLover
2022-04-19 23:13:55 +08:00
@milkpuff 问题是肯定有延迟啊,你怎么知道现在这个收到的信息其实是旧的信息呢?
milkpuff
2022-04-20 00:16:21 +08:00
@golangLover 交易所产生的行情都是带时间戳的。每一帧行情数据推过来和上一帧比较一下。通常股票 3 秒一个数据,很小概率有乱序的丢弃。
crazychang
2022-04-20 10:55:30 +08:00
虽然我也不太懂 但是觉得可以找个极速柜台的接口文档看看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/847769

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX