2017-01-22 92 views
8

Kafka Streams中是否具有允許將單個輸入流動態連接成多個輸出流的功能? KStream.branch允許基於真/假謂詞進行分支,但這不是我想要的。我希望每個傳入日誌確定它將在運行時流式傳輸的主題,例如,日誌{"date": "2017-01-01"}將流式傳輸到主題topic-2017-01-01,而日誌{"date": "2017-01-02"}將傳輸到主題topic-2017-01-02將Kafka輸入流動態連接到多個輸出流

我可以在流上調用forEach,然後給卡夫卡製作人寫信,但看起來不太優雅。在Streams框架中有更好的方法嗎?

+0

你是什麼意思「基於一個字符串」 - btw:'KStream.branch'有多個謂詞(你的問題表明你錯過了這個)。所以'branch'應該允許你做你想做的事。也許你可以給一個數據的例子? –

+2

我應該更清楚。我意識到它需要多個謂詞 - 如果我有一個固定數量的話題要傳播,那將是一個很好的解決方案。不過,我要做的是寫入名爲'foo- {date}'的主題。 – kellanburket

回答

4

如果您想根據您的數據動態創建主題,那麼您目前在卡夫卡的Streaming API中沒有得到任何支持(v0.10.2及更早版本)。您需要創建KafkaProducer並自行實施動態「路由」(例如使用KStream#foreach()KStream#process())。請注意,您需要進行同步寫入以避免數據丟失(不幸的是,這不是非常高效)。有計劃用動態主題路由擴展Streaming API,但現在沒有具體的時間表。

還有一個問題需要考慮。如果您提前不知道目標主題,只依賴所謂的「主題自動創建」功能,則應確保正在使用所需的配置設置創建這些主題(例如,分區數量或複製因子)。

作爲「主題自動創建」的替代方法,您還可以使用管理客戶端(可從v0.10.1獲取)創建具有正確配置的主題。請參閱https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations

+0

您可以給我們一個鏈接到動態主題路由計劃 - 我想遵循進度 - 謝謝 – AutomatedMike

+0

https://issues.apache.org/jira/browse/KAFKA-4936 –