2017-04-24 37 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