我正在建立一個使用卡夫卡的相關係統。假設有一個服務A執行數據處理,並有數千個客戶端B提交作業。 乙 s爲短暫的,他們出現在網絡上,數據推到一個,然後兩個重要的事情發生了:關聯卡夫卡和動態主題
- 乙將立即從一個接收狀態;
- 乙然後要麼 輟學完全,還在網上對 地位得到進一步更新,還是會偶爾彈回上以檢查其狀態。
(這與網格計算或mpi沒有不同)。 乙具有一個唯一的ID(UUID在我的情況),這將它發送到在標頭,這反過來,使用它作爲:
兩個點應使用的correlationId
公知的概念來實現Reply-To
主題發送狀態更新。這意味着它必須即時創建主題,它們不能被預先確定。
我有auto.create.topics.enable
開機,它確實動態創建主題,但現有的消費者並不知道它們,並且需要重新啓動[以獲取主題元數據我想,如果我理解了文檔的權利]。我還檢查了消費者的metadata.max.age.ms
設置,但它似乎沒有幫助,即使我將其設置爲非常低的值。
據我所讀,這還沒有回答,即:kafka filtering/Dynamic topic creation,kafka consumer to dynamically detect topics added, Can a Kafka producer create topics and partitions?或回答不滿意。
由於有正在幾百乙 S的一個 S和數以千計的,我不可能使用共享的主題或類似的東西,免得我過載我的網絡。我可以使用卡夫卡的AdminTools
或任何它所謂的預先創建主題,但我覺得它有點愚蠢(即使我看到人們用它來與Zookeeper和Kafka基礎設施本身交談的真實例子)。
所以問題是,有沒有一種方法可以動態地創建卡夫卡主題,讓消費者和生產者都知道它,而不用重新啓動或任何東西?而且,在最壞的情況下,AdminTools是否真的可以幫到它,並且我必須使用它 - A或B?
Kafka 0.11, Java 8
UPDATE 與AdminClient
創建主題不利於無論出於何種原因,消費者仍然拋出LEADER_NOT_AVAILABLE
當我嘗試訂閱。
「由於過時的話題」,這就是爲什麼我計劃也動態刪除它們,但我明白了你的觀點。 「別人也說這樣做很尷尬」 - 是的,我知道卡夫卡不是用於這類任務的最好的媽媽,如果我未能達到我想要的,我會考慮別的,也許zeroMQ。 –
對於過時的主題問題,我們發送了一個針對卡夫卡的功能請求發送的思想,並且還有一個主題保留策略。我正在考慮制定一個時間或其他基於指標的保留策略。我認爲它會像你的和其他人一樣在很多情況下有用。 – PragmaticProgrammer
或者也許他們可以去排隊,並更符合JMS標準,這將是一個功能;)。 –