2017-10-10 119 views
2

我正在建立一個使用卡夫卡的相關係統。假設有一個服務A執行數據處理,並有數千個客戶端B提交作業。 s爲短暫的,他們出現在網絡上,數據推到一個,然後兩個重要的事情發生了:關聯卡夫卡和動態主題

  1. 將立即從一個接收狀態;
  2. 然後要麼 輟學完全,還在網上對 地位得到進一步更新,還是會偶爾彈回上以檢查其狀態。

(這與網格計算或mpi沒有不同)。 具有一個唯一的ID(UUID在我的情況),這將它發送到在標頭,這反過來,使用它作爲

兩個點應使用的correlationId公知的概念來實現Reply-To主題發送狀態更新。這意味着它必須即時創建主題,它們不能被預先確定。

我有auto.create.topics.enable開機,它確實動態創建主題,但現有的消費者並不知道它們,並且需要重新啓動[以獲取主題元數據我想,如果我理解了文檔的權利]。我還檢查了消費者的metadata.max.age.ms設置,但它似乎沒有幫助,即使我將其設置爲非常低的值。

據我所讀,這還沒有回答,即:kafka filtering/Dynamic topic creationkafka consumer to dynamically detect topics added, Can a Kafka producer create topics and partitions?或回答不滿意。

由於有正在幾百 S的一個 S和數以千計的,我不可能使用共享的主題或類似的東西,免得我過載我的網絡。我可以使用卡夫卡的AdminTools或任何它所謂的預先創建主題,但我覺得它有點愚蠢(即使我看到人們用它來與Zookeeper和Kafka基礎設施本身交談的真實例子)。

所以問題是,有沒有一種方法可以動態地創建卡夫卡主題,讓消費者和生產者都知道它,而不用重新啓動或任何東西?而且,在最壞的情況下,AdminTools是否真的可以幫到它,並且我必須使用它 - AB

Kafka 0.11, Java 8

UPDATEAdminClient創建主題不利於無論出於何種原因,消費者仍然拋出LEADER_NOT_AVAILABLE當我嘗試訂閱。

回答

0

好的,所以我會回答我自己的問題。

  1. 使用AdminClient創建主題僅適用於在創建相應消費者之前執行的主題。
  2. 更改了我的拓撲結構,考慮到1)並在消息頭中引入了相關ID的交換(與JMS中的相同)。

應當指出的是,很多人都說,這隻能在BS以單消費羣體,並聽取主題1分。

1

不建議創建不限數量的主題。 Id建議重新設計您的拓撲/系統。

伊夫想過做動態主題自己的,但後來意識到,最終飼養員會失敗,因爲它會耗盡內存由於陳舊的話題(想象從現在開始的一年有多少話題可以創建)。也許這可以工作,如果你確保你有一些上限的話題創建。總的來說是一個行政頭痛。

如果您使用Kafka查詢請求響應,您會發現其他人也說這樣做很尷尬(Does Kafka support request response messaging)。

+1

「由於過時的話題」,這就是爲什麼我計劃也動態刪除它們,但我明白了你的觀點。 「別人也說這樣做很尷尬」 - 是的,我知道卡夫卡不是用於這類任務的最好的媽媽,如果我未能達到我想要的,我會考慮別的,也許zeroMQ。 –

+0

對於過時的主題問題,我們發送了一個針對卡夫卡的功能請求發送的思想,並且還有一個主題保留策略。我正在考慮制定一個時間或其他基於指標的保留策略。我認爲它會像你的和其他人一樣在很多情況下有用。 – PragmaticProgrammer

+0

或者也許他們可以去排隊,並更符合JMS標準,這將是一個功能;)。 –