2017-08-07 49 views
0

我們目前每個主題都使用一個生產者。由於顯而易見的原因,我們正在考慮轉換爲一個製作人員來處理多個主題KafkaProducer(0.9):單一生產者多個主題。潛在問題?

現在,有沒有這樣的情況,一個主題可能由於某種原因而較慢,而不是其他?如果有這樣的情況,它將如何與一個單一的生產者生產多個主題?會影響其他主題的吞吐量嗎?

是否有任何其他情況下,使用單個生產者的多個主題可能不是一個好主意?

謝謝!

更新: 這裏是我們到目前爲止已經試過:

我們簡要地看了看代碼,並在這裏就是我們明白: 卡夫卡服務器接受一個批次每個主題分區的消息。 Map [TopicAndPartition,MessageSet]

它試圖在配置的超時內處理整個批處理,併發回包含成功和失敗記錄的響應。

現在讓我們來看看有什麼可以去錯了一個話題水平,以及如何將影響整批:

1)不適用於一個主題的所有副本: 比方說,一個批處理中包含的數據爲三個主題:test1,test2,test3。 對於test3,並非所有副本都可用。這種情況會立即被領導發現,並且會使記錄失敗。在這種情況下,該批次不會被延遲,並且test1和test2的吞吐量不會受到影響。

2)主題的副本很慢。 假設只有test3的副本很慢。在這種情況下,複製test3消息需要時間,這反過來會延遲整個批處理,從而影響主題test1和test2的吞吐量。

還有什麼可以出錯?

謝謝!

回答

0

我假設你是指從多個生產者到同一個應用程序中的一個生產者?

使用單一的生產者應該不會有負面

  • 你必須每個經紀人(你有N * n個生產者)的單個連接
  • 您將一批消息更有效地

可能有一些缺點,可以通過conf解決:

  • 如果您有配額經紀人方面,其中配置爲控制經紀人的吞吐量,因爲你將生產更多的數據與一個生產者,你可能會達到配額。
  • 您可能需要稍微修改一下您的conf(這取決於您使用的是哪個客戶端),因爲您將生成更多數據 - 例如,在java生產者上的buffer.memory,並且如果要批量生產最好的max.request.sizebatch.size。這取決於您的數據
+0

感謝您的答覆@Treziac。您能否對此評論一下:「是否有一個主題可能因某種原因而較慢,而不是其他主題」。這會影響其他主題的吞吐量嗎? – Ninad

+0

我不確定你的意思。 (編輯後早期) 你的意思是,當你有 'producer1 - > topic1' 'producer2 - > topic2' ... ,並傳遞給 '生產者 - > TOPIC1,標題2,topic3'? 那麼話題的所有吞吐量至少是相同的? 如果所有的生產者都在同一個過程中,除了我之前提到的情況(如果您達到配額),應該沒有較慢的吞吐量。 – Treziac

+0

另外,如果您改進批處理以提高吞吐量,則可能會增加延遲(吞吐量更高但延遲更高)。如果它至關重要,你會收到你的數據在5毫秒,而不是100毫秒,你將不得不犧牲批量(但你沒有提到延遲,所以我認爲沒關係) 請注意,生產者是線程安全的生產。用它來最好。 在你的情況,只需更換舊的多個實例應該沒問題 – Treziac