0

我不得不機(機#1和機#2)之間卡夫卡集羣設置和配置之間傳輸文件如下:使用卡夫卡到兩個客戶端

1)每個機被配置成具有一個代理和一個動物園管理員正在運行。 2)服務器和動物園管理員屬性被配置爲具有多代理,多節點動物園管理員。

我現在有KafkaProducer和KafkaConsumer以下認識:

1)如果我從machine#1發送文件到machine#2,它的分解在使用一些默認的分隔符(LF或\ n)的線。 2)因此,如果機器#1發佈2個不同的文件到同一主題,這並不意味着machine#2將收到這兩個文件。相反,每行都會附加到主題日誌分區,並且machine#2將按照到達順序從日誌分區讀取它。即順序是不一樣的

file1-line1 
file1-line2 
end-of-file1 
file2-line1 
file2-line2 
end-of-file2 

,但它可能是這樣的: 文件1,一號線 文件2,一號線 文件1,2號線 結束文件1 文件2,2號線 結束-file2

假設以上是正確的(我很高興出錯),我相信簡單的Producer Consumer用法傳輸文件不是正確的方法(可能連接API是解決方案)。由於Kafka網站上說「Log Aggregation」是一個非常受歡迎的用例,所以我想知道是否有人使用Kafka演示文件交換示例的示例項目或網站。

P.S.我知道根據定義Connect API說這是爲了在kafka和「其他」系統之間進行可靠的數據交換 - 但我不明白爲什麼其他系統不能有卡夫卡。所以我希望我的問題不必關注「其他」非卡夫卡系統。

回答

1

你的理解是正確的,但是如果你想要相同的順序,你可以只使用1分區的主題。 因此,機器#2讀取的順序與您發送的順序相同。 然而,這將是低效率的,並將缺乏卡夫卡被廣泛使用的並行性。

卡夫卡在一個分區內訂購保證。引自文獻

卡夫卡只是在記錄一個話題

在分區中提供了一個全序,不 不同分區之間爲了所有行發送從一個文件只有一個分區,發送一個額外的密鑰給生產者客戶端,它將把發送的消息散列到同一個分區。 這將確保您在機器#2上以相同順序從一個文件接收事件。如果您有任何問題,請隨時詢問,因爲我們使用Kafka來訂購生產中多個來源生成的事件的保證,這也是您的用例。

+0

非常感謝。我實際上正在研究PoC,這可能會導致將文件從一個卡夫卡生產者('machine#1')傳輸到其他卡夫卡,反之亦然。所以你說我必須使用連接器API?或者我需要使用Stream來代替? – ha9u63ar

+0

@ ha9u63ar如果是雙向傳輸,則必須運行與生產者相同的實例以及連接到kafka集羣的消費者。您也可以使用連接器或簡單的Producer/Consumer客戶端 –