2017-04-24 38 views
0

我们配置了一个卡夫卡主题,我们在该主题上发布我们每天交易的每只股票的累积报表。 例如Stock A-Buy-50,Sell-60,Stock B-Buy-44,Sell-34等。发布时的关键是股票的RIC代码。在卡夫卡主题上发送的每个密钥对应的最后一个值

第二天,我希望所有消费者都能分别获得每只股票的最后发布头寸。我想了解如何配置Kafka生产者/消费者来实现这种行为。

想到的一件事是为每只股票创建一个分区,这将导致每只股票的个别偏移,并且所有消费者都可以指向最高偏移量并获得最新头寸。

这是正确的方法还是我错过了明显的东西?

+0

我想另一种选择是每次连接消费者时指定一个随机消费者ID,这将使Kafka返回所有密钥的所有最新值。 – Bhushan

回答

0

您的方法可行,但前提是您不必太在意时间界限 - 例如,您不需要分别计算每一天的计数,并严格要求只发生发生在说,[2017年1月25日00:00 - 01/26/2017 00:00]必须计算在内。

如果您确实需要严格按每天计数 - 您可以尝试使用Kafka Streams,使用RIC的关键字和根据事件时间戳设置为24小时的窗口。

这只是另一种方式来做到这一点 - 我相信有更多的方法可用!

+0

感谢@Marina分享关于Kafka溪流的提示,我们没有时间要求。 只需要消耗每个RIC的最后已知状态。 是否可以实现只使用一个分区? – Bhushan

+0

如果您对时间界限不感兴趣并且只关心最新状态 - 我会在yoru消费者中使用本地缓存,由Redis或Postgres支持存储此信息,并在您收到来自Kafka的事件时不断更新它。卡夫卡非常适合可扩展且速度非常快的“移动”事件 - 它并非真正被设计成用作商店来运行查询...... – Marina

+0

是的,这是另一种方法,但我对此方法的关注是 - 1.另一个州维护 2.其他硬件 3. IO可能是一个瓶颈 理想情况下,我想要kafka为我提供每个键的最后一个值。 – Bhushan