2017-06-16 37 views
-1

如何多線程當有流數據的單一來源卡夫卡生產者是否行得通呢?假設我們有三個生產者線程。每個生產者如何知道數據消費將從何處開始?我們不希望每個生產者都使用相同的數據(重複)。多線程Kafka生產者如何工作?

+1

我有點困惑......你說的是你提到生產者,但接下來是「每個生產者如何知道數據消費從何處開始」以及「我們不希望每個生產者消費」.. 。你是在談論消費者還是生產者? – ppatierno

+0

嗨@ppatierno,我正在談論製作人。比方說,如果我們從API獲取數據源,並且想要在Kafka中發佈,那麼下游應用程序可以使用這些數據。 – Mike

+1

在我看來不是卡夫卡的問題,而是你如何同步你的客戶(從API接收器)使用的生產者將消息發送到卡夫卡之前。 – ppatierno

回答

1

在我看來,不是卡夫卡的問題,而是如何使用生產者將消息發送到卡夫卡之前,你的客戶(從API接收器)同步。

0

多線程Kafka製作者將如何工作,當你有流數據的單一來源 ?

您可能想要使用某種中間狀態來跟蹤已成功存儲在kafkastream中的事件主鍵。它

覺得作爲關係數據庫,在那裏當您嘗試使用相同的主鍵寫的多條記錄數據庫將拋出DuplicateKeyException

與kafka流相同,在事件中選擇一些獨特的屬性作爲主鍵,並將它們存儲在某種緩存中(如果所有生產者都在同一臺機器/同一應用中,但是分佈式緩存如Redis,Memcached如果你在不同的機器分佈生產者)

因此,流程是,如果該事件已經在EMITTED狀態在高速緩存中刪除事件。

       | emitted events | 
Producer1---event1, event10 ---| e1 - EMITTED | 
           | e10 - EMITTED | eventstream 
           |    |-------------------- 
Producer2---event1, event2-----| e2 - EMITTED | e1, e10, e2, e3 
    (ignores e1)    |    | 
           |    |-------------------- 
Producer3---event1, event3-----| e3 - EMITTED | 
    (ignores e1)    |    | 

你也可能要跟蹤的事件,EMIT_INITIATED的兩種狀態和EMITTED一次kafkastream承認持久性。這將解決一個問題,當生產者1和2生產者都試圖在同一時間發出event1既然他們沒有看到它在緩存中,兩者都將被髮射到流。